Linux
有沒有辦法解除安裝“父”掛載點?
我的一位同事將錯誤的捲安裝到目錄中,然後將正確的捲安裝到同一目錄中。有沒有辦法在不接觸“正確”卷的情況下解除安裝這個“不正確”卷?
這是這種情況的可重現範例:
$ dd if=/dev/zero of=file-a bs=1M count=1 $ mkfs.ext4 file-a $ dd if=/dev/zero of=file-b bs=1M count=1 $ mkfs.ext4 file-b $ mkdir target $ sudo mount -o loop file-a target $ sudo mount -o loop file-b target
以下是執行這些命令後的情況:
$ findmnt TARGET SOURCE FSTYPE OPTIONS / /dev/xxx ext4 └─/home/user/test-umount/target /dev/loop1 ext4 rw,relatime └─/home/user/test-umount/target /dev/loop2 ext4 rw,relatime
所以我們想在
/dev/loop1
這裡解除安裝設備,但保持/dev/loop2
安裝到target
.這樣做
umount target
將解除安裝第二個卷,這不是預期的效果。嘗試解除安裝循環設備本身會給出:$ sudo umount /dev/loop1 $ umount: /dev/loop1: umount failed: Invalid argument.
有沒有辦法解決這個難題?
就在這裡。
將該
target
掛載移到別處,卸下原始掛載,然後將其移回:# mkdir target-1 # mount --move target target-1 # umount target # mount --move target-1 target
如果根或任何其他父掛載的
target
傳播設置為共享(使用 systemd 時的預設值),則移動掛載將不起作用。在這種情況下,您可以mount --move
用一對mount --make-rprivate /; ...; make --rshared /
命令括起來:# mkdir target-1 # mount --make-rprivate /; mount --move target target-1; mount --make-rshared / # umount target # mount --make-rprivate /; mount --move target-1 target; mount --make-rshared /
不過,檢查一下是個好主意。之前和之後:
# grep -v shared /proc/self/mountinfo #