update & locate-Befehlsproblem - Dateien von einer externen Festplatte werden nach dem Neustart nicht mehr indiziert

20

Dateien von meiner externen Festplatte werden nach dem Neustart nicht mehr indiziert. Ich muss wieder einsteigen und dann rennen

# updatedb

nach jedem Neustart. Das Problem ist behoben. Bei meinen externen Festplatten dauert es einige Minuten. Kann ich nach dem Neustart die Indizierung für meine externen Geräte beibehalten, damit der Befehl locate meine externen Geräte durchsuchen kann?

EDIT: Pro Anfrage hier sind meine Angaben:

$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"

# mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/me/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=me)
/dev/sdb1 on /media/me type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sdd1 on /media/Little Boy type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sde1 on /media/Fat Man type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)

# on_ac_power; echo $?
255
user784637
quelle
1
Bitte geben Sie die Konfigurationsdateien und Mount - Optionen: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
vereinbaren
wird es tun, wird für etwa 8 weitere Stunden keinen Zugang zu einem Linux-Rechner haben
user784637
Vereinbaren, ich habe meine Antwort mit meinen
Angaben
<Hinweis für die Zukunft> So stellen Sie im Allgemeinen fest, was updatedbgeschieht: (1.) Führen Sie updatedbmit --verboseund aus --debug-pruning. (2.) Sehen Sie sich den Text an, um zu sehen, was indiziert wird und was nicht -> passen Sie Ihren an /etc/updatedb.conf. Ich hatte grepfür Dateien, die ich brauchte, aber übersprungen wurden. Zum Beispiel musste ich ändern /etc/updatedb.confmit: (1.) PRUNE_BIND_MOUNTS = "no"(2.) entfernen nfs nfs4 nfsd autofsvon PRUNEFS(3.) entfernen /netvonPRUNEPATHS
Trevor Boyd Smith

Antworten:

35

Dateien von Ihrer externen Festplatte werden nicht indiziert, da sie updatedbso konfiguriert sind, dass sie nichts darunter indizieren /media, wo normalerweise externer Speicher bereitgestellt wird. Diese Konfiguration wird in der Datei festgelegt /etc/updatedb.conf. Speziell der Eintrag /mediain der PRUNEPATHSZeile.

Einige Ideen, wie Sie updatedbIhr externes Laufwerk indizieren können:

1. Montieren Sie das externe Laufwerk unter /mnt.

Wenn Ihre externe Festplatte dauerhaft gemountet werden soll, empfehle ich, sie so zu konfigurieren, dass sie nicht unter, /mntsondern unter gemountet wird /media. Dies kann normalerweise durch Bearbeiten erfolgen /etc/fstab. Suche nach "fstab", um mehr darüber zu erfahren. Zum Bearbeiten benötigen Sie Sudo-Rechte /etc/fstab.

2. Erstellen Sie eine dedizierte Datenbank für Ihre externe Festplatte und fragen Sie diese bei Bedarf ab.

Mit dem folgenden Befehl wird eine dedizierte Datenbank erstellt:

updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk

Dadurch wird die Datenbank in der versteckten Datei .externalharddisk.dbin Ihrem Zuhause erstellt. Sie brauchen sudofür diesen Befehl nicht. Führen Sie denselben Befehl erneut aus, um die Datenbank auf dem neuesten Stand zu halten. Achtung: Wenn Sie diesen Befehl ausführen, während die externe Festplatte nicht gemountet ist, updatedbwerden die Dateien gelöscht und die Datenbank geleert.

Sie können ein Skript einrichten, um diese Aufgabe zu automatisieren. Suche nach "cronjob", um zu erfahren, wie das geht. Hinweis: Sie können einen Benutzer cronjob als Benutzer einrichten. Sie benötigen keine sudo-Rechte, um einen Benutzer-Cronjob einzurichten.

Der folgende Befehl fragt die Datenbank ab:

locate -d ~/.externalharddisk.db searchterm

Sie können auch die dedizierte Datenbank und die Standarddatenbank gleichzeitig abfragen:

locate -d ~/.externalharddisk.db: searchterm

Der Doppelpunkt am Ende gefolgt von nichts bedeutet, auch in der Standarddatenbank zu suchen.

