Mengapa program `updatedb` berjalan begitu cepat?

22

Biasanya ketika saya memiliki program yang melakukan pemindaian disk penuh dan memeriksa semua file dalam sistem, mereka membutuhkan waktu yang sangat lama untuk dijalankan. Mengapa updateb berjalan sangat cepat dibandingkan?

hugomg
sumber

Jawaban:

22

Jawabannya tergantung pada versi yang locateAnda gunakan, tetapi ada kemungkinan itu adil mlocate, yang updatedbberjalan cepat dengan menghindari melakukan pemindaian disk penuh:

mlocate adalah implementasi loc / updatedb. The 'm' adalah singkatan dari "merging": updatedb menggunakan kembali database yang ada untuk menghindari membaca ulang sebagian besar sistem file, yang membuat updatedb lebih cepat dan tidak terlalu banyak membuang cache sistem.

(Basis data menyimpan stempel waktu setiap direktori, ctimeatau mtime, mana yang lebih baru.)

Seperti kebanyakan implementasi dari updatedb, mlocateitu juga akan melewati sistem file dan jalur yang dikonfigurasi untuk diabaikan. Secara default ada satu pun di mlocatekasus 's, tetapi distribusi biasanya memberikan dasar updatedb.confyang mengabaikan file sistem jaringan, sistem berkas virtual dll (lihat file konfigurasi Debian misalnya, ini adalah praktek standar di Debian, sehingga GNU updatedbadalah dikonfigurasi sama ).

Stephen Kitt
sumber
Pertanyaan dan jawaban yang cukup bagus, bahkan tidak tahu ada "perbedaan" scan.
Rui F Ribeiro
1
Terima kasih! Saya tidak pernah memperhatikan bahwa memodifikasi file juga mengubah waktu dan waktu semua direktori induknya.
hugomg
4
@Hugomg Saya tidak berpikir itu benar-benar terjadi. Seharusnya hanya mengubah mtimeinduk langsungnya.
Kusalananda
Jadi jika saya memahaminya dengan benar, mlocatepeduli ctimedan mtimeyang menyiratkan itu hanya peduli apakah daftar entri direktori masih sama (tidak ada file yang dihapus atau ditambahkan), yang berarti tidak peduli dengan file aktual sendiri. Apakah itu benar ?
Sergiy Kolodyazhnyy
@Sergiy: Tentu saja. locatebukan grep -R. Itu tidak membaca konten file.
Kevin
9

Selain memeriksa waktu modifikasi, mlocateabaikan beberapa sub pohon tertentu dari sistem file yang memiliki banyak file yang tidak menarik atau berpotensi digandakan, seperti yang ditentukan dalam /etc/updatedb.conf (dan dijelaskan dalam man updatedb.conf ):

  • Bind mounts
  • Beberapa jenis sistem file (9p, afs, bdev, dll)
  • Database repositori VCS (.git, .hg, dll)
  • Beberapa direktori hard-coded (/ media, / tmp, / var / spool / cups, dll).
hugomg
sumber
Ini bukan kasusnya secara default, jadi perilaku dasar tergantung pada distribusi yang digunakan. ( updatedbImplementasi lain juga mendukung pengecualian yang dikonfigurasikan.)
Stephen Kitt
Memang. Saya menggambarkan default untuk Fedora.
hugomg