概要
- 元々fanotify(ファイルシステムイベントの監視)で削除ができなかった。
- Linux 5.1より削除が検出できるようになった。
- 具体的な実装方法を探してみた。
結果
- dmacvicar/fanotify_example: Example of fanotify API including the new FAN_DELETE in kernel 5.1を参考に削除を検出できる
- そのままだと再帰的な検出ができないのでファイルシステム単位での監視に変更するには
fanotify_mark
の引数にFAN_MARK_FILESYSTEM
を加えてマウントポイント/
等を指定する。
--- fanotify_example.c.org 2021-05-01 20:55:37.356846871 +0000
+++ fanotify_example.c 2021-05-01 20:57:37.118257631 +0000
@@ -40,7 +40,7 @@
}
int ret = fanotify_mark(fan,
- FAN_MARK_ADD,
+ FAN_MARK_ADD | FAN_MARK_FILESYSTEM,
FAN_CREATE | FAN_DELETE | FAN_MODIFY | FAN_EVENT_ON_CHILD,
AT_FDCWD,
argv[1]
-
rm /tmp/a/a.txt
を実行したときの出力は以下となる。
$ gcc -Wall fanotify_example.c
$ sudo ./a.out /
FAN_DELETE/tmp/a
-
fanotify(7) - Linux manual page下部に
fanotify_fid.c
があるが、FAN_REPORT_DFID_NAME
がLinux 5.9 以降でないと動かない。(現在最新ubuntu 21.04はLinux 5.8.0だったのでここまで)
fanotify(7)めも - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
ファイルを監視して、将来どのプロセスがファイルを書き込みまたは削除するかを確認する方法 - Javaer101
fanotify(7) - Linux manual page
dmacvicar/fanotify_example: Example of fanotify API including the new FAN_DELETE in kernel 5.1