Perché il programma `updatedb` funziona così velocemente?


22

Di solito, quando ho programmi che eseguono una scansione completa del disco e controllano tutti i file nel sistema, impiegano molto tempo per essere eseguiti. Perché updateb funziona così velocemente in confronto?

Risposte:


22

La risposta dipende dalla versione locateche stai utilizzando, ma c'è una buona probabilità che sia mlocate, la cui updatedbesecuzione si esegue rapidamente evitando di eseguire scansioni complete del disco:

mlocate è un'implementazione di individuazione / aggiornamento. La 'm' sta per "fusione": updatedb riutilizza il database esistente per evitare di rileggere la maggior parte del file system, il che rende updateb più veloce e non distrugge la cache del sistema.

(Il database memorizza il timestamp di ogni directory ctimeo mtime, a seconda di quale è più recente.)

Come la maggior parte delle implementazioni di updatedb, mlocatesalterà anche i file system e i percorsi che è configurato per ignorare. Di default non ce ne sono nel mlocatecaso, ma le distribuzioni in genere forniscono una base updatedb.confche ignora i file system in rete, i file system virtuali ecc. (Vedere il file di configurazione di Debian per esempio; questa è una pratica standard in Debian, quindi quella di GNU updatedbè configurata in modo simile ).


Abbastanza buona domanda e risposta, non sapevo nemmeno che ci fossero scansioni "differenziali".
Rui F Ribeiro,

1
Grazie! Non avevo mai notato che la modifica di un file cambia anche il tempo e l'ora di tutte le sue directory principali.
hugomg

4
@hugomg Non penso che lo faccia davvero. Dovrebbe cambiare solo il mtimesuo genitore immediato.
Kusalananda

Quindi, se lo capisco correttamente, mlocatese ne preoccupa ctimee mtimeciò implica che si preoccupi solo del fatto che l'elenco delle voci della directory sia sempre lo stesso (nessun file rimosso o aggiunto), il che significa che non importa dei file effettivi stessi. È corretto ?
Sergiy Kolodyazhnyy il

@Sergiy: Certo. locatenon lo è grep -R. Non legge il contenuto del file.
Kevin

9

Oltre a controllare i tempi di modifica, mlocateignora anche alcuni sottoalberi del file system che hanno molti file non interessanti o potenzialmente duplicati, come specificato in /etc/updatedb.conf (e descritto in man updatedb.conf ):

  • Supporti Bind
  • Alcuni tipi di file system (9p, afs, bdev, ecc.)
  • Database di repository VCS (.git, .hg, ecc.)
  • Alcune directory hardcoded (/ media, / tmp, / var / spool / cups, ecc.).

Questo non è il caso per impostazione predefinita, quindi il comportamento di base dipende dalla distribuzione utilizzata. (Altre updatedbimplementazioni supportano anche le esclusioni configurate.)
Stephen Kitt il

Infatti. Stavo descrivendo le impostazioni predefinite per Fedora.
hugomg,
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.