同僚の一人がディレクトリに誤ったボリュームをマウントし、同じディレクトリに正しいボリュームをマウントしました。 「正しい」ボリュームに触れることなく、この「間違った」ボリュームをアンマウントする方法はありますか?
以下は、この状況の再現可能な例です。
$ 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
2番目のボリュームがマウント解除されますが、これは意図した効果ではありません。ループデバイス自体をアンロードしようとすると、次のようになります。
$ 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
#