3. 引导加载程序概览
引导加载程序(Boot Loader)是固件与操作系统内核之间的“交接人”。固件完成自检并找到可引导设备后,真正决定“启动哪个内核、传什么参数、加载哪些模块”的,是引导加载程序。理解不同引导器的架构差异,是后续做多 OS 启动编排与故障恢复的基础。
一、核心原理:引导器在启动链中的位置
无论哪种引导器,其职责都可以归纳为四步:定位内核、准备运行环境、传递参数、移交控制权。差异在于它们运行在什么环境、如何解析配置、以及是否依赖其他引导器。
传统 BIOS 环境下,引导器通常把自身的一部分写入 MBR 或分区引导记录,再加载第二阶段代码;UEFI 环境下,引导器本身就是一个 EFI 应用程序(.efi 文件),由固件直接加载。这一区别直接决定了 GRUB2、systemd-boot、rEFInd 等在现代机器上的部署方式。
二、主流引导器对比与适用场景
不同引导器的设计哲学差异很大:GRUB2 追求“万能”,systemd-boot 追求“简单”,rEFInd 追求“自动发现”,Windows BCD 追求“与 Windows 深度绑定”,LILO 则是历史遗留的静态方案。
| 引导器 | 固件支持 | 配置方式 | 多 OS 能力 | 典型场景 |
|---|---|---|---|---|
| GRUB2 | BIOS + UEFI | /boot/grub/grub.cfg,脚本生成 | 强,可链式加载 | Linux 发行版默认、复杂多系统 |
| systemd-boot | 仅 UEFI | ESP 下 loader/entries/*.conf | 中,需手动或自动生成条目 | Arch、Fedora 等现代 UEFI 系统 |
| rEFInd | 仅 UEFI | refind.conf + 自动扫描 | 强,自动发现内核 | 多 Linux + Windows 混合桌面 |
| Windows BCD | BIOS + UEFI | bcdedit 编辑 BCD 存储 | 弱,主要管理 Windows | Windows 为主、需引导 Linux 时 |
| LILO | 仅 BIOS | /etc/lilo.conf + lilo 命令 | 弱,静态写入 | 老旧系统、教学演示 |
三、方法流程:如何选择与部署引导器
- 确认固件模式:在 Linux 下执行
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS,决定可用引导器范围。 - 确认分区布局:UEFI 必须有 FAT32 的 ESP 分区;BIOS 需要可引导的 MBR 或 BIOS Boot 分区。
- 选择主引导器:单 Linux 且 UEFI 优先 systemd-boot;多发行版或需要复杂菜单选 GRUB2;桌面多系统且希望自动发现选 rEFInd。
- 安装与注册:UEFI 下用
efibootmgr写入 NVRAM 启动项;GRUB2 用grub-install与grub-mkconfig。 - 验证与备份:重启验证菜单项,备份 ESP 与配置文件,记录
efibootmgr -v输出。
# 查看当前 UEFI 启动项
efibootmgr -v
# 安装 GRUB2 到 UEFI 系统
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
# 重新生成 GRUB 配置
grub-mkconfig -o /boot/grub/grub.cfg
# systemd-boot 安装(Arch 示例)
bootctl install
bootctl list
四、案例与场景:三系统笔记本的引导编排
一台笔记本同时安装 Windows 11、Ubuntu 与 Arch,UEFI 启动。常见做法是:以 GRUB2 作为主引导器,Ubuntu 安装时把 GRUB 写入 ESP;GRUB 的 os-prober 自动发现 Windows 与 Arch,生成菜单项。若希望界面更现代,可改用 rEFInd 作为顶层菜单,由它分别加载 Windows Boot Manager、Ubuntu 的 GRUB 和 Arch 的 systemd-boot。
在 UEFI 多系统中,ESP 分区通常只有 100–500 MB。安装多个引导器时要注意空间,避免因 ESP 满导致内核或 initramfs 更新失败。
五、误区与复盘
- 误区一:GRUB2 配置直接手改 grub.cfg。该文件由脚本生成,系统更新后会被覆盖。应修改
/etc/default/grub与/etc/grub.d/,再执行grub-mkconfig。 - 误区二:UEFI 下仍用 BIOS 思路修复。UEFI 启动依赖 NVRAM 启动项与 ESP 中的 .efi 文件,修复时应先检查
efibootmgr与 ESP 挂载。 - 误区三:LILO 仍适合新系统。LILO 不支持 UEFI,且内核更新后必须重新运行
lilo,否则无法启动,现代环境应优先 GRUB2 或 systemd-boot。 - 误区四:Windows 更新后 Linux 菜单消失。Windows 可能重置 BCD 启动顺序,需用
efibootmgr调整 BootOrder,或从固件启动菜单进入 Linux 后修复。
故障恢复时,先确认“固件是否还能看到引导器”,再确认“引导器是否还能找到内核”。这两层分开排查,能避免在错误层面反复重装。