locateとupdatedb

 
 

ファイル一覧データベースの更新

 

ファイル一覧データベースはupdatedbコマンドの実行で更新されます。

ファイル一覧を取得するので、更新量が多ければそれなりに実行時間はかかります。

ファイル一覧データベースの更新頻度はどうでしょうか。

更新コマンドはここにありました。

./cron.daily/mlocate
#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" && $2 != "rootfs" { print $2 }') renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f “$nodevs”

mlocateファイルの最後の行に/usr/bin/updatedb -f "$nodevs"があります。

-fオプションは除外するです。

つまり、指定したファイル名を除外してファイル一覧データベースを更新するということです。

$nodevsは上記の2行目に/proc/filesystemの1つ目の値がnodevでありかつ、2つ目の値がrootfsでない値になります。

/proc/filesystemはカーネルがサポートしているファイルシステムの一覧になります。

ちょっとわかりづらいですね、/procはカーネルの様々な設定やハード制御のファイルなどが置かれています。

そういったシステムに大事なファイルシステムの一覧がlocateコマンドでパスやらが見えてしまうと危険なので、除外されているように思えます。

実際に実行してみましょう。

この時に一緒にI/O負荷も計測したいので、dstatコマンドで計測していきます。

まずはファイルを作成します。

touch locate_test

次にlocateで検索します。

locate locate_test

mlocate.dbファイルが最新になっていないため、表示されません。

さて、ここからが本番です。

updatedbコマンドを使用してmlocate.dbを更新していきます。

実行前

ll /var/lib/mlocate/mlocate.db
-rw-r—– 1 root slocate 2278021 10月 24 03:34 /var/lib/mlocate/mlocate.db

date
2017年 10月 24日 火曜日 22:56:46 JST

nohupを使ってdstatコマンドを仕掛けます。

nohup dstat -tam > dstat_date +%Y%m%d.log &
[1] 30070

updatedb実行です!今回はオプションなしで実行していきます。

updatedb

ん?んん?

ものの数秒で終わってしまいました。
日次で実行されている上に、特に何かファイルを大量に作ったり等はしていないので、早く終わりましたね。

psで確認

ps -ef | grep updatedb | grep -v grep

プロセスもないので、完全に終わったようです。

ファイル一覧データベースの更新日付は?

ll /var/lib/mlocate/mlocate.db

-rw-r----- 1 root slocate 2282863 10月 24 22:57 /var/lib/mlocate/mlocate.db

先ほど作成したlocate_testファイルがファイル一覧データベースに入っているか確認します。

locate locate_test
/root/locate_test

ちゃんと更新されてますね。

updatedb実行中のリソース状況はどうでしょうか。

実行時間中のdstatです。

22:57:06〜22:57:10の間でCPUに動きがあります。

systemやwaitの消費が多いので、この辺りが間違いなさそうです。

少ない量だからこれだけで済んでいるかもしれません。

locateインストール直後のupdatedbのタイミングはちょっと考えた方が良さそうです。

 

最後はupdatedbコマンドの頻度と時間になります。

 
 

ブログランキングに参加しています。クリックして応援していただけると嬉しいです。

人気ブログランキング
ブログランキング・にほんブログ村へ
にほんブログ村