私の知る限り、カーネルにはその詳細を提供するインフラストラクチャがありません。このようなサポートは、システムのパフォーマンスにさえ影響を与える可能性のある監視フックの量が多すぎることを意味します。そのような情報を受け取るには、独自のカーネルコードを作成する必要があります...
また、一部の操作の粒度についても混乱しているようです。たとえば、open()
システムコールを介してファイルを作成すると、最初は空になります。サイズを変更するには、追加のシステムコール(write()
または)が必要です。lseek()
特定のサイズのファイルを作成するアトミック操作を認識していません。
そうは言っても、次の選択肢の1つまたは組み合わせを使用できる可能性があります。
inotify
とシステムコールを使用して、stat
操作とファイルサイズおよびアクセス許可をログに記録します。残念ながら、このアプローチはアトミックではなく、読み取り/書き込みオフセットを提供しません。
strace
ファイルを変更する可能性のあるすべてのプロセスで使用します。strace
ログは、人間が解析するのに非常に長くて面倒な場合がありますが、トレースされたアプリケーションによって実行された操作に関する多くの情報を提供します。
特定のファイルに関心がある場合は、FUSEファイルシステムを使用して、すべての操作をパススルーし、すべてを記録することで、ディレクトリをミラーリングできます。