Linux

在不影響原始掛載的情況下解除安裝 rbind 掛載

  • February 20, 2016

被問到serverfault但沒有得到足夠的關注,所以在這裡轉發,希望這裡的一些人知道答案。

還有另一個問題正在討論關於解除安裝 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_cumount 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_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 掛載而不影響子掛載。

我自己找到了解決方案。我只需要使用--make-rslave來進行任何更改A_dir/mount_b而不傳播回B_dir

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

請參閱mount手冊頁部分共享子樹操作

引用自:https://unix.stackexchange.com/questions/263972