web-dev-qa-db-ja.com

別のマウントされたデバイスによって隠されたパスからデバイスをアンマウントする方法は?

olddevice/ mntにマウントしています:

$ mount olddevice /mnt

/ mntマウントポイントでデバイスを変更したいと思います。この目的のために、私は単にその上にnewdeviceをマウントします:

$ mount newdevice /mnt

これにより、olddeviceにファイル記述子が残っているプロセスは古いデバイスで動作し続けることができますが、/ mntを使用する新しいプロセスはnewdeviceを使用します。

olddeviceが使用されなくなったことを検出し、マウントを解除することにしました。私の問題はそれをアンマウントする方法です:

$ umount olddevice
umount: olddevice: umount failed: Invalid argument.

直接アンマウントすることはできますか?または、最初にアンマウントする必要がありますかnewdevice(私はそれを望んでいません)?

2
rools

マウント伝播を有効にしてまだ実行していない場合(例: systemdのデフォルトに従って、最初にこれを実行します。

mount --make-rshared /

次に:

mkdir /root.orig
mount --rbind / /root.orig
mount --make-rprivate /root.orig/mnt

mount newdevice /mnt
...
umount -R /root.orig/mnt    # instead of umount olddevice

次に、魔法を安全に分解します-システム全体をアンマウントしないように注意してください:

mount --make-rprivate /root.orig
umount -l /root.orig
rmdir /root.orig

通常、私はmount/umountコマンドの再帰的なバリアントを使用するのが好きです。あなたは、/mntの下にマウントされたファイルシステムを1つだけ始めたと言います。上記のシーケンスでは、umount -R /root.orig/mntを使用しました。 /mntsubディレクトリにファイルシステムがマウントされている場合、このumount -Rコマンドは途中で失敗する可能性があります。つまりサブマウントには開いているファイルがありませんが、メインマウントにはまだ開いているファイルがいくつかあるためです。 IMOこれは、umount -lの動作と同じように感じます。 umount -l /pathは、マウントツリーを逆アセンブルおよびデタッチし、開いているファイルがなくなるとすぐに、独立した各ファイルシステムをシャットダウンします。

1
sourcejedi