4. ブートプロセス:カーネル

ブートローダーがカーネルをメモリにロードし、必要なパラメータを渡した後、システム制御はカーネルに移ります。次に何が起こるかを見てみましょう。

カーネルの初期化と 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を起動します。このプログラムが、システムの残りの部分をオンラインにする責任を負います。

ログインして学習進捗を保存

サインイン

演習

練習あるのみです!Linux ブートプロセスへの理解を深めるための実践的なラボを以下に示します。

  • Linux で GRUB2 ブートメニューをカスタマイズする - タイムアウトやデフォルトのエントリの変更、これらの変更の適用など、GRUB2 ブートメニューの変更方法を学びます。このラボは、ブートローダーがどのように設定できるかを理解するのに役立ちます。

このラボは、概念を実際のシナリオに適用し、Linux ブート設定に対する自信を構築するのに役立ちます。

クイズ

What is used in modern systems to load a temporary root filesystem? Please answer in English, using only lowercase letters.