LVM形式の画像ファイルから実行するLinuxシステムをセットアップしようとしています。 initramfsとブートオプションをいじくり回した後、ホストファイルシステムを/run/initramfs/Host
にマウントし、losetup
イメージを/dev/loop0
にマウントし、カーネルとudevはそこでLVM(およびルートLV)を検出します。ここまでは順調ですね。
問題は、システムをシャットダウン(または再起動、または…)すると、鶏が先か卵が先かというシナリオのために、ルートファイルシステムもホストも正しくマウント解除されないことです。ルート(または/oldroot
)シャットダウンスクリプトによって参照される)は、/oldroot/run/initramfs/Host
がまだマウントされているため、アンマウントできません。また、ホストをアンマウントすると、/oldroot
にアクセスできなくなるためです。
両方のファイルシステムがジャーナル処理されるため、クリーンでないシャットダウンは世界の終わりではありません。したがって、次の起動時にfsck
は単にジャーナルを再生しますが、明らかにクリーンなシャットダウンの方が良いでしょう。
したがって、問題は次のとおりです。シャットダウンシーケンスを調整することは可能ですか(I canシャットダウンスクリプトを変更します)、または起動シーケンス(おそらくホストマウントポイントをに移動することによって)別の場所)両方のファイルシステムをきれいにアンマウントできるように?
誰かが同じ問題を抱えている場合:
必要なのは、マウント解除が行われる前に、シャットダウンスクリプトでホストファイルシステムのマウントポイントをルートファイルシステムの外部の場所に移動することだけでした(これはtmpfs
ピボットルートで実行されるため、問題ありません)。
mount --move /oldroot/run/initramfs/Host /Host
これにより、/oldroot
きれいにアンマウントします。その後、ホストファイルシステムを簡単な方法でアンマウントできます
umount /Host
この種の作業を行うには、いくつかのlinuxトリックがあります。
mount --move
これによりスワップマウントポイントのファイルシステムpivot_root
スイッチ/
ルートファイルシステムのchroot
と連携します当初、featureの目標は次のとおりでした。
initramdisk
をルートファイルシステムとしてカーネルを起動します(非圧縮のRAM
用にinitrd
を予約します)。pivot_root
(およびchroot
)を実行しているため、操作後、ramdisk
は未使用のRAMディスク/initrd
にマウントされます。umount /initrd
してメモリを解放することができます。man mount
とman pivot_root
をご覧ください!
ファイルシステム上のファイルを使用不可にすることなく、ファイルシステムを完全にアンマウントされたものとしてマークするには、読み取り専用として再マウントします。
mount -o remount,ro /mount/point
これは、読み取り用に開いているファイル、実行可能ファイルの実行、現在のディレクトリ、またはそのファイルシステム上のアクティブなマウントポイントがある場合でも実行できます。書き込み用に開いているファイルのみが、読み取り専用での再マウントを防ぎます。