どのプロセスがシステム上のどのファイルを開くかを監視するツールがあり、どのプロセスが特定のファイルに触れ続けているかを追跡できますか?
Lsofは、プロセスがファイルを開いているときに実行するかどうかを確認できますが、それが時々実行される短時間のプロセスである場合、lsofでキャッチすることはできません。カーネルトレースを使用するものが必要です。
おそらく監査システムを使用できます。それは少し重いですが、このようなものが動作するはずです(/etc/audit/audit.rules内):
# delete all other rules
-D
# watch the file in question
-w /path/to/file -p rwxa
そして、私はあなたがauditedを再起動する必要があると思う:
Sudo service audit restart
(インストールしていない場合は、パッケージauditdにあります。)犯人は/var/log/audit/audit.logにあります。
残念ながら、Linuxがファイルを監視するために使用するメカニズムはinotifyであり、有用なデータを抽出するのに十分な情報を提供しません。ファイル名と実行されたアクションのみを取得します。
私はこのようなものを使ってみました:
Sudo inotifywait -mr somedir --format "%w%f" | while read file; do echo -n "$file => ";lsof -b $file; echo ""; done
これは、指定されたディレクトリでinotifyイベントをリッスンし、イベントごとにlsofを実行して、ファイルに触れるプロセスをキャッチしようとします。残念ながら、私がテストしたほとんどのアクセス(エディターを使用してファイルに書き込むなど)の場合、LSOFコマンドは遅くなり、問題のあるプロセスをキャッチすることができません。
プロセスが問題のあるファイルに対してIOを集中的に実行する場合、マイレージは異なる場合があります。幸運を。