olddeviceを/ mntにマウントしています:
$ mount olddevice /mnt
/ mntマウントポイントでデバイスを変更したいと思います。この目的のために、私は単にその上にnewdeviceをマウントします:
$ mount newdevice /mnt
これにより、olddeviceにファイル記述子が残っているプロセスは古いデバイスで動作し続けることができますが、/ mntを使用する新しいプロセスはnewdeviceを使用します。
olddeviceが使用されなくなったことを検出し、マウントを解除することにしました。私の問題はそれをアンマウントする方法です:
$ umount olddevice
umount: olddevice: umount failed: Invalid argument.
直接アンマウントすることはできますか?または、最初にアンマウントする必要がありますかnewdevice(私はそれを望んでいません)?
マウント伝播を有効にしてまだ実行していない場合(例: 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
を使用しました。 /mnt
のsubディレクトリにファイルシステムがマウントされている場合、このumount -R
コマンドは途中で失敗する可能性があります。つまりサブマウントには開いているファイルがありませんが、メインマウントにはまだ開いているファイルがいくつかあるためです。 IMOこれは、umount -l
の動作と同じように感じます。 umount -l /path
は、マウントツリーを逆アセンブルおよびデタッチし、開いているファイルがなくなるとすぐに、独立した各ファイルシステムをシャットダウンします。