Linux カーネルに制御が渡ると、メモリ管理、スケジューリング、割り込み、組み込みドライバー、セキュリティフレームワークなどの中核サブシステムを初期化します。さらにコマンドラインを解析し、最初のユーザー空間プロセスを起動する準備をします。
システムの起動 · レッスン 4
ブートプロセス:カーネル
カーネルがハードウェアを初期化し、initramfs の初期ユーザー空間を動かして実際のルートへ到達し、PID 1 を起動する流れを学びます。
初期ユーザー空間が必要な理由
単純なルートファイルシステムなら、カーネル組み込みのドライバーだけでマウントできることがあります。複雑なシステムでは、実際のルートへ到達する前に、次のようなモジュールやツールが必要です。
- ストレージコントローラーやファイルシステムのモジュール
- 暗号化されたルートのロック解除
- LVM や RAID の構築
- ネットワークルート用のネットワーク設定
- デバイス検出と永続識別子の解決
initramfs は、これらをカーネルとともに渡される初期ユーザー空間環境にまとめます。
initramfs が一般に解決する問題はどれですか?
Initramfs と従来の Initrd
現代の initramfs は通常、一つ以上の cpio アーカイブで、多くは圧縮されています。カーネルはこれを初期ルートファイルシステムへ展開し、その環境の初期 /init プログラムを実行します。
従来の initrd は概念上、RAM 上のブロックデバイスへ読み込んでマウントするファイルシステムイメージです。ファイル名やブートローダーのコマンドでは両用語が厳密でないこともあるため、名前だけで形式を判断せず、実際のツールを確認してください。
initramfs はカーネルとブート設計に適合していなければなりません。モジュールの欠落、古いデバイス識別子、暗号化や LVM ツールの不足があると、カーネルイメージ自体が正しくても新しいカーネルを起動できないことがあります。
現代の initramfs は、一般にどの形式でカーネルへ渡されますか?
実際のルートへの到達
初期ユーザー空間は root= などのパラメータを解釈し、必要なデバイスを待ち、ストレージ層を有効化して、目的のルートファイルシステムをマウントします。その後、ルート切り替え操作でそのファイルシステムを新しい / とし、可能であれば一時的な初期環境を解放します。
コマンドラインの初期 ro 指定は整合性検査や制御された起動に役立ちますが、正確な順序はディストリビューションごとに異なります。ファイルシステム検査はユーザー空間の処理であり、ポリシーが許せば initramfs や後続の init システムがルートを読み書き可能に再マウントします。
初期ユーザー空間が目的の実ルートを正常にマウントした後、何が起きますか?
PID 1 の起動
カーネルは、通常 /sbin/init などのパスで到達する init プログラム、または init= で指定されたプログラムを実行します。そのプロセスには PID 1 が割り当てられ、主要なユーザー空間サービス環境を担います。
使用可能な init プログラムを実行できなければ、カーネルは通常のユーザー空間システムへ進めず、ブート失敗やパニックを報告するのが一般的です。カーネルとコマンドライン、initramfs の内容、ルート検出、ルートのマウント、PID 1 の実行という順に、最初に失敗した層を調べてください。
この単純化したブート段階で、カーネルが最後に行う主要な引き継ぎはどれですか?
レッスン完了
ブートプロセス:カーネル を完了しました
これで、カーネルのブートを初期ユーザー空間から PID 1 まで追跡できます。
カーネル組み込みの初期化と、読み込み可能な初期モジュールを区別する。
initramfs を cpio ベースの一時ルートおよび
/initと関連付ける。ストレージの構築から実際のルートへの切り替えまでを追う。
PID 1 の実行をユーザー空間への引き継ぎとして識別する。