Warum läuft das Programm "updatedb" so schnell?

22

Normalerweise dauert die Ausführung von Programmen, die einen vollständigen Festplatten-Scan durchführen und alle Dateien im System durchsuchen, sehr lange. Warum läuft updatedb im Vergleich so schnell?

hugomg
quelle

Antworten:

22

Die Antwort hängt von der Version von locateIhnen verwenden, aber es gibt eine faire Chance es ist mlocate, das updatedbläuft schnell durch Scans tun Full - Disk zu vermeiden:

mlocate ist eine locate / updatedb-Implementierung. Das 'm' steht für "Zusammenführen": updatedb verwendet die vorhandene Datenbank erneut, um zu vermeiden, dass der größte Teil des Dateisystems erneut gelesen wird. Dadurch wird updatedb schneller und der Systemcache wird nicht so stark geleert.

(In der Datenbank wird der Zeitstempel jedes Verzeichnisses ctimeoder mtime, je nachdem, welcher neuer ist, gespeichert .)

Wie die meisten Implementierungen updatedb, mlocate‚s wird auch Dateisysteme und Pfade überspringen , die es so konfiguriert ist , zu ignorieren. Standardmäßig gibt es keine in mlocate‚s Fall, aber Verteilungen typischerweise eine Basis bieten updatedb.confdie Systeme vernetzen Datei ignoriert, virtuelle Dateisysteme usw. (siehe Debians Konfigurationsdatei zum Beispiel, das ist gängige Praxis in Debian, so GNU updatedbist ähnlich konfiguriert ).

Stephen Kitt
quelle
Ziemlich gute Frage und Antwort, wusste nicht einmal, dass es "unterschiedliche" Scans gab.
Rui F Ribeiro
1
Vielen Dank! Ich hatte noch nie bemerkt, dass das Ändern einer Datei auch die ctime und mtime aller übergeordneten Verzeichnisse ändert.
2.
4
@hugomg Ich glaube nicht, dass es das tatsächlich tut. Es sollte nur das mtimeseines unmittelbaren Elternteils ändern .
Kusalananda
Also, wenn ich es richtig verstehe, mlocatekümmert es mich ctimeund mtimewas bedeutet, dass es nur darum geht, ob die Liste der Verzeichniseinträge immer noch dieselbe ist (keine entfernten oder hinzugefügten Dateien), was bedeutet, dass es sich nicht um tatsächliche Dateien selbst handelt. Ist das korrekt ?
Sergiy Kolodyazhnyy
@Sergiy: Natürlich. locateist nicht grep -R. Es werden keine Dateiinhalte gelesen.
Kevin
9

mlocateIgnoriert nicht nur die Änderungszeiten, sondern auch bestimmte Teilbäume des Dateisystems mit vielen uninteressanten oder möglicherweise doppelten Dateien, wie in /etc/updatedb.conf angegeben (und in man updatedb.conf beschrieben ):

  • Reittiere binden
  • Einige Arten von Dateisystemen (9p, afs, bdev usw.)
  • VCS-Repository-Datenbanken (.git, .hg usw.)
  • Einige fest codierte Verzeichnisse (/ media, / tmp, / var / spool / cups usw.).
hugomg
quelle
Dies ist jedoch standardmäßig nicht der Fall, sodass das Basisverhalten von der verwendeten Distribution abhängt. (Andere updatedbImplementierungen unterstützen auch konfigurierte Ausschlüsse.)
Stephen Kitt
Tatsächlich. Ich habe die Standardeinstellungen für Fedora beschrieben.
3.