强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

GRUB2 引导管理器完全教程 / 第 1 章:GRUB2 概述

第 1 章:GRUB2 概述

1.1 什么是 GRUB2

GRUB2(GRand Unified Bootloader version 2)是 GNU 项目开发的多引导规范(Multiboot Specification)引导加载程序。它是 GRUB Legacy(0.9x)的完全重写版本,从 2002 年开始开发,2012 年发布 GRUB 2.00 正式版。

GRUB2 的核心职责是在系统加电后、操作系统内核接管之前,负责加载和移交控制权。它是连接硬件固件(BIOS/UEFI)与操作系统内核之间的桥梁。

GRUB2 vs GRUB Legacy

特性 GRUB Legacy (0.9x) GRUB2 (1.9x+)
配置文件 /boot/grub/menu.lst /boot/grub/grub.cfg
配置语言 简单命令集 完整脚本语言(支持变量、条件、循环)
文件系统支持 有限 ext2/3/4、XFS、Btrfs、ZFS、NTFS、FAT 等
UEFI 支持 不支持 完整支持
Secure Boot 不支持 通过 shim 支持
图形界面 有限 GfxMenu 主题系统
模块化 静态编译 运行时加载模块
网络引导 有限 PXE、TFTP、HTTP、NFS
动态配置 不支持 环境变量、脚本

主要特性

  1. 多架构支持:x86、x86_64、ARM、ARM64、MIPS、PowerPC、SPARC、RISC-V
  2. 多文件系统:原生支持主流文件系统,无需单独编译模块
  3. 链式加载(Chainloading):可引导其他引导加载程序(如 Windows Boot Manager)
  4. 脚本语言:支持变量赋值、条件判断、循环、函数定义
  5. 救援模式:内置命令行 Shell,可在配置损坏时手动引导
  6. 网络引导:支持 PXE、TFTP、HTTP、NFS 等网络引导协议
  7. 加密支持:支持 LUKS 加密分区的解密引导
  8. 国际化:支持多种语言和字符集

1.2 与其他引导加载程序的对比

1.2.1 GRUB2 vs systemd-boot

systemd-boot(原名 gummiboot)是 systemd 项目附带的轻量级引导加载程序,仅支持 UEFI 模式。

特性 GRUB2 systemd-boot
BIOS 支持 ✅ 完整支持 ❌ 仅 UEFI
配置复杂度 较高 极低
文件系统支持 广泛 仅 FAT(EFI 分区)
主题/图形 ✅ GfxMenu ❌ 纯文本
脚本能力 完整脚本语言
链式加载 有限
加密引导 ✅ LUKS 有限(需 unified kernel image)
自动检测 OS ✅ os-prober ❌ 手动配置
安全启动 ✅ shim ✅ shim
启动速度 稍慢 更快
维护难度 中等
适用场景 多系统、复杂需求 单系统、简单需求

1.2.2 GRUB2 vs EFISTUB

EFISTUB 不是一个独立的引导加载程序,而是直接利用 UEFI 固件能力从 EFI 分区加载内核。

特性 GRUB2 EFISTUB
额外软件 需要 GRUB 不需要
配置 grub.cfg efibootmgr
内核位置 /boot(任意分区) EFI 系统分区(FAT32)
启动参数 grub.cfg 中灵活配置 EFI 变量或自动加载
多内核管理 方便(menuentry) 需手动配置每个
initramfs 位置 任意位置 必须在 EFI 分区
调试能力 GRUB Shell 有限
Secure Boot shim 直接签名

1.2.3 GRUB2 vs rEFInd

rEFInd 是一个 UEFI 引导管理器,以图形化界面和自动检测著称。

特性 GRUB2 rEFInd
BIOS 支持
图形界面 需主题配置 开箱即用
自动检测 os-prober 自动扫描 EFI 分区
配置复杂度 中等
主题生态 丰富 丰富
脚本能力 完整 有限
多系统引导 优秀 优秀
安全启动 shim shim 或 PreLoader

