我遇到的问题是安装点太忙而无法卸载。通常,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 操作就可以了。