ブートローダーがカーネルをメモリにロードし、必要なパラメータを渡した後、システム制御はカーネルに移ります。次に何が起こるかを見てみましょう。
カーネルの初期化と Initramfs
起動時の古典的な課題は、カーネルがハードウェアデバイスにアクセスするためにドライバを必要としますが、そのドライバはカーネルがまだアクセスできないストレージデバイス上に存在することが多いという点です。この問題を解決するために、Linux は一時的なルートファイルシステムを使用します。
古いシステムでは、これはinitrd(initial RAM disk)によって処理されていました。カーネルはこのディスクイメージをロードし、必要なドライバを見つけてから、実際のルートファイルシステムに切り替えます。Ubuntu のようなディストリビューションを含む最新のシステムでは、initramfs(initial RAM filesystem)が使用されます。initrdとは異なり、initramfsはメモリ内に直接一時ファイルシステムとして展開されるcpioアーカイブです。このアプローチは、ブロックデバイスを作成してマウントするオーバーヘッドを回避できるため、より効率的です。initramfsには、実際のboot partitionやその他のハードウェアにアクセスするためにカーネルが必要とする、ごく基本的なモジュールのみが含まれています。
ブートルートファイルシステムのマウント
initramfsからドライバがロードされると、カーネルはメインのboot rootファイルシステムを見つけてマウントできるようになります。このファイルシステムの場所は通常、/etc/default/grubのようなファイルで設定できるブートローダーによってパラメータとして渡されます。
まず、カーネルはboot rootパーティションを読み取り専用モードでマウントします。これは、fsck(ファイルシステムチェック)ユーティリティがデータ破損のリスクなしにファイルシステムの整合性を検証できるようにするための安全策です。チェックが正常に完了した後、カーネルはファイルシステムを読み書きモードで再マウントします。
最後に、ルートファイルシステムが完全に利用可能になると、カーネルは最初のユーザー空間プログラムであるinitを起動します。このプログラムが、システムの残りの部分をオンラインにする責任を負います。