1.3 引导流程详解

1.3.1 Legacy BIOS + MBR 引导流程

┌─────────────┐
│   电源开启    │
└──────┬──────┘
       ▼
┌─────────────┐
│  POST 自检   │  ← 硬件初始化
└──────┬──────┘
       ▼
┌─────────────┐
│ BIOS 固件    │  ← 读取启动顺序
└──────┬──────┘
       ▼
┌─────────────────────────────┐
│ 读取 MBR (第一扇区 512字节)  │  ← 引导扇区
└──────┬──────────────────────┘
       ▼
┌─────────────────────────────┐
│ 执行 GRUB2 Stage 1          │  ← 嵌入 MBR 中的引导代码
│ (boot.img - 446 字节)        │
└──────┬──────────────────────┘
       ▼
┌─────────────────────────────┐
│ 加载 GRUB2 Stage 1.5        │  ← 位于 MBR 后的间隙
│ (core.img)                   │     或分区头部
└──────┬──────────────────────┘
       ▼
┌─────────────────────────────┐
│ 加载 GRUB2 Stage 2           │  ← /boot/grub/ 下的模块
│ (grub.cfg + 模块)            │
└──────┬──────────────────────┘
       ▼
┌─────────────────────────────┐
│ 显示引导菜单                  │  ← 读取 grub.cfg
└──────┬──────────────────────┘
       ▼
┌─────────────────────────────┐
│ 加载内核 (vmlinuz)           │  ← 解压并加载到内存
│ 加载 initramfs              │  ← 初始内存文件系统
└──────┬──────────────────────┘
       ▼
┌─────────────────────────────┐
│ 内核接管,执行 init/systemd   │
└─────────────────────────────┘

1.3.2 UEFI + GPT 引导流程

┌─────────────┐
│   电源开启    │
└──────┬──────┘
       ▼
┌─────────────┐
│ UEFI 固件    │  ← 安全启动验证(可选)
└──────┬──────┘
       ▼
┌──────────────────────────────┐
│ 读取 EFI 启动变量             │
│ (BootOrder / BootXXXX)       │
└──────┬───────────────────────┘
       ▼
┌──────────────────────────────┐
│ 加载 EFI 应用                  │
│ /EFI/<distro>/grubx64.efi     │  ← 或 shimx64.efi (Secure Boot)
└──────┬───────────────────────┘
       ▼
┌──────────────────────────────┐
│ GRUB2 加载模块                 │
│ 读取 grub.cfg                 │
└──────┬───────────────────────┘
       ▼
┌──────────────────────────────┐
│ 显示引导菜单                   │
└──────┬───────────────────────┘
       ▼
┌──────────────────────────────┐
│ 加载内核 + initramfs           │
└──────┬───────────────────────┘
       ▼
┌──────────────────────────────┐
│ 内核接管                       │
└──────────────────────────────┘

1.3.3 关键区别总结

阶段 Legacy BIOS UEFI
固件 BIOS(16 位实模式) UEFI(32/64 位保护模式)
引导代码位置 MBR(磁盘第一扇区) EFI 系统分区(FAT32)
引导代码大小限制 446 字节 无限制
分区表 MBR(最多 4 主分区) GPT(几乎无限分区)
安全启动 不支持 Secure Boot 支持
磁盘大小限制 2 TB 无限制
启动模式 16 位 32/64 位

1.4 适用场景

1.4.1 适合使用 GRUB2 的场景

🏢 场景 1:多系统桌面 同时安装 Windows 和多个 Linux 发行版,需要一个统一的引导界面来选择启动哪个系统。GRUB2 的 os-prober 可以自动检测已安装的操作系统,链式加载(Chainload)能力可以正确引导 Windows Boot Manager。

