LVM形式のイメージファイルで実行されるLinuxシステムを設定しようとしています。 initramfsとブートオプションをいくつか変更した後、ホストファイルシステムをにマウントし、イメージ/run/initramfs/host
をlosetup
にマウントし/dev/loop0
、カーネルとudevがLVM(およびルートLV)を検出したことを確認して起動して実行できました。今まではそんなに良くなった。
問題は、システムをシャットダウン(または再起動または...)するときに鶏と卵が必要なため、ルートファイルシステムまたはホストが正しくマウント解除されないことです/oldroot
。 )はまだインストールされているため削除できず/oldroot/run/initramfs/host
、ホストを削除するとアクセスできなくなるため削除できません/oldroot
。
異常終了するからといって世界が終わるわけではありません。両方のファイルシステムが記録されるため、fsck
ログは次回の起動時に単に再生されますが、明らかに完全にシャットダウンする方が良いでしょう。
したがって、質問は次のようになります。どういうわけか終了順序を調整することは可能ですか?できる終了スクリプトの変更)、または両方のファイルシステムを完全にアンマウントできるように、起動順序(おそらくホストのマウントポイントを別の場所に移動)が必要ですか?
答え1
誰でも同じ問題がある場合:
tmpfs
必要なのは、アンマウントを実行する前に、シャットダウンスクリプトでホストファイルシステムのマウントポイントをルートファイルシステムの外部の場所に移動することです(ピボットルートで実行されるので問題ありません)。
mount --move /oldroot/run/initramfs/host /host
これにより、/oldroot
完全に削除できます。その後、簡単なコマンドを使用してホストファイルシステムをアンマウントできます。
umount /host
答え2
いくつかありますオペレーティングシステムこの種のタスクを実行するためのヒント:
mount --move
これがあなたを作る交換マウントポイントのファイルシステムpivot_root
chroot
/
ルートファイルシステムの切り替えと一緒に使用されます。
早い、特徴目標は次のとおりです。
initramdisk
as を使用してカーネルを起動します。ルートファイルシステム(RAM
圧縮されていない部分を維持してくださいinitrd
)。- 必要なすべてのモジュールとスクリプトにアクセスする実際のルートデバイス最初のブート段階で始まりました。 (ここにはネットワーク初期化とネットワークデバイスのインストールが含まれる場合があります)
- 準備ができたら確認してください実際のルートデバイス準備されたルートファイルシステムとしてマウントされます。実行
pivot_root
(およびchroot
)するので、実行後は次のようramdisk
になります。未使用メモリディスクにインストールされました/initrd
。 - これにより、そこから
umount /initrd
メモリを解放できます。
見man mount
てman pivot_root
!
答え3
ファイルを無効にせずにファイルシステムを完全にアンマウントされたとマークするには、読み取り専用で再マウントしてください。
mount -o remount,ro /mount/point
これは、実行可能ファイルの読み取り、実行、現在のディレクトリ、またはアクティブなマウントポイント用にファイルシステムに開いているファイルがある場合でも実行できます。書き込み用にファイルを開く場合にのみ読み取り専用で再マウントすることはできません。