Systemd-boot引导和Grub引导有什么区别?EFI(ESP) 分区是什么?为什么引导依赖它

systemd-boot (也常被称为 system-bootGummiboot,它是 systemd-boot 的前身) 和 GRUB (GNU GRand Unified Bootloader) 都是 Linux 系统中常用的引导加载程序(Bootloader)。它们的主要职责是在计算机启动时加载操作系统的内核。尽管目标相同,但它们的设计理念、功能集和适用场景有很大不同。


Cover

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.efigrubia32.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 上。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注