我的一位同事将错误的卷安装到目录上,然后将正确的卷安装到同一目录上。有没有办法卸载这个“不正确”的卷而不接触“正确”的卷?
这是这种情况的可重现示例:
$ 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.
有什么办法可以解决这个难题吗?
答案1
就在这里。
将该安装移动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
#