Dlaczego program `updatedb` działa tak szybko?


22

Zwykle, gdy mam programy, które wykonują pełne skanowanie dysku i przeglądają wszystkie pliki w systemie, ich uruchomienie zajmuje bardzo dużo czasu. Dlaczego updatedb działa tak szybko w porównaniu?

Odpowiedzi:


22

Odpowiedź zależy od wersji locateużywasz, ale istnieje spora szansa, że to mlocate, którego updatedbbiegnie szybko, unikając robi pełne skanowanie dysku:

mlocate to implementacja locate / updatedb. „M” oznacza „scalanie”: updatedb ponownie wykorzystuje istniejącą bazę danych, aby uniknąć ponownego odczytu większości systemu plików, co powoduje, że updatedb jest szybsze i nie powoduje tak dużej utraty pamięci podręcznej systemu.

(Baza danych przechowuje sygnaturę czasową każdego katalogu ctimelub mtime, w zależności od tego, co jest nowsze).

Podobnie jak większość implementacji updatedb, mlocatepominie także systemy plików i ścieżki, które jest skonfigurowane do ignorowania. Domyślnie nie ma mlocatetakiego przypadku, ale dystrybucje zazwyczaj zapewniają podstawowe, updatedb.confktóre ignorują sieciowe systemy plików, wirtualne systemy plików itp. (Patrz na przykład plik konfiguracyjny Debiana ; jest to standardowa praktyka w Debianie, więc GNU updatedbjest skonfigurowane podobnie ).


Dość dobre pytanie i odpowiedź, nawet nie wiedziałem, że istnieją „różnicowe” skany.
Rui F Ribeiro

1
Dzięki! Nigdy nie zauważyłem, że modyfikacja pliku zmienia także ctime i mtime wszystkich katalogów nadrzędnych.
hugomg

4
@hugomg Nie sądzę, że faktycznie tak jest. Powinien zmienić tylko mtimeswojego bezpośredniego rodzica.
Kusalananda

Więc jeśli rozumiem go poprawnie, mlocateobchodzi ctimei mtimeco oznacza, że dba tylko od tego, czy lista wpisów do katalogów jest wciąż ten sam (bez usuwania lub dodawania plików), co oznacza, że nie dba o rzeczywistych plików siebie. Czy to jest poprawne ?
Sergiy Kolodyazhnyy

@Sergiy: Oczywiście. locatenie jest grep -R. Nie odczytuje zawartości pliku.
Kevin

9

Oprócz sprawdzania czasów modyfikacji, mlocateignorowane są także niektóre poddrzewa systemu plików, które zawierają wiele nieciekawych lub potencjalnie zduplikowanych plików, jak określono w /etc/updatedb.conf (i opisano w man updatedb.conf ):

  • Bind montuje
  • Niektóre rodzaje systemów plików (9p, afs, bdev itp.)
  • Bazy danych repozytorium VCS (.git, .hg itp.)
  • Niektóre zakodowane katalogi (/ media, / tmp, / var / spool / cups itp.).

Nie jest tak jednak domyślnie, więc podstawowe zachowanie zależy od zastosowanej dystrybucji. (Inne updatedbimplementacje obsługują również skonfigurowane wykluczenia.)
Stephen Kitt

W rzeczy samej. Opisałem domyślne ustawienia Fedory.
hugomg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.