在不影响原始安装的情况下卸载rbind安装


11

在服务器故障时被询问,但没有引起足够的重视,因此在此处重新发布,希望这里的某些人知道答案。

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

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

现在我将绑定C_dirB_dir/mount_c和rbind B_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_b,但留下B_dir的影响,即仍有绑定B_dir/mount_cC_dir

编辑:这个问题似乎没有出现在Ubuntu中。更具体地说,它可以在我的Ubuntu 14.04上正常运行,但不能在Fedora 23和CentOS 7上运行。为什么会有区别,Fedora和CentOS的工作原理是什么?

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


Answers:


9

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

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

请参见安装手册页部分的共享子树操作


1
在某些系统中,mount --rbind src target --make-rslave一个呼叫甚至可以合并在一起。有些系统过去禁止我这样做。
imz-伊万·扎哈拉里舍夫(Ivan Zakharyaschev),
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.