problem z aktualizacją i lokalizacją - pliki z zewnętrznego dysku twardego nie są już indeksowane po ponownym uruchomieniu

20

Pliki z mojego zewnętrznego dysku twardego nie są już indeksowane po ponownym uruchomieniu. Muszę ponownie zamontować, a następnie uruchomić

# updatedb

po każdym ponownym uruchomieniu. Problem został zaktualizowanyb zajmuje kilka minut dla moich zewnętrznych dysków twardych. Czy jest jakiś sposób, aby zachować indeksowanie moich elementów zewnętrznych po ponownym uruchomieniu, aby polecenie locate mogło przeszukać moje elementy zewnętrzne?

EDYCJA: Na życzenie tutaj są moje specyfikacje:

$ 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
użytkownik784637
źródło
1
Proszę podać pliki konfiguracyjne i opcje montażu: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
zorganizować
zrobi, nie będzie miał dostępu do maszyny linuksowej przez około 8 godzin
użytkownik784637
Rozmieść, zaktualizowałem swoją odpowiedź o moje specyfikacje, dziękuję za twoją pomoc =)
user784637
<uwaga na przyszłość> Oto JAK OGÓLNIE dowiedzieć się, co updatedbsię dzieje: (1.) Uruchom updatedbprzy pomocy --verbosei --debug-pruning. (2.) Spójrz na tekst, aby zobaczyć, co jest indeksowane, a które nie jest indeksowane -> dostosuj /etc/updatedb.conf. I grepd plików, że muszę, ale były pomijane. Na przykład zmodyfikowałem za /etc/updatedb.confpomocą: (1.) PRUNE_BIND_MOUNTS = "no"(2.) usuń nfs nfs4 nfsd autofsz PRUNEFS(3.) usuń /netzPRUNEPATHS
Trevor Boyd Smith

Odpowiedzi:

35

Pliki z zewnętrznego dysku twardego nie są indeksowane, ponieważ updatedbsą skonfigurowane tak, aby niczego nie indeksować /media, czyli tam, gdzie zwykle jest podłączana pamięć zewnętrzna. Ta konfiguracja jest ustawiona w pliku /etc/updatedb.conf. W szczególności wpis /mediaw PRUNEPATHSwierszu.

Kilka pomysłów, w jaki sposób możesz updatedbzaindeksować dysk zewnętrzny:

1. Zamontuj dysk zewnętrzny od tyłu /mnt.

Jeśli twój zewnętrzny dysk twardy ma być zamontowany na stałe , sugeruję, aby skonfigurować go tak, aby był zamontowany pod, /mnta nie pod spodem /media. Zazwyczaj można to zrobić przez edycję /etc/fstab. Wyszukaj „fstab”, aby się o tym dowiedzieć. Do edycji potrzebne będą prawa sudo /etc/fstab.

2. Utwórz dedykowaną bazę danych dla zewnętrznego dysku twardego i przeprowadź zapytanie na żądanie.

Następujące polecenie utworzy dedykowaną bazę danych:

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

Spowoduje to utworzenie bazy danych w ukrytym pliku .externalharddisk.dbw domu. Nie potrzebujesz sudotego polecenia. Wykonaj ponownie to samo polecenie, aby zaktualizować bazę danych. Ostrożnie: jeśli uruchomisz to polecenie, gdy zewnętrzny dysk twardy nie jest podłączony, updatedbpomyśli, że pliki zostały usunięte i opróżni bazę danych.

Możesz skonfigurować skrypt do automatyzacji tego zadania. Wyszukaj „cronjob”, aby dowiedzieć się, jak to zrobić. Uwaga: możesz ustawić cronjob użytkownika jako użytkownika. Nie potrzebujesz uprawnień sudo, aby skonfigurować cronjob użytkownika.

Następujące polecenie wykona zapytanie do bazy danych:

locate -d ~/.externalharddisk.db searchterm

Możesz także wysłać zapytanie do dedykowanej bazy danych i domyślnej bazy danych jednocześnie:

locate -d ~/.externalharddisk.db: searchterm

Dwukropek na końcu, po którym nie ma nic, oznacza również przeszukanie domyślnej bazy danych.

