列出当前的 inotify 监视(路径名、PID)

Tom*_*ale 6 linux unmounting lsof inotify fuser

我如何获得以下列表:

  • 当前正在监视的路径名inotify,以及
  • 进程监控的PID

我问是因为我发现syncthing'sinotify手表阻止我的磁盘被卸载。

如下所示,没有任何内容出现在lsoffuser列表中。

我猜对了syncthing......如果磁盘因以下原因无法卸载,我该如何消除未来的猜测inotify


# umount /media/backup
umount: /media/backup: target is busy.
# lsof +f -- /media/backup/
# echo $?
1
# fuser -vmM /media/backup/
                     USER        PID ACCESS COMMAND
/media/backup:       root     kernel mount /media/backup
# systemctl stop syncthing@ravi
# umount /media/backup
# echo $?
0
Run Code Online (Sandbox Code Playgroud)

mur*_*uru 5

也许fdinfo手表的 fd 可能有用:

$ readlink /proc/$(pgrep inotify)/fd/3
anon_inode:inotify
$ cat /proc/$(pgrep inotify)/fdinfo/3
pos:    0
flags:  00
mnt_id: 11
inotify wd:1 ino:357a sdev:700000 mask:fff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:7a35000000000000
Run Code Online (Sandbox Code Playgroud)

sdev似乎是主要:次要设备号组合,如在输出处看到lsblk,例如:

$ lsblk | grep 7
loop0    7:0    0  80.5M  1 loop /snap/core/2462
Run Code Online (Sandbox Code Playgroud)

(我确实在监视/snap/core/2462。)

对于我的/dev/sda18:1,输出看起来像这样:

pos:    0
flags:  00
mnt_id: 11
inotify wd:1 ino:aae1b sdev:800001 mask:fff ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:1bae0a0038e16969
Run Code Online (Sandbox Code Playgroud)

即使未列出正在监视的特定目录或文件,这也足以找出阻止卸载的原因。