1. ホーム
  2. linux

[解決済み] Linuxでディレクトリツリーの変更を監視するには?

2023-05-02 08:19:30

質問

どのようにすれば ディレクトリツリー全体 を監視することができますか? ext3 ファイルシステム) の変更に対応していますか?

現在、ディレクトリには約 50 万個のファイル で、約 3,000 のサブディレクトリ であり、3つのディレクトリ階層で構成されています。

それらはほとんど小さなファイルです (< 1kb, いくつかの最大 100kb). これは一種のキューであり、ファイルが作成、削除されたとき、またはその内容が 5-10 秒以内に変更されたときに、それを知る必要があります。

があることは知っています。 inotify といったものがあるのは知っていますが、AFAIK ではこれらは単一のディレクトリを監視するだけなので、私の場合は 3,000 個の inotify ハンドルを必要とすることになります。それとも私が間違っているのでしょうか?

Linux システムが私が必要とするものを教えてくれない場合、おそらくは FUSE プロジェクトで、ファイルシステムをシミュレートし (実際のファイルシステム上のすべてのファイルアクセスを複製し)、すべての変更を個別にログに記録するものがあるかもしれません (見つけられませんでした)。

どのように解決するのですか?

私の知る限りでは、再帰的に inotify を各ディレクトリに再帰的に設定する以外に方法はありません。

とはいえ、ファイルディスクリプタが足りなくなることはないでしょうから inotify は、ファイルやディレクトリを監視するために fd を予約する必要がないからです(その前身である dnotify はこの制限に悩まされていました)。 inotify は、代わりに "watch descriptors" を使用します。

のドキュメントによると inotifywatch のドキュメントによると、デフォルトの上限は 8192 個のウォッチディスクリプタで、これを増やすには、新しい値を /proc/sys/fs/inotify/max_user_watches .