systemd-boot
(也常被称为system-boot
或Gummiboot
,它是systemd-boot
的前身) 和 GRUB (GNU GRand Unified Bootloader) 都是 Linux 系统中常用的引导加载程序(Bootloader)。它们的主要职责是在计算机启动时加载操作系统的内核。尽管目标相同,但它们的设计理念、功能集和适用场景有很大不同。
GRUB (GNU GRand Unified Bootloader)是什么?
GRUB 是最常见和功能最强大的引导加载程序之一。它支持多种文件系统、多种操作系统(Linux、Windows、macOS 等),并且提供了丰富的配置选项和强大的脚本功能。它可以在 BIOS/MBR (Legacy Boot) 和 UEFI/GPT (EFI Boot) 两种引导模式下工作。大多数主流的 Linux 发行版(如 Ubuntu, Fedora, Debian, Arch Linux 等)默认都使用 GRUB。
优点:
- 兼容性极佳:
- 同时支持 BIOS 和 UEFI 引导: 可以在几乎所有现代和老旧的硬件上工作。
-
支持多种文件系统: 能够直接读取各种文件系统(如 ext2/3/4, XFS, Btrfs, FAT, NTFS 等)上的内核和 initramfs 文件,无需专门的引导分区。
-
多操作系统引导能力强: 可以轻松地检测并引导同一台机器上的多个操作系统(包括 Linux、Windows、macOS 等),并提供一个友好的菜单供用户选择。
-
功能丰富:
- 强大的脚本能力: 允许用户编写复杂的引导脚本,实现高级的引导逻辑。
-
模块化设计: 具有高度模块化的架构,可以根据需要加载不同的模块(如文件系统驱动、加密支持等)。
-
恢复和调试功能: 提供了命令行界面,可以在引导过程中进行调试和修复。
-
主题和自定义: 支持图形主题,可以自定义引导菜单的外观。
-
广泛使用和社区支持: 由于其普及性,GRUB 拥有庞大的用户群和完善的文档,遇到问题时容易找到解决方案。
缺点:
- 复杂性高:
- 配置文件复杂: grub.cfg 配置文件通常由脚本自动生成,但手动编辑起来相对复杂,容易出错。
-
体积较大: 相比其他引导加载程序,GRUB 的体积和代码量较大,加载时间可能稍长(尽管在现代硬件上差异不大)。
-
更新管理: 每次内核更新时,通常需要重新生成 GRUB 配置,虽然大多数发行版会自动处理,但有时也会出现问题。
systemd-boot (以前的 Gummiboot) 是什么?
systemd-boot 是 systemd 项目的一部分,是一个简单、轻量级的 UEFI 引导管理器。它的设计理念是“只做一件事,并把它做好”:即在 UEFI 系统上快速引导操作系统。它不是一个通用的引导加载程序,因为它仅支持 UEFI 引导,并且无法直接读取复杂的文件系统。它通常用于引导位于 EFI 系统分区 (ESP) 上的 Linux 内核(通常是统一内核镜像,Unified Kernel Image, UKI)或 EFI 应用程序。
优点:
- 简单且快速:
- 配置简单: 配置文件非常简单,通常是纯文本文件,易于阅读和手动编辑。
-
引导速度快: 由于代码量少,功能精简,在 UEFI 系统上引导速度通常比 GRUB 快。
-
易于维护: 不需要复杂的脚本来生成配置,维护起来更简单。
-
符合 UEFI 标准: 紧密遵循 UEFI 规范,与 UEFI 固件的集成度高。
-
原生支持统一内核镜像 (UKI): 越来越多地被用于引导包含内核、initramfs 和内核命令行参数的单个 EFI 可执行文件(UKI),简化了引导过程。
缺点:
- 仅支持 UEFI 引导: 这是最大的限制。如果您的机器使用传统的 BIOS/MBR 引导模式,或者需要引导不支持 UEFI 的系统,systemd-boot 就无法使用。
-
功能有限:
- 文件系统支持有限: 只能直接读取 FAT32 文件系统(这是 ESP 的标准文件系统),不能直接从 ext4、Btrfs 等文件系统加载内核。这意味着内核和 initramfs 必须位于 ESP 上,或者通过 UKI 方式整合。
-
多操作系统引导能力弱: 尽管可以引导其他操作系统(如 Windows),但通常是通过链式引导 (chainload) Windows 的引导管理器来实现,不像 GRUB 那样可以统一管理和显示多个操作系统的引导项。
-
缺乏高级功能: 没有 GRUB 那样强大的脚本功能、复杂的模块化支持或丰富的调试选项。
-
用户群和文档相对较少: 虽然在 Arch Linux 社区中越来越受欢迎,但相比 GRUB,其用户群和非官方文档资源仍相对较少。
对比
特性 | GRUB | systemd-boot |
---|---|---|
引导模式 | BIOS (MBR) 和 UEFI (GPT) | 仅限 UEFI (GPT) |
文件系统支持 | 广泛支持多种 Linux 文件系统、FAT、NTFS 等 | 仅支持 FAT32 (ESP) |
配置 | 复杂脚本生成,手动修改困难 | 简单纯文本文件,易于手动编辑 |
引导速度 | 相对较慢(但通常可忍受) | 相对较快 |
多系统引导 | 强大,统一管理且显示多种操作系统 | 简单,主要通过链式引导,管理能力有限 |
功能/定制 | 功能丰富,支持插件、模块、主题 | 极简,功能受限,侧重快速引导 |
体积 | 较大 | 小巧轻量 |
适用场景差异 | 传统 BIOS 机器,多系统启动,需更高灵活引导功能 | 现代 UEFI 机器,追求极致简洁和快速引导 |
EFI(ESP) 分区是什么?为什么引导依赖它
ESP 是一个特殊的、独立的分区,格式通常为 FAT32。
它是 UEFI (Unified Extensible Firmware Interface) 固件用于查找和加载操作系统引导加载程序的标准位置。— 这是现代电脑的主流
UEFI 固件会扫描磁盘上的 ESP,并查找其中的 .efi 引导文件来启动系统。
Grub 不依赖EFI(ESP)分区也行,但是 Systemd-boot 必须依赖EFI分区。在严格模式下,这句话是错的,为什么错?
因为决定是否使用 EFI(ESP) 分区引导的【并非是】软件(Grub/Systemd-boot),【而是】由主板设置的 UEFI 启动决定的。(由主板设置的 (传统)BIOS/MBR 引导 还是 UEFI/GPT 引导 决定)
如果主板设置的是 UEFI,那么 Grub 也得要有 EFI(ESP) 分区才行。但是现代的主板(一般)都支持混合启动方式(多支持),所以,使用Grub时候,没有 EFI(ESP) 分区也可以启动。但是,你使用的就不再是 UEFI 了。
而 Systemd-boot 要求 UEFI 启动,所以就会容易给人一种错觉 > Grub 不依赖 EFI(ESP) 分区启动,而 Systemd-boot 依赖 EFI(ESP) 分区启动。
一旦你这样错误地认为,那么当你在只支持 UEFI 的电脑(或者设置了只使用UEFI启动),使用 Grub ,但不分配 EFI(ESP) 分区用来记录启动文件时,就会无法引导到系统~~甚至安装都无法完成。
目录情况
GRUB:
BIOS/MBR 引导模式下:
GRUB 会将一部分代码写入 MBR (Master Boot Record),另一部分(核心镜像)通常放在 /boot
目录下的 /boot/grub
文件夹中。
UEFI/GPT 引导模式下
GRUB 的 EFI 可执行文件 (grubx64.efi
或 grubia32.efi
) 会被安装到 ESP 中(通常是 /EFI/GRUB
或 /EFI/Linux发行版名
目录下)。
虽然 GRUB 的核心配置文件 grub.cfg
和模块通常仍然位于 Linux 根分区下的 /boot/grub
目录中,但 UEFI 固件首先会从 ESP 启动 grubx64.efi
,然后由这个 EFI 文件加载 /boot/grub/grub.cfg
。
Systemd-boot:
Systemd-boot
是一个 UEFI 引导管理器,它必须运行在 EFI 系统分区(ESP)上。ESP 是一个特殊的 FAT32 格式分区,被 UEFI 固件识别为存储引导加载程序的地方。systemd-boot
的可执行文件和所有引导条目配置都直接放在 ESP 上。
发表回复