Mount

rbind 掛載後遞歸解除安裝

  • April 7, 2020

當進入 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會受到原始舊掛載點下繁忙(打開)文件的影響。(非常意外……)

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