マウントポイントがビジー状態でアンマウントできないという問題があります。通常、lsofまたはfuserは、どのプロセスがそれを使用しているかを教えてくれますが、これはバインドマウントであるため、lsofとfuserは、元のマウントポイントとバインドマウントポイントの両方を使用しているものを示します。
例:
ファイルシステムをマウントします。
$ Sudo mkdir /mnt/mount /mnt/bind
$ Sudo mount /dev/sdb1 /mnt/mount
$ Sudo mount -o bind /mnt/mount /mnt/bind
/ mnt/mountをビジー状態にしてマウントを解除できないプロセスを開始します
$ Sudo dd if=/dev/zero of=/mnt/mount/testfile bs=1 oflag=dsync
フューザーの内容を確認してください
$ Sudo fuser -m /mnt/mount
/mnt/mount: 4022
$ Sudo fuser -m /mnt/bind
/mnt/bind: 4022
Lsofの内容を確認してください
$ Sudo lsof +D /mnt/mount
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dd 4022 root 1w REG 8,17 28545 12 /mnt/mount/testfile
$ Sudo lsof +D /mnt/bind
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dd 4022 root 1w REG 8,17 40682 12 /mnt/bind/testfile
両方をアンマウントしてみてください
$ Sudo umount -v *
umount: /mnt/bind (/mnt/mount) unmounted
umount: /mnt/mount: target is busy
同じ手順を実行するが、代わりにファイルを/ mnt/bind/testfileに書き込むようにddに指示すると、/ mnt/mountのアンマウントは成功しますが、/ mnt/bindのアンマウントは失敗します。
明らかに、プロセス(この場合はdd)が使用しているマウントポイントに違いがありますが、lsofとfuserは区別されません。何かありますか?
Wurtelのおかげで、これが明らかになりました。
私の質問で使用されているfuserとlsofはどちらも、両方のマウントポイントを使用した同じプロセスを示していますが、これらのコマンドのいずれかがPIDを通知した後、次のように実行します。
lsof -p $PID
どのマウントポイントが使用されているかを正確に明らかにします。少しgrepを実行すると、設定が完了します。