リストの取得方法:
inotify
が現在監視しているパス名、およびsyncthing
のinotify
ウォッチがディスクのマウント解除を妨げていることがわかったので、質問します。
以下に示すように、lsof
またはfuser
リストには何も表示されません。
私は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
時計のfdのfdinfo
が役に立つかもしれません:
$ 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
sdev
の出力に見られるように、lsblk
はメジャーとマイナーのデバイス番号の組み合わせのようです。次に例を示します。
$ lsblk | grep 7
loop0 7:0 0 80.5M 1 loop /snap/core/2462
(私は確かに監視していた/snap/core/2462
。)
私の/dev/sda1
は8: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
監視されている特定のディレクトリまたはファイルがリストされていなくても、アンマウントをブロックしているものを見つけるにはこれで十分です。
(WIP回答)
キックスタートの muruの回答 に感謝します。
/proc/[pid]/fdinfo/[fd#]
の情報を使用する:
mnt_id
を/proc/[pid]/mountinfo
へのインデックスとして使用して、マウントポイントのパス名とデバイスを取得します。または グローバルマウント情報を使用する可能性がありますino
を10進数に変換btrfs
(パス名が必要)ext4
(おそらくデバイスが必要です / proc/<PID>/fdinfo/<FD>の `sdev`フィールドを解釈してください )おそらく lsof:特定のタイプのファイルのみをリスト with a_inode
。
すべてのgrep
ingを含むシェルスクリプトのように遅くなります。たぶん / proc情報へのシステムコールインターフェイス 。