1. GRUB2 概述
GRUB2(GRand Unified Bootloader version 2)是当今绝大多数 Linux 发行版默认使用的引导加载程序。它负责在计算机开机后、操作系统内核运行之前,完成硬件初始化、内核选择与加载的关键任务。理解 GRUB2 的历史渊源、与旧版 GRUB Legacy 的差异,以及它在 Linux 启动流程中的确切位置,是掌握后续主题配置与内核定制的基础。
1.1 GRUB 的历史演进
GRUB 项目由 Erich Boleyn 于 1995 年发起,最初是为 GNU Hurd 操作系统设计的引导加载程序。1999 年,GRUB 被纳入 GNU 项目,成为自由软件基金会官方推荐的引导加载程序。2002 年,GRUB 0.9x 系列(即 GRUB Legacy)成为 Linux 发行版的主流选择。
然而,GRUB Legacy 存在明显的架构限制:代码难以维护、不支持动态加载模块、对非 x86 平台支持薄弱。2002 年,GRUB 2 项目启动,采用完全重写的架构。经过近十年的开发迭代,2010 年 GRUB 2 1.98 版本被 Ubuntu 10.04 采用,标志着 GRUB 2 正式成为主流。如今,GRUB 2 已发展到 2.12 版本,支持 x86、ARM、RISC-V 等多种架构,并具备强大的主题定制能力。
- 1995 — GRUB 项目启动,目标为 GNU Hurd 提供引导支持。
- 1999 — GRUB 成为 GNU 项目官方组件,GRUB Legacy 0.9x 发布。
- 2002 — GRUB 2 项目启动,采用模块化、可扩展架构。
- 2010 — Ubuntu 10.04 默认使用 GRUB 2,标志其成为主流。
- 2024 — GRUB 2 2.12 发布,支持安全启动、LUKS2、Btrfs 快照等现代特性。
1.2 GRUB Legacy 与 GRUB 2 的核心区别
GRUB Legacy 与 GRUB 2 虽然名称相似,但内部架构差异巨大。下表从多个维度对比两者的关键区别:
| 对比维度 | GRUB Legacy | GRUB 2 |
|---|---|---|
| 架构设计 | 单体式,所有功能编译进核心 | 模块化,核心 + 动态加载模块 |
| 配置文件 | menu.lst,手动编辑 |
grub.cfg,自动生成 + 用户自定义片段 |
| 脚本支持 | 有限,仅支持简单命令 | 完整脚本语言:变量、循环、条件判断、函数 |
| 主题/图形 | 仅文本模式,无图形主题 | 支持 1024×768 及以上分辨率、背景图、字体、进度条 |
| 文件系统支持 | ext2/3、FAT、FFS | ext2/3/4、Btrfs、XFS、ZFS、NTFS、HFS+ 等 20+ 种 |
| 平台支持 | 仅 x86(BIOS) | x86 BIOS/UEFI、x86_64、ARM、RISC-V、LoongArch |
| 安全启动 | 不支持 | 支持 UEFI Secure Boot、TPM 测量 |
| 救援模式 | 命令行,功能有限 | 内置 rescue shell,支持模块加载、文件系统修复 |
grub2-install → 生成 grub.cfg。
1.3 GRUB 2 在 Linux 启动流程中的位置与作用
Linux 系统的完整启动流程可分为五个阶段,GRUB 2 占据其中最关键的第二阶段。以下 SVG 图清晰展示了从按下电源键到登录提示符的完整链路:
GRUB 2 在启动流程中承担以下核心作用:
- 硬件抽象层 — 通过自身驱动访问磁盘、文件系统,不依赖 BIOS/UEFI 的磁盘服务。
- 内核选择器 — 读取
grub.cfg配置文件,向用户展示可用的内核版本列表。 - 参数传递器 — 将用户选择的启动参数(如
quiet、single、nomodeset)传递给内核。 - initramfs 加载器 — 将初始内存文件系统(initramfs)加载到内存,供内核挂载根文件系统前使用。
- 链式加载器 — 支持加载其他操作系统引导程序(如 Windows Boot Manager、其他 Linux 发行版)。
1.4 GRUB 2 的模块化架构
GRUB 2 采用模块化设计,核心镜像 core.img 仅包含最小必要模块,其他功能(如文件系统驱动、视频驱动、网络支持)以独立 .mod 文件形式存储在 /boot/grub/ 目录下,按需加载。这种设计带来以下优势:
- 镜像体积小 — core.img 通常只有 25~50KB,适合嵌入 MBR 或 EFI 引导分区。
- 功能可扩展 — 无需重新编译核心,只需添加模块文件即可支持新文件系统或硬件。
- 按需加载 — 仅在需要时加载对应模块,减少内存占用和启动时间。
- 易于调试 — 模块独立,单个模块故障不会导致整个引导程序崩溃。
以下 SVG 图展示 GRUB 2 的模块化架构:
模块化架构使得 GRUB 2 能够灵活适应不同硬件环境。例如,在 UEFI 系统上,GRUB 2 会加载 efi_netboot 模块支持网络引导;在需要解密 LUKS 加密根分区时,加载 cryptodisk 和 luks2 模块。这种按需加载机制是 GRUB 2 相比 GRUB Legacy 最显著的架构改进。
1.5 本章小结
GRUB 2 作为现代 Linux 系统的标准引导加载程序,经历了从 GRUB Legacy 到模块化架构的重大演进。它位于 BIOS/UEFI 与 Linux 内核之间,承担硬件抽象、内核选择、参数传递和 initramfs 加载等关键职责。理解 GRUB 2 的历史背景、架构差异和启动流程位置,为后续章节的主题配置、菜单定制和故障排查奠定了坚实基础。
- GRUB 2 是 GRUB Legacy 的完全重写版本,采用模块化架构。
- GRUB 2 支持 UEFI、安全启动、20+ 文件系统、图形主题等现代特性。
- 在启动流程中,GRUB 2 位于 BIOS/UEFI 之后、Linux 内核之前。
- 模块化设计使 core.img 保持小巧,功能通过
.mod文件按需扩展。 - 配置文件
grub.cfg通常由grub-mkconfig自动生成,用户可通过/etc/default/grub和/etc/grub.d/自定义。