Linuxでの起動の流れ

boot

起動の流れ BIOS → ブートローダー → カーネル → systemd

Linuxシステムが起動する際には、複数のステージを経てオペレーティングシステムが完全に立ち上がります。このプロセスはハードウェアの初期化から始まり、カーネルのロード、システムの初期化、サービスの起動を含む一連の手順によって構成されています。本記事では、Linuxの起動プロセスの詳細な流れを説明します。

1. BIOS/UEFIの初期化

Linuxシステムの起動は、BIOS(Basic Input/Output System)またはUEFI(Unified Extensible Firmware Interface)から始まります。これらはシステムのファームウェアであり、ハードウェアの初期化とブートデバイスの選択を行います。

  • BIOS:古いシステムで一般的に使用されるファームウェア。POST(Power-On Self-Test)を実行し、ハードウェアが正常に動作しているか確認します。
  • UEFI:新しいシステムで使用されるファームウェア。BIOSよりも高速で、セキュリティ機能や柔軟なブートオプションを提供します。

2. ブートローダーの起動

BIOS/UEFIがブートデバイスを決定すると、ブートローダーが起動します。ブートローダーは、オペレーティングシステムのカーネルをメモリにロードする役割を果たします。Linuxで一般的に使用されるブートローダーは以下の通りです。

  • GRUB(GRand Unified Bootloader):最も広く使用されているブートローダー。複数のカーネルやオペレーティングシステムをサポートします。
  • LILO(LInux LOader):古いタイプのブートローダー。現在はほとんど使用されていません。

3. カーネルのロード

ブートローダーがカーネルをメモリにロードすると、カーネルが起動します。カーネルはオペレーティングシステムの核心部分であり、ハードウェアの管理とシステムリソースの制御を行います。

  • 初期RAMディスク(initrd/initramfs):カーネルは、必要なドライバやモジュールをロードするために、initrdまたはinitramfsを使用します。これにより、ルートファイルシステムがマウントされる前に必要なリソースが提供されます。

4. 初期化システムの起動

カーネルが起動すると、次に初期化システム(init system)が起動します。初期化システムは、システムの基本的な設定とサービスの起動を管理します。

  • SysVinit:古典的なinitシステム。複数のランレベル(システムの状態)を使用してサービスを管理します。
  • Upstart:イベント駆動型のinitシステム。Ubuntuで一時期使用されていました。
  • systemd:現在最も広く使用されているinitシステム。並列化による高速な起動と強力なサービス管理機能を提供します。

5. サービスとデーモンの起動

初期化システムが起動すると、次にシステムサービスとデーモン(バックグラウンドプロセス)が開始されます。これにはネットワーク設定、デバイス管理、ログインサービスなどが含まれます。

  • ネットワークサービス:ネットワークインターフェースの設定と起動。
  • デバイスサービス:ハードウェアデバイスの初期化と管理。
  • ログインサービス:ユーザーのログインを管理するサービス(例:getty、sshd)。

6. ログインプロンプトの表示

最後に、ログインプロンプトが表示され、ユーザーはシステムにログインできます。これには、コンソールログインとグラフィカルログイン(ディスプレイマネージャ)があります。

  • コンソールログイン:コマンドラインインターフェース(CLI)を使用したログイン。
  • グラフィカルログイン:グラフィカルユーザーインターフェース(GUI)を使用したログイン(例:GDM、LightDM)。

まとめ

Linuxの起動プロセスは、BIOS/UEFIの初期化から始まり、ブートローダーの起動、カーネルのロード、初期化システムの起動、サービスとデーモンの起動を経て、最終的にログインプロンプトの表示に至ります。この一連の手順により、システムは完全に立ち上がり、ユーザーが操作できる状態になります。各ステージはシステムの安定性とパフォーマンスに重要な役割を果たしており、これらの理解はトラブルシューティングやシステム管理に役立ちます。