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
command-line
updatedb
locate
użytkownik784637
źródło
źródło
cat /etc/updatedb.conf
,mount
,on_ac_power; echo $?
updatedb
się dzieje: (1.) Uruchomupdatedb
przy pomocy--verbose
i--debug-pruning
. (2.) Spójrz na tekst, aby zobaczyć, co jest indeksowane, a które nie jest indeksowane -> dostosuj/etc/updatedb.conf
. Igrep
d plików, że muszę, ale były pomijane. Na przykład zmodyfikowałem za/etc/updatedb.conf
pomocą: (1.)PRUNE_BIND_MOUNTS = "no"
(2.) usuńnfs nfs4 nfsd autofs
zPRUNEFS
(3.) usuń/net
zPRUNEPATHS
Odpowiedzi:
Pliki z zewnętrznego dysku twardego nie są indeksowane, ponieważ
updatedb
są 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/media
wPRUNEPATHS
wierszu.Kilka pomysłów, w jaki sposób możesz
updatedb
zaindeksować 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,
/mnt
a 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:
Spowoduje to utworzenie bazy danych w ukrytym pliku
.externalharddisk.db
w domu. Nie potrzebujeszsudo
tego 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,updatedb
pomyś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:
Możesz także wysłać zapytanie do dedykowanej bazy danych i domyślnej bazy danych jednocześnie:
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
:Teraz możesz używać
locate
do wyszukiwania tylko domyślnej bazy danych, alocate-external
także do wyszukiwania na zewnętrznym dysku twardym.3. Usuń
/media
zPRUNEPATHS
Uwaga: nie polecam tego ! Wynika to ze sposobu, w jaki
updatedb
działa. Jeśliupdatedb
uruchomi 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śliupdatedb
działa, gdy podłączony jest zewnętrzny dysk twardy, pozycje ponownie wskazujące na zewnętrzny dysk twardy zostaną ponownie dodane. Ponieważupdatedb
dział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
/media
zPRUNEPATHS
tym zachowanie będzie również zastosowanie do każdej innej pamięci zewnętrznej zdarzy się, że zamontowane podczasupdatedb
aktualizuje bazę danych.źródło
~/.bashrc
pliku:alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
locate-external
Rozważ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.db
dla 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?/media
zPRUNEPATHS
. 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ę).W
updatedb.conf
was/media
wPRUNEPATHS
. Powinieneś go usunąć, ponieważ twoje zewnętrzne dyski wydają się tam montowane.źródło
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ć
updateALL
w terminalu, aby zaktualizować obie bazy danych jednocześniePS: oczywiście nie zapomnij uruchomić,
. ~/.bashrc
aby to wszystko naprawić, gdy nowa linia zostanie zapisana w .bashrcPS²: i oczywiście również
externalharddisk
we 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”
źródło