私が経験している問題は、マウントポイントが忙しくて削除できないことです。通常、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
同じ手順に従いますが、ddにファイルを/mnt/bind/testfileに書き込むように指示すると、/mnt/mountのアンマウントは成功しますが、/mnt/bindのアンマウントは失敗します。
明らかに、プロセスが使用するマウントポイント(この場合はdd)は異なりますが、lsofとfusionrに違いはありません。これができることはありますか?
答え1
wurtelのおかげで、これは明らかになりました。
私の質問で使用されているfusionrとlsofは、両方のマウントポイントを使用するのと同じプロセスを示していますが、これらのコマンドの1つがPIDを通知した後、次のコマンドを実行します。
lsof -p $PID
どのマウントポイントが使用されているかを示します。 grepを少しだけすれば終わりです。