「親」マウントポイントを削除する方法はありますか?

「親」マウントポイントを削除する方法はありますか?

同僚の一人がディレクトリに誤ったボリュームをマウントし、同じディレクトリに正しいボリュームをマウントしました。 「正しい」ボリュームに触れることなく、この「間違った」ボリュームをアンマウントする方法はありますか?

以下は、この状況の再現可能な例です。

$ 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 target2番目のボリュームがマウント解除されますが、これは意図した効果ではありません。ループデバイス自体をアンロードしようとすると、次のようになります。

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

関連情報