🏢 场景 2:服务器环境 生产服务器需要可靠的引导管理。GRUB2 支持串口控制台输出,可以在无显示器的服务器上通过串口管理引导过程。救援模式可以在系统损坏时提供手动引导能力。

🏢 场景 3:需要加密引导 使用 LUKS 加密根分区时,GRUB2 可以在引导阶段解密加密分区,配合 initramfs 实现完整的加密启动链。

🏢 场景 4:网络引导/PXE 在大规模部署环境中,通过 PXE 网络引导安装操作系统。GRUB2 原生支持 TFTP、HTTP、NFS 等网络协议。

🏢 场景 5:BIOS 系统 仍在使用 Legacy BIOS 的旧硬件,GRUB2 是为数不多的现代引导加载程序选择。

1.4.2 可以考虑其他方案的场景

场景 推荐方案 原因
单 Linux 系统 + UEFI systemd-boot 或 EFISTUB 更简单、更快
需要精美图形界面 rEFInd 开箱即用的图形化
Arch Linux 最小化 systemd-boot 官方推荐
ChromeOS 风格 depthcharge 专用引导程序
嵌入式设备 U-Boot 硬件级支持

1.5 GRUB2 的组成

1.5.1 核心组件

组件 路径 说明
boot.img BIOS: MBR Stage 1 引导代码,446 字节
core.img BIOS: MBR 后间隙 Stage 1.5,包含文件系统驱动
grubx64.efi EFI 分区 UEFI 模式的 GRUB 主程序
grub.cfg /boot/grub/ 主配置文件
grubenv /boot/grub/ 环境变量存储(如默认启动项)
模块 /boot/grub/x86_64-efi/ 或 /boot/grub/i386-pc/ 可加载模块
字体 /boot/grub/fonts/ 引导界面字体
主题 /boot/grub/themes/ 主题资源

1.5.2 用户空间工具

工具 功能
grub-install 安装 GRUB 到磁盘或 EFI 分区
grub-mkconfig 生成 grub.cfg 配置文件
update-grub grub-mkconfig 的发行版封装(Debian/Ubuntu)
grub-mkimage 创建自定义 GRUB 镜像
grub-mkrescue 创建可引导的救援镜像
grub-editenv 编辑 GRUB 环境变量
grub-probe 探测设备信息
grub-mount 挂载 GRUB 支持的文件系统(调试用)

1.6 GRUB2 命名约定

1.6.1 设备命名

GRUB2 使用自己的设备命名体系,与 Linux 设备文件不同:

GRUB 设备 Linux 设备 说明
(hd0) /dev/sda 第一块磁盘
(hd1) /dev/sdb 第二块磁盘
(hd0,msdos1) /dev/sda1 MBR 磁盘第一分区
(hd0,gpt1) /dev/sda1 GPT 磁盘第一分区
(hd0,gpt2) /dev/sda2 GPT 磁盘第二分区

⚠️ 注意:GRUB2 的设备编号从 0 开始,分区编号也从 0 开始(MBR)或 1 开始(GPT)。这与 Linux 的从 1 开始不同。

1.6.2 文件路径

GRUB2 中引用文件的格式为 (设备)/路径

(hd0,gpt2)/boot/vmlinuz-6.1.0-amd64
(hd0,gpt1)/EFI/debian/grubx64.efi

如果指定了 root 可以省略设备:

set root=(hd0,gpt2)
linux /boot/vmlinuz-6.1.0-amd64 root=/dev/sda2

1.7 版本历史

版本 发布时间 主要变化
1.90 2008 首个 GRUB2 测试版
1.99 2011 大量功能完善
2.00 2012 首个正式版
2.02 2017 引入 Btrfs 子卷支持、改进 Secure Boot
2.04 2019 安全修复、NVMe 支持改进
2.06 2021 安全加固、改进 LUKS2 支持
2.12 2023 性能优化、新文件系统支持

1.8 扩展阅读


下一章:第 2 章:安装与部署