卸载 rbind 挂载而不影响原始挂载

卸载 rbind 挂载而不影响原始挂载

询问于服务器故障但没有引起足够的重视,所以转发在这里,希望这里的一些人知道答案。

还有另一种问题讨论卸载 rbind 挂载,但该解决方案产生了不良影响。考虑以下目录布局:

.
├── A_dir
│   └── mount_b
├── B_dir
│   └── mount_c
└── C_dir

现在我绑定C_dirB_dir/mount_c并rbindB_dirA_dir/mount_b

[hidden]$ sudo mount --bind C_dir B_dir/mount_c
[hidden]$ sudo mount --rbind B_dir A_dir/mount_b
[hidden]$ mount | grep _dir | wc -l
3

现在umount A_dir/mount_b会失败,这并不奇怪。根据网上随处可见的答案,我们需要umount A_dir/mount_b/mount_c先然后umount A_dir/mount_b。但是,umount A_dir/mount_b/mount_c也会 unmount B_dir/mount_c,这是不需要的:

[hidden]$ sudo umount A_dir/mount_b/mount_c
[hidden]$ mount | grep _dir | wc -l
1

现在我的问题是,如何卸载A_dir/mount_bB_dir不受影响,即仍然有B_dir/mount_c绑定C_dir

编辑:这个问题似乎不会出现在Ubuntu中。更具体地说,它在我的 Ubuntu 14.04 上运行良好,但在 Fedora 23 和 CentOS 7 上不起作用。为什么会有差异?Fedora 和 CentOS 的解决办法是什么?

编辑:有关我试图解决的实际问题的更多信息。我尝试创建一个沙箱并用于--rbind/dev和挂载/proc到沙箱。销毁沙箱时,似乎我无法彻底销毁它,因为<sandbox-root>/dev/pts在 FC23 和 CentOS7 中卸载将 unmount /dev/pts,之后我的 shell 和 SSH 连接挂起,我必须重新启动计算机。这就是为什么我问是否有一种方法可以在不影响子安装的情况下卸载 --rbind 安装。

答案1

我自己找到了解决方案。我只需要使用--make-rslave来进行任何更改,A_dir/mount_b而不传播回B_dir

sudo mount --make-rslave A_dir/mount_b
sudo umount -R A_dir/mount_b

手册页部分共享子树操作

相关内容