web-dev-qa-db-ja.com

なぜ `updatedb`プログラムはそんなに速く動くのですか?

通常、フルディスクスキャンを実行し、システム内のすべてのファイルを処理するプログラムがある場合、実行に非常に長い時間がかかります。なぜupdatedbは比較してそれほど速く動作しないのですか?

22
hugomg

答えは、使用しているlocateのバージョンによって異なりますが、それが mlocate である可能性は十分にあります。このupdatedbは、ディスク全体のスキャンを行わないことですばやく実行されます。

mlocateは、locate/updatedbの実装です。 「m」は「マージ」の略です。updatedbは既存のデータベースを再利用して、ほとんどのファイルシステムの再読み取りを回避します。これにより、updatedbがより高速になり、システムキャッシュを無駄にすることがなくなります。

(データベースには、各ディレクトリのタイムスタンプ、ctimeまたはmtimeのどちらか新しい方が格納されます。)

updatedbのほとんどの実装と同様に、mlocateも無視するように構成されているファイルシステムとパスをスキップします。デフォルトでは、mlocateの場合はありませんが、通常、ディストリビューションは基本的なupdatedb.confこれは、ネットワーク化されたファイルシステム、仮想ファイルシステムなどを無視します(たとえば、 Debianの構成ファイル を参照してください。これは、Debianの標準的なプラクティスであるため、GNUのupdatedb同様に構成されています )。

22
Stephen Kitt

変更時間のチェックに加えて、mlocateは、/ etc/updatedb.confで指定されている(および man updatedb .conf ):

  • バインドマウント
  • いくつかの種類のファイルシステム(9p、afs、bdevなど)
  • VCSリポジトリデータベース(.git、.hgなど)
  • 一部のハードコーディングされたディレクトリ(/ media、/ tmp、/ var/spool/cupsなど)。
9
hugomg