Sie können einen Alias ​​für eine einfachere Verwendung erstellen. Fügen Sie folgende Zeile ein .bashrc:

alias locate-external='locate -d ~/.externalharddisk.db:'

Jetzt können Sie locatenur die Standarddatenbank durchsuchen und locate-externalauch auf Ihrer externen Festplatte suchen.

3. Entfernen /mediavonPRUNEPATHS

Hinweis: Ich empfehle das nicht ! Das liegt an der Funktionsweise updatedb. Wird ausgeführt, updatedbwährend die externe Festplatte entfernt wird, werden alle Einträge, die auf die externe Festplatte verweisen, aus der Datenbank entfernt. Wird ausgeführt, updatedbwährend die externe Festplatte angeschlossen ist, werden Einträge, die auf die externe Festplatte verweisen, erneut hinzugefügt. Da updatedbregelmäßig im Hintergrund läuft, kann man nie sicher sein, ob die Dateien von der externen Festplatte aktuell indiziert sind oder nicht.

Außerdem: Wenn Sie entfernen /mediaaus PRUNEPATHS, wird dieses Verhalten auch zu allen anderen externen Speichern Sie montiert haben passieren anwenden , während updatedbdie Datenbank aktualisiert.

Lesmana
quelle
2
Sie können diesen Alias ​​auch zu Ihrer ~/.bashrcDatei hinzufügen :alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77
+1 an Sie und OP. Anstelle eines separaten externen DB-Befehls, dh locate-externalich erwäge, drei Datenbanken in eine --database /mnt/c...für WSL, --dataabase /mnt/e...für gemeinsam genutzte WSL + Linux-Skripte und -Dokumente und --database /var/lib/mlocate/mlocate.dbfür doppelt gebootetes Ubuntu 16.04 anzuhängen. Das heißt, alle drei Datenbanken in derselben Befehlszeile suchen (natürlich mit einem Alias). Aber bevor ich anfange, wäre es schön zu wissen, ob es funktionieren wird. Kann ich deine Gedanken dazu bekommen?
WinEunuuchs2Unix
Ich bin mit dem Argument des Entfernens /mediavon nicht einverstanden PRUNEPATHS. Ja, es hat das von Ihnen erwähnte Problem, aber es ist noch schlimmer - Sie werden NIEMALS Dateien auf diesen Laufwerken finden. Es ist, als ob Sie Ihre Finger amputieren, damit sie sich beim Kochen nicht verbrennen (es sei denn, es gibt eine andere naheliegende Lösung, die impliziert wird und die ich nicht sehe).
Sridhar Sarnobat
2

In updatedb.confdu hast /mediain PRUNEPATHS. Sie sollten es entfernen, da Ihre externen Laufwerke dort gemountet zu sein scheinen.

Taneli
quelle
2

Dies sind weitere Verschönerungen, die Lesmanas Antwort ergänzen sollen

[1] leichte Verschönerung: Darf ich vorschlagen, das -i hinzuzufügen, um sicherzustellen, dass die gesuchte Abfrage kein Problem mehr darstellt : Fügen Sie es zu .bashrc >> hinzu

alias locate-external = 'locate -d ~ / .externalharddisk.db: -i '

[2] In Bezug auf die Aktualisierung beider Datenbanken . die in der Haupt-HD und die neue in der externen; Es lohnt sich wahrscheinlich, der .bashrc einen weiteren Eintrag hinzuzufügen

alias updateALL = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / media / externalharddisk'

und dann einfach updateALLim Terminal ausführen , um beide Datenbanken gleichzeitig zu aktualisieren

PS: Vergessen Sie natürlich nicht, . ~/.bashrcalles festzumachen , sobald eine neue Zeile in der .bashrc-
Datei externalharddiskgespeichert wurde

* PS³ und Sie können natürlich sowohl update als auch locate in Ihrem .bashrc zusammenführen

alias LO = 'sudo updatedb && updatedb -l 0 -o ~ / .externalharddisk.db -U / media / externalharddisk; lokalisiere -d ~ / .externalharddisk.db: -i '

Jetzt müssen Sie nur noch LO eingeben, gefolgt von den gesuchten Begriffen.

shantiq
quelle
+1 für Sequenz-Update und dann
suchen