如果你安装过 Fedora,可能会注意到它创建了一个 /boot 分区,并将一个 EFI System Partition (ESP) 挂载到 /boot/efi。如果你用过 Ubuntu 或其他 Linux 发行版,这个布局可能看起来不太一样。有没有想过 为什么 Fedora 会同时创建 /boot 和 /boot/efi?
答案是,这两个位置在启动过程中服务于不同的目的。启动过程 是计算机启动并加载操作系统的一系列步骤。虽然它们协同工作,但 /boot 和 /boot/efi 存储的是不同类型的文件。
这种布局并非 Fedora 独有。它是组织启动 Linux 系统所需文件的几种有效方式之一。不同的 Linux 发行版会根据其默认文件系统、引导加载程序和安装布局做出不同的设计选择。
在本指南中,你将了解什么是 EFI 系统分区、/boot 和 /boot/efi 的用途、为什么 Fedora 默认同时创建它们,以及何时才真正需要独立的 /boot 分区。
Linux 启动过程简介
当你按下电源按钮时,计算机并不会立即启动 Linux。它会遵循一系列称为 启动过程 的步骤。每一步都为下一步做准备,直到操作系统准备就绪。
在使用 统一可扩展固件接口 (UEFI) 的现代计算机上,该过程通常如下所示:
Power On
↓
UEFI firmware
↓
EFI System Partition (ESP)
↓
Bootloader
↓
Linux kernel
↓
initramfs
↓
Root filesystem
↓
systemd
↓
Login screen or text console
对于不了解的人来说,UEFI firmware 是存储在计算机主板上的软件。它初始化硬件并从 EFI System Partition (ESP) 加载 引导加载程序。引导加载程序 是一个将 Linux kernel 和 initramfs 加载到内存中的程序。
Linux kernel 是操作系统的核心。它管理硬件,并使用 initramfs(一个临时根文件系统)在挂载真正的根文件系统之前准备系统。
一旦真正的根文件系统可用,内核就会启动 systemd,即 Fedora 中的默认系统和服务管理器。Systemd 随后启动所需的服务,并将系统带到其配置的目标,例如图形登录屏幕或文本控制台。
对于本文,你只需要记住两件事。EFI System Partition (ESP) 存储 UEFI firmware 用于启动引导加载程序的文件。/boot 目录存储 Linux kernel 和启动期间所需的其他文件。我们将在接下来的部分中更详细地解释每一个。
什么是 EFI System Partition (ESP)?
EFI System Partition (ESP) 是一个特殊的磁盘分区,用于以 统一可扩展固件接口 (UEFI) 模式启动的计算机。它存储 UEFI firmware 启动操作系统所需的文件。大多数支持 UEFI 的操作系统,包括 Linux 和 Windows,都使用 ESP。
在几乎所有现代计算机上,ESP 使用 FAT32 文件系统。UEFI firmware 被设计为在操作系统启动之前就能读取 FAT-formatted 的分区。这使得固件能够在不依赖 Linux、Windows 或任何其他操作系统的情况下找到并启动引导加载程序。
在 Linux 上,ESP 通常挂载在 /boot/efi 下。挂载点 是一个目录,文件系统在挂载后可以通过该目录访问。某些 Linux 发行版和系统配置使用不同的挂载点,例如 /efi。确切的挂载点是一个配置选择。重要的是操作系统和引导加载程序配置为使用相同的位置。
一个典型的 ESP 包含每个操作系统或引导加载程序的一个目录。例如:
EFI/
├── BOOT/
├── fedora/
├── Microsoft/
└── ubuntu/
这种布局允许多个操作系统共享同一个 ESP。每个操作系统将其自己的启动文件存储在单独的目录中。
下一节将解释 Fedora 在 /boot 中存储了什么,以及为什么这些文件与 ESP 分开存放。
什么是 /boot?
/boot 目录存储启动 Linux 所需的文件。这些文件由 引导加载程序 使用,引导加载程序是将操作系统加载到内存中的程序。
一个典型的 /boot 目录包含:
- Linux kernel,即操作系统的核心。
- initramfs,即早期启动期间使用的临时根文件系统。
- Fedora 上的 GRUB 配置,它告诉引导加载程序如何启动已安装的操作系统。
- 其他与启动相关的文件,例如内核配置和
System.map文件。
例如:
$ sudo tree /boot
/boot
├── config-6.17.1-300.fc43.x86_64
├── efi
│ ├── EFI
│ │ ├── BOOT
│ │ │ ├── BOOTIA32.EFI
│ │ │ ├── BOOTX64.EFI
│ │ │ ├── fbia32.efi
│ │ │ └── fbx64.efi
│ │ └── fedora
│ │ ├── BOOTIA32.CSV
│ │ ├── BOOTX64.CSV
│ │ ├── gcdia32.efi
│ │ ├── gcdx64.efi
│ │ ├── grub.cfg
│ │ ├── grubia32.efi
│ │ ├── grubx64.efi
│ │ ├── mmia32.efi
│ │ ├── mmx64.efi
│ │ ├── shim.efi
│ │ ├── shimia32.efi
│ │ └── shimx64.efi
│ ├── mach_kernel
│ └── System
│ └── Library
│ └── CoreServices
│ └── SystemVersion.plist
├── grub2
│ ├── earlyboot.cfg
│ ├── fonts
│ │ └── unicode.pf2
│ ├── grub.cfg
│ └── grubenv
├── initramfs-0-rescue-9c1aaf08fa134981ae13a25cb03c7af8.img
├── initramfs-6.17.1-300.fc43.x86_64.img
├── loader
│ └── entries
│ ├── 9c1aaf08fa134981ae13a25cb03c7af8-0-rescue.conf
│ └── 9c1aaf08fa134981ae13a25cb03c7af8-6.17.1-300.fc43.x86_64.conf
├── lost+found
├── symvers-6.17.1-300.fc43.x86_64.xz -> /lib/modules/6.17.1-300.fc43.x86_64/symvers.xz
├── System.map-6.17.1-300.fc43.x86_64
├── vmlinuz-0-rescue-9c1aaf08fa134981ae13a25cb03c7af8
└── vmlinuz-6.17.1-300.fc43.x86_64
13 directories, 31 files
你可能注意到 efi 目录出现在 /boot 内部。这是因为 /boot/efi 是一个挂载点。efi 下显示的文件存储在 EFI 系统分区上,而不是 /boot 文件系统本身。
当你启动计算机时,引导加载程序从 /boot 读取 Linux kernel 和 initramfs 并将它们加载到内存中。然后它将控制权移交给 Linux kernel,后者继续启动过程。
在 Fedora 上,/boot 默认存储在一个独立的 ext4 分区上,而根文件系统使用 Btrfs。这种布局在广泛的存储设置中提供了一致的启动配置。
findmnt /boot
我的 Fedora 系统上的示例输出:
TARGET SOURCE FSTYPE
/boot /dev/sda2 ext4
这确认了 /boot 是从其自己的文件系统挂载的,而不仅仅是根文件系统内的另一个目录。
并非每个 Linux 发行版都创建独立的 /boot 分区。例如,Ubuntu 通常将 /boot 目录存储在根文件系统内。两种布局都是有效的。区别在于设计选择,而不是 Linux 或 UEFI 的要求。
什么是 /boot/efi?
/boot/efi 目录是 EFI System Partition (ESP) 的 挂载点。它不是一个独立的分区。相反,它是 Linux 在挂载 ESP 后使其可访问的目录。
与存储 Linux kernel 和其他启动文件的 /boot 不同,/boot/efi 提供对存储在 ESP 上的文件的访问。这些文件在启动过程的第一阶段由 UEFI firmware 使用。
一个典型的 /boot/efi 目录如下所示:
/boot/efi/
├── EFI
│ ├── BOOT
│ │ ├── BOOTIA32.EFI
│ │ ├── BOOTX64.EFI
│ │ ├── fbia32.efi
│ │ └── fbx64.efi
│ └── fedora
│ ├── BOOTIA32.CSV
│ ├── BOOTX64.CSV
│ ├── gcdia32.efi
│ ├── gcdx64.efi
│ ├── grub.cfg
│ ├── grubia32.efi
│ ├── grubx64.efi
│ ├── mmia32.efi
│ ├── mmx64.efi
│ ├── shim.efi
│ ├── shimia32.efi
│ └── shimx64.efi
├── mach_kernel
└── System
└── Library
└── CoreServices
└── SystemVersion.plist
7 directories, 18 files
每个操作系统将其自己的启动文件存储在单独的目录中。这允许多个操作系统共享同一个 EFI 系统分区而不会相互干扰。
ESP 通常包含 EFI 程序,例如引导加载程序,以及 UEFI 启动所需的其他文件。Linux kernel 和 initramfs 通常 存储在 /boot 中,而不是 ESP 上。
你可以验证 EFI 系统分区是单独挂载的:
sudo findmnt /boot/efi
示例输出:
TARGET SOURCE FSTYPE OPTIONS
/boot/efi /dev/sda1 vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro
这确认了 /boot/efi 是一个从其自己的分区挂载的独立 FAT32 文件系统。
虽然 /boot/efi 是 Linux 上最常见的挂载点,但它并不是唯一的。某些 Linux 发行版和系统配置将 EFI 系统分区挂载在 /efi 下。挂载点是一个配置选择。重要的是操作系统和引导加载程序配置为使用相同的位置。
现在你已经了解了 /boot 和 /boot/efi 的用途,下一节将解释为什么 Fedora 默认同时使用两者。
为什么 Fedora 会同时创建 /boot 和 /boot/efi?
Fedora 同时创建 /boot 和 /boot/efi,因为它们在启动过程中服务于不同的目的。
你可以使用以下命令查看 Fedora 的默认分区布局:
sudo lsblk -f
示例输出:
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1 vfat FAT32 F822-70EF 579.5M 3% /boot/efi
├─sda2 ext4 1.0 a1dd3397-1af4-44c8-bc6c-6f18001eafb3 1.4G 18% /boot
└─sda3 btrfs fedora 509e9c4f-9de2-44ca-80dc-1c30d21c5905 25.5G 13% /home
/
sr0
zram0 swap 1 zram0 164d2127-d45d-456a-bc23-a1b7b6bae6d9 [SWAP]
挂载在 /boot/efi 下的 EFI System Partition (ESP) 存储 UEFI firmware 用于启动过程的 EFI 程序。/boot 分区存储 Linux kernel、initramfs 以及引导加载程序用于启动 Linux 的其他文件。
在默认的 Fedora 安装中,/boot 是一个独立的 ext4 分区,而根文件系统使用 Btrfs。这种布局在广泛的存储设置中提供了一致且经过充分测试的启动配置。它还与 Fedora 的默认磁盘加密选项配合良好,因为启动文件保留在加密的根文件系统之外。
Ubuntu 使用不同的默认布局。在典型的 Ubuntu 安装中,/boot 目录是根文件系统的一部分,而不是独立的分区。Fedora 和 Ubuntu 都遵循 UEFI 标准。它们只是以不同的方式组织启动文件。
你可能还会遇到 统一内核映像 (UKI)。UKI 将 Linux kernel、initramfs 和相关的启动信息组合成一个单一的 EFI 可执行文件。UKI 可以直接存储在 EFI 系统分区上,从而减少启动过程中涉及的文件数量。Fedora 正在逐步采用 UKI,但在撰写本指南时,独立的 /boot 分区仍然是默认布局。
UEFI 规范不要求独立的 /boot 分区。Linux 发行版可以自由选择最适合其设计目标和默认存储配置的分区布局。
你需要独立的 /boot 分区吗?
在很多情况下,不需要。安装或运行 Linux 并不需要独立的 /boot 分区。许多 Linux 发行版,包括 Ubuntu,默认将 /boot 目录存储在根文件系统内。
要验证 Ubuntu 将 /boot 存储在 / 内,请运行:
sudo findmnt /
你会看到类似下面的输出:
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda2 ext4 rw,relatime
现在运行:
sudo findmnt /boot
在默认的 Ubuntu 安装中,如果没有独立的 /boot 分区,上述命令将 不产生输出。这意味着 /boot 不是一个独立的挂载点。
你也可以使用以下命令验证:
sudo lsblk -f
输出中不会看到任何启动分区的条目。
Fedora 采取了不同的方法。其默认安装会创建一个独立的 /boot 分区,因为这符合 Fedora 推荐的分区布局。
对于大多数用户来说,安装程序选择的默认分区布局是最佳选择。
某些存储配置,例如磁盘加密、RAID 或逻辑卷管理器 (LVM),也可能使用独立的 /boot 分区。是否需要取决于 Linux 发行版、引导加载程序和存储配置。
如果你决定手动分区,请遵循你的 Linux 发行版提供的建议。Fedora、Ubuntu 和其他发行版可能会根据其默认文件系统、引导加载程序和安装程序推荐不同的布局。
最重要的一点是:独立的 /boot 分区不是 Linux 或 UEFI 规范所要求的。这是一个设计选择,取决于 Linux 发行版的目标和存储配置。
常见误解
误解 1:/boot 和 /boot/efi 是同一个东西。
它们是不同的。
/boot 目录存储 Linux kernel、initramfs 以及 Linux 启动过程中所需的其他文件。
/boot/efi 目录是 EFI System Partition (ESP) 的挂载点,该分区存储启动过程第一阶段使用的 EFI 程序。
误解 2:每个 Linux 发行版都会创建独立的 /boot 分区。
不对。Fedora 默认创建独立的 /boot 分区。Ubuntu 通常将 /boot 目录存储在根文件系统内。两种布局都是有效的。
误解 3:每个操作系统都需要自己的 EFI 系统分区。
不对。单个 EFI 系统分区可以被多个操作系统共享。每个操作系统通常将其 EFI 文件存储在 EFI 目录下的单独子目录中。
误解 4:UEFI 需要独立的 /boot 分区。
不对。UEFI 规范要求一个 EFI System Partition (ESP),但它不要求独立的 /boot 分区。
/boot 是独立分区还是根文件系统的一部分,是 Linux 发行版或系统管理员做出的设计选择。
常见问题解答
问:我可以删除 /boot 分区吗?
答:不能。如果你的系统使用独立的 /boot 分区,它包含启动 Linux 所需的文件。删除或格式化它通常会导致系统无法启动,直到恢复所需的启动文件。
问:我可以删除 EFI 系统分区吗?
答:不能。EFI System Partition (ESP) 存储 UEFI 启动期间使用的 EFI 文件。删除或格式化它通常会导致已安装的操作系统无法启动,直到 ESP 及其所需文件被恢复。
问:为什么 EFI 系统分区使用 FAT32?
答:UEFI 规范要求 EFI 系统分区使用 FAT 文件系统。在几乎所有现代计算机上,这是 FAT32。因为 UEFI firmware 可以读取 FAT-formatted 的分区,它可以在操作系统加载之前定位并启动引导加载程序。
问:Windows 和 Linux 可以共享同一个 EFI 系统分区吗?
答:可以。单个 EFI 系统分区可以被多个操作系统共享。每个操作系统通常将其 EFI 文件存储在 EFI 目录下的自己的目录中。这是 UEFI 系统使用的标准布局。
问:我可以使用 /efi 而不是 /boot/efi 吗?
答:可以。Linux 不要求 EFI 系统分区有特定的挂载点。虽然 /boot/efi 是许多 Linux 发行版使用的传统挂载点,但某些发行版和系统配置使用 /efi 代替。确切的挂载点是一个配置选择。重要的是操作系统和引导加载程序配置为使用相同的位置。
结论
Fedora 同时创建 /boot 和 /boot/efi,因为它们在启动过程中服务于不同的目的。
通常挂载在 /boot/efi 下的 EFI System Partition (ESP) 存储 UEFI 启动期间使用的 EFI 程序。/boot 目录存储 Linux kernel、initramfs 以及启动 Linux 所需的其他文件。
Fedora 的默认安装将 /boot 放在独立的分区上。其他 Linux 发行版可能使用不同的布局。例如,Ubuntu 通常将 /boot 目录存储在根文件系统内。
UEFI 规范要求一个 EFI 系统分区,但它 不 要求独立的 /boot 分区。Linux 发行版可以自由选择最适合其默认文件系统、引导加载程序和安装设计的分区布局。
理解 /boot、/boot/efi 和 EFI 系统分区的用途,可以更容易地理解 Linux 系统如何启动,以及为什么不同的 Linux 发行版使用不同的分区布局。
推荐阅读:




