Linux

有沒有辦法解除安裝“父”掛載點?

  • October 16, 2021

我的一位同事將錯誤的捲安裝到目錄中,然後將正確的捲安裝到同一目錄中。有沒有辦法在不接觸“正確”卷的情況下解除安裝這個“不正確”卷?

這是這種情況的可重現範例:

$ 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
#

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