web-dev-qa-db-ja.com

シャットダウン時にループバックルートとホストがアンマウントされていることを確認します

LVM形式の画像ファイルから実行するLinuxシステムをセットアップしようとしています。 initramfsとブートオプションをいじくり回した後、ホストファイルシステムを/run/initramfs/Hostにマウントし、losetupイメージを/dev/loop0にマウントし、カーネルとudevはそこでLVM(およびルートLV)を検出します。ここまでは順調ですね。

問題は、システムをシャットダウン(または再起動、または…)すると、鶏が先か卵が先かというシナリオのために、ルートファイルシステムもホストも正しくマウント解除されないことです。ルート(または/oldroot)シャットダウンスクリプトによって参照される)は、/oldroot/run/initramfs/Hostがまだマウントされているため、アンマウントできません。また、ホストをアンマウントすると、/oldrootにアクセスできなくなるためです。

両方のファイルシステムがジャーナル処理されるため、クリーンでないシャットダウンは世界の終わりではありません。したがって、次の起動時にfsckは単にジャーナルを再生しますが、明らかにクリーンなシャットダウンの方が良いでしょう。

したがって、問題は次のとおりです。シャットダウンシーケンスを調整することは可能ですか(I canシャットダウンスクリプトを変更します)、または起動シーケンス(おそらくホストマウントポイントをに移動することによって)別の場所)両方のファイルシステムをきれいにアンマウントできるように?

5
user30223

誰かが同じ問題を抱えている場合:

必要なのは、マウント解除が行われる前に、シャットダウンスクリプトでホストファイルシステムのマウントポイントをルートファイルシステムの外部の場所に移動することだけでした(これはtmpfsピボットルートで実行されるため、問題ありません)。

mount --move /oldroot/run/initramfs/Host /Host

これにより、/oldrootきれいにアンマウントします。その後、ホストファイルシステムを簡単な方法でアンマウントできます

umount /Host
4
user30223

この種の作業を行うには、いくつかのlinuxトリックがあります。

  • mount --moveこれによりスワップマウントポイントのファイルシステム
  • pivot_rootスイッチ/ルートファイルシステムのchrootと連携します

当初、featureの目標は次のとおりでした。

  1. initramdiskルートファイルシステムとしてカーネルを起動します(非圧縮のRAM用にinitrdを予約します)。
  2. アクセスに必要なすべてのモジュールとスクリプト実際のルートデバイスは、この最初のブートステップで開始されます。 (これには、ネットワークの初期化とネットワークデバイスのマウントが含まれる可能性があります)
  3. 準備後、実際のルートデバイスを確認し、準備ができたルートファイルシステムとしてマウントします。 pivot_root(およびchroot)を実行しているため、操作後、ramdisk未使用のRAMディスク/initrdにマウントされます。
  4. したがって、そこからumount /initrdしてメモリを解放することができます。

man mountman pivot_rootをご覧ください!

1
F. Hauri

ファイルシステム上のファイルを使用不可にすることなく、ファイルシステムを完全にアンマウントされたものとしてマークするには、読み取り専用として再マウントします。

mount -o remount,ro /mount/point

これは、読み取り用に開いているファイル、実行可能ファイルの実行、現在のディレクトリ、またはそのファイルシステム上のアクティブなマウントポイントがある場合でも実行できます。書き込み用に開いているファイルのみが、読み取り専用での再マウントを防ぎます。