メインコンテンツへスキップ
  1. ノート/
  2. システム底层/

GRUB の起動構造

·1303 文字·3 分· loading · loading · · ·
ICE345
著者
ICE345
CS Student | System | Linux | OCaml
GRUB 2 の実際の構成は、古い説明で使われる Stage 1 / Stage 1.5 / Stage 2 という区分だけでは説明しきれません。ここでは、BIOS と UEFI の違いを含めて、起動時にどこから何が読み込まれるかを整理します。

1. GRUB の役割
#

GRUB(GRand Unified Bootloader)は、Linux カーネルや他の OS の起動プログラムを読み込むブートローダーです。起動メニューを表示するため、ブートマネージャーとしての役割も持っています。

GRUB の配置と読み込み方は、次の二つの軸で変わります。

  • 起動方式:Legacy BIOS または UEFI
  • パーティション方式:MBR または GPT

2. BIOS モードの GRUB
#

2.1 boot.img
#

BIOS モードでは、GRUB の小さな最初のコードがディスク先頭の MBR に配置されます。MBR のブートコード領域は約 446 バイトしかないため、ファイルシステムを理解する完全な GRUB を保存することはできません。

2.2 core.img
#

最初のコードは、次の段階の core.img を読み込みます。core.img には、GRUB の基本機能、必要なファイルシステムモジュール、次のファイルを探すための情報などが含まれます。

  • MBR ディスクでは、MBR と最初のパーティションの間にある埋め込み領域が利用されることがあります。
  • GPT ディスクでは、通常、ファイルシステムを持たない BIOS Boot Partition が必要です。

「Stage 1.5」という呼び方は、この中間段階を説明するための歴史的・教育的な表現です。すべての GRUB 2 インストールに、固定された Stage 1.5 ファイルが存在するという意味ではありません。

2.3 GRUB のモジュールと設定
#

core.img が必要なモジュールを読み込めるようになると、GRUB はファイルシステム上のファイルを扱えるようになります。通常、次のようなファイルを読み込みます。

/boot/grub/grub.cfg
/boot/grub/*.mod
/boot/vmlinuz-*
/boot/initramfs-*

その後、GRUB はメニューを表示し、選択された Linux カーネルと initramfs をメモリへ配置して、Linux の起動プロトコルに従って制御を渡します。

3. UEFI モードの GRUB
#

UEFI では、ファームウェアが ESP から EFI プログラムを読み込みます。GRUB の EFI プログラムは、例えば次の場所に保存されます。

/EFI/ubuntu/grubx64.efi
/EFI/BOOT/BOOTX64.EFI

.efi は通常 PE/COFF 形式であり、ELF ではありません。UEFI が grubx64.efi を実行すると、GRUB は設定ファイル、モジュール、Linux カーネル、initramfs を読み込みます。

UEFI モードでは、GRUB の EFI プログラムを MBR に埋め込む必要はありません。ESP のファイルと UEFI の起動項目が重要になります。

4. Stage という説明の注意点
#

古い GRUB の説明では、次のように表現されます。

Stage 1   → MBR の小さな起動コード
Stage 1.5 → ファイルシステムを扱う中間コード
Stage 2   → /boot/grub の完全な GRUB

学習用の流れとしては便利ですが、現代の GRUB 2 では boot.imgcore.img、モジュール、設定ファイル、EFI プログラムという構成で説明した方が正確です。

5. まとめ
#

  • BIOS モードでは、MBR の小さなコードから core.img へ処理が進みます。
  • MBR ディスクでは埋め込み領域、GPT ディスクでは BIOS Boot Partition が使われることがあります。
  • UEFI モードでは、UEFI が ESP の .efi プログラムを直接実行します。
  • GRUB は設定を読み、カーネル、initramfs、カーネルコマンドラインを準備します。
  • GRUB は Linux カーネルそのものではなく、カーネルへ制御を渡すための起動プログラムです。

関連記事


评论