この記事は中国語版をもとにした日本語版メモです。コマンド、コード、数式、画像リンクは原文の意味を壊さないように保持し、説明文と見出しを日本語向けに整理しています。
是的,GRUB 不会将其所有引导加载程序コード都存储在 /boot/grub 中。它使用 多阶段架构,其中引导加载程序的不同部分存储在不同的位置,这对于使用 MBR 和 GPT パーティション方案的システム至关重要,尤其是在 BIOS 模式 下启动时。
GRUB 的多阶段架构説明#
GRUB 的启动过程分为几个阶段,每个阶段都存储在不同的位置,具体取决于パーティション方案(MBR 或 GPT)和启动模式(BIOS 或 UEFI)。以下是细分:
1. GRUB 第 1 阶段#
- 位置:存储在 MBR(主引导记录)或 GPT システム中的 保护性 MBR(protective MBR) 中。
- 大小:仅 446 字节(磁盘前 512 字节的一部分)。
- 功能:阶段 1 的唯一目的是加载 GRUB 的下一阶段(阶段 1.5 或阶段 2)。由于阶段 1 非常小,そのため它无法执行读取ファイルシステム等复杂任务。
2. GRUB 阶段 1.5#
- 位置:
- 在 MBR 磁盘 上:存储在 后 MBR 间隙(post-mbr gap)(MBR 和磁盘上第一个パーティション之间的小空间)中。
- 在 GPT 磁盘 上:存储在专用的 BIOS 启动パーティション(通常大小为 1-2 MB)中。
- 功能:阶段 1.5 包含必要的 ファイルシステム驱动程序 和从パーティション(たとえば
/boot/grub)读取所需的其他コード。它弥补了阶段 1(最小)和阶段 2(功能齐全)之间的差距。 - もし没有阶段 1.5,GRUB 将无法找到并读取存储在
/boot/grubディレクトリ中的实际ファイル,なぜなら阶段 1 本身缺乏理解ファイルシステム(たとえば ext 4、Btrfs 等)的能力。
3. GRUB 阶段 2#
- 位置:存储在パーティション(通常是 /boot パーティション或操作システム的根パーティション)上的
/boot/grub/ディレクトリ中。 - 功能:阶段 2 是完整的引导加载程序,它:
- 显示 GRUB 菜单(もし有多个操作システム或内核)。
- 允许用户选择要引导的操作システム或内核。
- 将 操作システム内核 加载到メモリ中(たとえば Linux 内核)。
- 将控制权传递给操作システム。
当我们在多启动システム上看到 GRUB 菜单时,我们经常与 Stage 2 交互。它できます自定义,できます提供图形界面,并处理启动操作システム的更复杂任务。
GRUB 为什么必要 Stage 1.5?#
Stage 1.5 的主要原因是 Stage 1 太小,无法包含对不同ファイルシステム的支持。もし没有 Stage 1.5,GRUB 的 Stage 1 将无法理解从パーティション中加载 Stage 2 的位置或方式,なぜならパーティション通常使用复杂的ファイルシステム(如 ext 4、XFS 等)。Stage 1.5 包括ファイルシステム驱动程序,允许 GRUB 在パーティション上找到 /boot/grub ディレクトリ,并从中加载 Stage 2。
- 带有 Stage 1.5 的 MBR:在 MBR システム上,Stage 1.5 存储在 MBR 后间隙中,这为其提供了足够的空间来存储必要的ファイルシステム驱动程序。
- 带有 Stage 1.5 的 GPT:在 GPT システム上,不存在 MBR 后间隙,そのため Stage 1.5 存储在 BIOS 启动パーティション中。这是 **GRUB 在 GPT 上以 BIOS 模式実行所必需的。
摘要#
- Stage 1(存储在 MBR 中)非常小,仅用于加载 Stage 1.5 或 Stage 2。
- Stage 1.5(存储在 MBR 的 MBR 后间隙中或 GPT 的 BIOS 启动パーティション中)是加载ファイルシステム驱动程序和继续启动过程所必需的。
- 第 2 阶段(存储在
/boot/grub/中)是功能齐全的引导加载程序,它显示 GRUB 菜单、允许选择操作システム并加载操作システム内核。
そのため,GRUB 不仅将引导コード存储在 /boot/grub/ 中;它还将关键的引导加载程序コード存储在 MBR(第 1 阶段)中,もし是 GPT 磁盘上的 BIOS 模式,则存储在 BIOS 引导パーティション(第 1.5 阶段)中。这种架构使 GRUB 能够正确加载和引导操作システム。


