如何找出阻止绑定安装卸载的原因?

如何找出阻止绑定安装卸载的原因?

我遇到的问题是安装点太忙而无法卸载。通常,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 都显示使用两个安装点的相同进程,但在这些命令中的任何一个告诉您 PID 后,运行:

lsof -p $PID

确实揭示了正在使用哪个安装点。稍微进行一些 grep 操作就可以了。

相关内容