"상위" 마운트 지점을 제거하는 방법이 있습니까?

"상위" 마운트 지점을 제거하는 방법이 있습니까?

동료 중 한 명이 디렉터리에 잘못된 볼륨을 탑재한 다음 동일한 디렉터리에 올바른 볼륨을 탑재했습니다. "올바른" 볼륨을 건드리지 않고 이 "잘못된" 볼륨을 마운트 해제할 수 있는 방법이 있습니까?

다음은 이 상황의 재현 가능한 예입니다.

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

관련 정보