Linuxのブートプロセスについて

 今回はLinuxのブートプロセスの話をしていきます。ブートプロセスとはコンピュータの電源を入れてから、OSが起動しデスクトップ画面やログイン画面が表示されるまでの、一連の動作のことです。

Linuxのブートプロセスの流れ

まずは、ブートプロセスの流れはざっくりとこんな感じになっています。

ハードウェアの状態確認

 ハードウェアの状態確認で登場するのが、機器を制御するためのソフトウェアであるBIOS(Basic Input/Output System)とUEFI(Unified Extensible Firmware Interfase)です。

 これらはともにマザーボードの不揮発性メモリ(電源を切っても記憶内容が保存されている場所)に格納されています。

 電源が入るとBIOSまたはUEFIが起動して、システム起動に必要な最低限のハードウェアの動作確認を行います。

OS起動の準備

 ハードウェアの確認が終わったら、今度はOSの起動準備に入ります。

 まずは、どのデバイスにOSが入っていて、どのOSを実際に利用するか確認・指定していきます。

 その一連の流れを行うのがブートローダと呼ばれるソフトウェアです。LinuxのブートローダとしてはGRUB(Grand Unified Bootloader)が多く利用されています。

 ブートローダはBIOSであればMBR(マスターブートレコードという領域)に、UEFIであればESP(UEFIシステムパーティションという領域)に含まれています。

 利用するOSが決まったら、ブートローダがメモリ上にOSのカーネルを読み込みます。

選択したOSの起動

カーネルの起動

 カーネルをメモリ上に読みこむことで、OSの基本機能が使えるようになります。そして、カーネルを利用してアプリケーションがシステムやハードウェアを使えるように、管理・制御を行います。

ファイルシステムのマウント

 ディスク上のデータをファイルとして扱えるように、ルートファイルシステムをマウントする必要があります。ただし最初から本来のルートファイルシステムをマウントするのではなく、二段階に分けてマウントします。

  • 1段階目:ルートファイルシステムをマウントするためのコマンドやファイルを集めた、小さなファイルシステムをマウントする
  • 2段階目:マウントした小さなファイルシステムのコマンドやファイルを利用して、本来のルートファイルシステムをマウントする

 この1段階目にマウントする小さなファイルシステムは初期RAMディスク(Initial RAM Disk: initrd)と呼ばれています。初期RAMディスクはブートローダによってメモリ上に読み込まれて一度マウントされます。

 初期RAMディスクには、initrdとinitramfsの二種類あります。最近のディストリビューションではinitramfsが利用されることが多いです。

最初のプロセスの起動

 無事、ルートファイルシステムをマウントしたら最初のプロセスとしてinitもしくはsystemdが起動します。

必要なサービスの起動

 最初のプロセスとして起動したinitもしくはSystemdは、設定ファイル(/etc/systemd/以下のユニットファイルなど)に基づいて、必要なシステムサービス(ネットワーク、SSH、ウェブサーバーなど)やデーモンを起動します。

OSの起動完了

 必要なすべてのサービスが立ち上がり、ログインが可能になったらOSの起動は完了となります。

まとめ

 今回はブートプロセスの流れの把握に注力しているため、なるべく専門用語や詳細の説明は少なくしています。Linuxのブートプロセスについて、頭の中でイメージできるようになっていたら本望です。

おまけ

 BIOS/UEFIとブートローダの話の際に、MBRとGPT(Guid Partition Table)という言葉が出てきます。MBRはパーティション方式でもあるのと同時に、ブートローダを含む特定の領域のことです。一方で、GPTは単にパーティション方式です。初学者はこのざっくりとした違いを把握していなくて、混乱することがあるためお気をつけください。(私がそうでした)

BIOSUEFI
パーティション方式MBRGPT
ブートローダの格納場所MBRESP