Mount
rbind 掛載後遞歸解除安裝
當進入 chroot 時,有時需要使用 -rbind 而不是 -bind 來掛載 /sys 和 /dev,以確保在有人查看時一切都在正確的位置。
解除安裝時出現問題。
簡單的 umount 總是失敗;隨著孩子們也被安裝,它似乎正在使用中:
$ umount /mnt/chroot/sys umount: /mnt/chroot/sys: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1))
另一種可能的解決方案是從 proc 中列出掛載,然後像這樣解除安裝每個掛載:
$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount
但是,這也失敗了,因為遞歸掛載實際上並未在 mtab 中註冊:
/mnt/chroot/sys/kernel/security is not mounted (according to mtab)
也許解決方案是執行惰性解除安裝,但這對我來說似乎很危險。
有沒有更好的方法來做到這一點,我錯過了?
這個答案歸功於Gilles。Gilles 在問題評論中指出,“-n”開關忽略 mtab 並解除安裝 /proc/mounts 中列出的任何內容。
從手冊頁:
-n Unmount without writing in /etc/mtab.
因此,要回答我關於如何解開 –rbind 掛載的問題,這是對我有用的完整命令:
grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount -n
謝謝你,吉爾斯!
這對我來說是正確的——https: //unix.stackexchange.com/a/264488/4319:
mount --rbind /dev /mnt/test mount --make-rslave /mnt/test umount -R /mnt/test
將前兩個命令作為兩個單獨的命令非常重要:不要組合
--rbind
併--make-rslave
在一次 mount 呼叫中。沒有
--make-rslave
,該行為是不需要的(並且不成功):
umount -l
也會影響原來的舊掛載點,- 並且
umount -R
會受到原始舊掛載點下繁忙(打開)文件的影響。(非常意外……)