3. 引导加载程序概览

引导加载程序(Boot Loader)是固件与操作系统内核之间的“交接人”。固件完成自检并找到可引导设备后,真正决定“启动哪个内核、传什么参数、加载哪些模块”的,是引导加载程序。理解不同引导器的架构差异,是后续做多 OS 启动编排与故障恢复的基础。

一、核心原理:引导器在启动链中的位置

无论哪种引导器,其职责都可以归纳为四步:定位内核、准备运行环境、传递参数、移交控制权。差异在于它们运行在什么环境、如何解析配置、以及是否依赖其他引导器。

传统 BIOS 环境下,引导器通常把自身的一部分写入 MBR 或分区引导记录,再加载第二阶段代码;UEFI 环境下,引导器本身就是一个 EFI 应用程序(.efi 文件),由固件直接加载。这一区别直接决定了 GRUB2、systemd-boot、rEFInd 等在现代机器上的部署方式。

常见引导加载程序架构与启动链位置 固件层 Legacy BIOS / MBR UEFI 固件 EFI 系统分区 ESP NVRAM 启动项 引导加载程序层 GRUB2 BIOS + UEFI 脚本化配置 systemd-boot 仅 UEFI 极简配置 rEFInd 仅 UEFI 自动探测 Windows BCD BIOS + UEFI bootmgr 链 LILO 仅 BIOS 静态映射 内核与初始化层 Linux Kernel + initramfs Windows ntoskrnl.exe systemd / init 实线表示引导器将控制权移交内核;UEFI 引导器本身是 ESP 中的 .efi 应用 GRUB2 可链式加载其他引导器,是跨 OS 编排中最常用的“中间层”

二、主流引导器对比与适用场景

不同引导器的设计哲学差异很大: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 命令 弱,静态写入 老旧系统、教学演示

三、方法流程:如何选择与部署引导器

  1. 确认固件模式:在 Linux 下执行 [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS,决定可用引导器范围。
  2. 确认分区布局:UEFI 必须有 FAT32 的 ESP 分区;BIOS 需要可引导的 MBR 或 BIOS Boot 分区。
  3. 选择主引导器:单 Linux 且 UEFI 优先 systemd-boot;多发行版或需要复杂菜单选 GRUB2;桌面多系统且希望自动发现选 rEFInd。
  4. 安装与注册:UEFI 下用 efibootmgr 写入 NVRAM 启动项;GRUB2 用 grub-install 与 grub-mkconfig。
  5. 验证与备份:重启验证菜单项,备份 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 后修复。
故障恢复时,先确认“固件是否还能看到引导器”,再确认“引导器是否还能找到内核”。这两层分开排查,能避免在错误层面反复重装。