동료 중 한 명이 디렉터리에 잘못된 볼륨을 탑재한 다음 동일한 디렉터리에 올바른 볼륨을 탑재했습니다. "올바른" 볼륨을 건드리지 않고 이 "잘못된" 볼륨을 마운트 해제할 수 있는 방법이 있습니까?
다음은 이 상황의 재현 가능한 예입니다.
$ 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
#