Możesz utworzyć alias dla łatwiejszego użycia. Umieść następujący wiersz w swoim .bashrc:

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

Teraz możesz używać locatedo wyszukiwania tylko domyślnej bazy danych, a locate-externaltakże do wyszukiwania na zewnętrznym dysku twardym.

3. Usuń /mediazPRUNEPATHS

Uwaga: nie polecam tego ! Wynika to ze sposobu, w jaki updatedbdziała. Jeśli updatedburuchomi się, gdy zewnętrzny dysk twardy zostanie usunięty, wszystkie wpisy wskazujące na zewnętrzny dysk twardy zostaną usunięte z bazy danych. Jeśli updatedbdziała, gdy podłączony jest zewnętrzny dysk twardy, pozycje ponownie wskazujące na zewnętrzny dysk twardy zostaną ponownie dodane. Ponieważ updatedbdziała normalnie w tle, nigdy nie możesz być pewien, czy pliki z zewnętrznego dysku twardego są obecnie indeksowane, czy nie.

Co więcej: jeśli usuniesz /mediaz PRUNEPATHStym zachowanie będzie również zastosowanie do każdej innej pamięci zewnętrznej zdarzy się, że zamontowane podczas updatedbaktualizuje bazę danych.

lesmana
źródło
2
Możesz dodatkowo dodać ten alias do swojego ~/.bashrcpliku:alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77
+1 zarówno Tobie, jak i OP. Jednak zamiast oddzielnej zewnętrznej komendy DB, tj. locate-externalRozważam dodanie trzech baz danych do jednej --database /mnt/c...dla WSL, --dataabase /mnt/e...WSL + Linux udostępnionych skryptów i dokumentów oraz --database /var/lib/mlocate/mlocate.dbdla Ubuntu 16.04 z podwójnym uruchomieniem. tj. Wszystkie trzy bazy danych w tym samym wierszu polecenia zlokalizuj (oczywiście z aliasem). Ale zanim zacznę, miło byłoby wiedzieć, czy to zadziała. Czy mogę uzyskać twoje przemyślenia na ten temat?
WinEunuuchs2Unix
Nie zgadzam się z argumentem usunięcia /mediaz PRUNEPATHS. Chociaż tak, ma problem, o którym wspominałeś, ale wykluczenie go jest jeszcze gorsze - NIGDY nie zlokalizujesz plików na tych dyskach. To tak, jakby amputować palce, aby się nie przypaliły podczas gotowania (chyba że istnieje inne oczywiste rozwiązanie, którego nie sugeruję).
Sridhar Sarnobat
2

W updatedb.confwas /mediaw PRUNEPATHS. Powinieneś go usunąć, ponieważ twoje zewnętrzne dyski wydają się tam montowane.

taneli
źródło
2

Są to kolejne ozdoby, które należy dodać do odpowiedzi Lesmany

[1] lekkie zdobienie: czy mogę zasugerować dodanie -i, aby upewnić się, że przypadek wyszukiwanego zapytania nie jest już problemem : więc dodaj do .bashrc >>

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

[2] W odniesieniu do aktualizacji obu baz danych ; ten w głównym HD i nowy w zewnętrznym; prawdopodobnie warto dodać jeszcze jeden wpis do .bashrc

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

a następnie po prostu uruchomić updateALLw terminalu, aby zaktualizować obie bazy danych jednocześnie

PS: oczywiście nie zapomnij uruchomić, . ~/.bashrcaby to wszystko naprawić, gdy nowa linia zostanie zapisana w .bashrc
PS²: i oczywiście również externalharddiskwe wszystkich powyższych liniach jest zastąpiona nazwą twojej zewnętrznej nazwy HD tj. / Media / YOURHDNAME

* PS³ i oczywiście można połączyć zarówno aktualizację, jak i lokalizację w .bashrc

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

więc teraz wszystko, co musisz zaktualizować i wyszukać, to wpisać LO „, a następnie wyszukiwane hasła”

shantiq
źródło
+1 za aktualizację sekwencjonowania, a następnie zlokalizowanie
LMSingh