problema di comando updateb & individuare - I file dal disco rigido esterno non vengono più indicizzati dopo il riavvio


20

I file dal mio disco rigido esterno non vengono più indicizzati dopo il riavvio. Devo rimontare e poi correre

# updatedb

dopo ogni riavvio. Il problema viene aggiornatob richiede alcuni minuti per i miei dischi rigidi esterni. Esiste un modo per conservare l'indicizzazione dei miei esterni dopo il riavvio in modo che il comando Locate possa cercare tra i miei esterni?

MODIFICA: Per richiesta ecco le mie specifiche:

$ 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

1
Si prega di fornire i file di configurazione e le opzioni di montaggio: cat /etc/updatedb.conf, mount,on_ac_power; echo $?
organizzare

farà, non avrà accesso a una macchina linux per circa altre 8 ore
user784637

Disporre, ho aggiornato la mia risposta con le mie specifiche, grazie per l'aiuto =)
user784637

<nota per il futuro> Ecco come GENERALMENTE capire cosa updatedbsta facendo: (1.) Corri updatedbcon --verbosee --debug-pruning. (2.) Guarda il testo per vedere cosa viene indicizzato e non indicizzato -> regola il tuo /etc/updatedb.conf. I grepD per i file che mi servivano, ma erano in fase di saltato. Ad esempio ho modificato /etc/updatedb.confcon: (1.) PRUNE_BIND_MOUNTS = "no"(2.) rimuovi nfs nfs4 nfsd autofsda PRUNEFS(3.) rimuovi /netdaPRUNEPATHS
Trevor Boyd Smith il

Risposte:


35

I file dal tuo hard disk esterno non sono indicizzati perché updatedbsono configurati per non indicizzare nulla sotto /media, dove è solitamente montato l'archiviazione esterna. Questa configurazione è impostata nel file /etc/updatedb.conf. In particolare la voce /medianella PRUNEPATHSriga.

Alcune idee su come puoi updatedbindicizzare il tuo disco esterno:

1. Montare l'unità esterna unter /mnt.

Se si suppone che il disco rigido esterno sia montato in modo permanente, allora suggerisco di configurarlo in modo che sia montato sotto /mntinvece che sotto /media. Questo di solito può essere fatto modificando /etc/fstab. Cerca "fstab" per saperne di più. Avrai bisogno dei diritti sudo per modificare /etc/fstab.

2. Creare un database dedicato per il proprio disco rigido esterno e interrogarlo su richiesta.

Il seguente comando creerà un database dedicato:

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

Questo creerà il database nel file nascosto .externalharddisk.dbnella tua casa. Non è necessario sudoper quel comando. Eseguire di nuovo lo stesso comando per mantenere aggiornato il database. Attenzione: se si esegue quel comando mentre il disco rigido esterno non è montato, updatedbsi pensa che i file vengano eliminati e si svuota il database.

È possibile impostare uno script per automatizzare tale attività. Cerca "cronjob" per imparare a farlo. Nota: è possibile impostare un cronjob utente come utente. Non hai bisogno dei diritti sudo per configurare un cronjob utente.

Il seguente comando interrogherà il database:

locate -d ~/.externalharddisk.db searchterm

È anche possibile eseguire una query sul database dedicato e sul database predefinito contemporaneamente:

locate -d ~/.externalharddisk.db: searchterm

I due punti alla fine seguiti da nulla significano cercare anche nel database predefinito.

Puoi creare un alias per un uso più semplice. Inserisci la seguente riga nel tuo .bashrc:

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

Ora puoi usare locateper cercare solo il database predefinito e locate-externalper cercare anche nel tuo disco rigido esterno.

3. Rimuovi /mediadaPRUNEPATHS

Nota: non lo consiglio ! Ciò è dovuto al modo in cui updatedbfunziona. Se updatedbviene eseguito mentre il disco rigido esterno viene rimosso, tutte le voci che puntano al disco rigido esterno verranno rimosse dal database. Se updatedbviene eseguito mentre il disco rigido esterno è collegato, le voci che puntano al disco rigido esterno verranno nuovamente aggiunte. Poiché updatedbè in esecuzione regolarmente in background, non si può mai essere sicuri se i file dal disco rigido esterno siano attualmente indicizzati o meno.

Inoltre: se rimuovi /mediada PRUNEPATHS, questo comportamento si applicherà anche a qualsiasi altra memoria esterna che hai montato durante l' updatedbaggiornamento del database.


2
È inoltre possibile aggiungere questo alias al ~/.bashrcfile:alias updatedb-external='sudo updatedb -l 0 -o ~/.externalharddisk.db -U /media/externalharddisk'
rubo77

+1 a te e al PO. Tuttavia, piuttosto che un comando DB esterno separato locate-external, ovvero , sto valutando di aggiungere tre database in uno con --database /mnt/c...WSL, --dataabase /mnt/e...per script e documenti condivisi WSL + Linux e --database /var/lib/mlocate/mlocate.dbUbuntu 16.04 a doppio avvio. cioè tutti e tre i database sulla stessa riga di comando di individuazione (con un alias ovviamente). Ma prima di iniziare sarebbe bello sapere se funzionerà. Posso farci un pensiero?
WinEunuuchs2Unix

Non sono d'accordo con l'argomento della rimozione /mediada PRUNEPATHS. Sebbene sì abbia il problema che hai citato, escluderlo del tutto è anche peggio: non troverai MAI i file su quelle unità. È come amputare le dita in modo che non si brucino durante la cottura (a meno che non sia implicata un'altra soluzione ovvia che non vedo).
Sridhar Sarnobat,

2

In updatedb.confhai /mediadentro PRUNEPATHS. Dovresti rimuoverlo, poiché le tue unità esterne sembrano essere montate lì.


2

Questi sono ulteriori abbellimenti da aggiungere alla risposta di Lesmana

[1] leggero abbellimento: posso suggerire di aggiungere il -i per assicurarsi che il caso della query cercata non sia più un problema : quindi aggiungere a .bashrc >>

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

[2] Per quanto riguarda l' aggiornamento di entrambe le basi di dati ; quello nell'HD principale e quello nuovo nell'esterno; vale probabilmente la pena aggiungere un'altra voce a .bashrc

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

e quindi eseguire semplicemente updateALLnel terminale per aggiornare entrambi i database contemporaneamente

PS: ovviamente non dimenticare di correre . ~/.bashrcper consolidare tutto una volta che una nuova riga viene salvata in .bashrc
PS²: e ovviamente anche externalharddiskin tutte le righe sopra è sostituita dal nome del tuo nome HD esterno, ad esempio / media / YOURHDNAME

* PS³ e puoi ovviamente confondere sia l'aggiornamento che la localizzazione nel tuo .bashrc

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

quindi ora tutto ciò che serve per aggiornare e cercare è inserire LO 'seguito dai termini che cerchi'


+1 per l'aggiornamento del sequenziamento e quindi individuazione
LMSingh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.