Linux

如何從被另一個已安裝設備隱藏的路徑中解除安裝設備?

  • July 22, 2019

我已將olddevice安裝到*/mnt*:

$ mount olddevice /mnt

我想在*/mnt掛載點更改設備。為此,我簡單地將newdevice*掛載在它上面:

$ mount newdevice /mnt

這樣,在olddevice上仍有文件描述符的程序可以繼續在舊設備上工作,但使用*/mnt的新程序將使用newdevice*。

我可以檢測到olddevice 何時不再使用並決定解除安裝它。我的問題是如何解除安裝它:

$ umount olddevice
umount: olddevice: umount failed: Invalid argument.

可以直接解除安裝嗎?還是必須先解除安裝新設備(我不希望這樣)?

如果您尚未在啟用掛載傳播的情況下執行,例如按照 systemd 預設設置,請先執行:

mount --make-rshared /

然後:

mkdir /root.orig
mount --rbind / /root.orig
mount --make-rprivate /root.orig/mnt

mount newdevice /mnt
...
umount -R /root.orig/mnt    # instead of umount olddevice

然後安全地拆卸魔法——注意不要解除安裝整個系統:

mount --make-rprivate /root.orig
umount -l /root.orig
rmdir /root.orig

通常,我喜歡使用mount/umount命令的遞歸變體。你說你開始時只有一個文件系統安裝在下面/mnt。在上面的序列中,我使用了umount -R /root.orig/mnt. 如果在 的子目錄上還掛載了一個文件系統/mnt,則此umount -R命令可能會在中途失敗。即因為子掛載上沒有打開的文件,但主掛載上仍有一些打開的文件。IMO 這感覺類似於umount -l工作原理。 umount -l /path反彙編和分離掛載樹,每個獨立的文件系統一旦沒有打開的文件就會關閉。

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