Linux
如何從被另一個已安裝設備隱藏的路徑中解除安裝設備?
我已將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
反彙編和分離掛載樹,每個獨立的文件系統一旦沒有打開的文件就會關閉。