网站搜索

为什么 Fedora 创建 /boot 和 /boot/efi(但 Ubuntu 不创建)


如果你安装 Fedora,你可能会注意到它会创建一个 /boot 分区,并在 /boot/efi 挂载一个 EFI 系统分区 (ESP)。如果你使用过 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 固件是存储在您计算机主板上的软件。它初始化硬件并从 EFI 系统分区 (ESP) 加载 引导加载程序。引导加载程序是一个程序,将 Linux 内核和 initramfs 加载到内存中。

Linux 内核是操作系统的核心。它管理硬件并使用 initramfs(一个临时根文件系统)在挂载真实根文件系统之前准备系统。

一旦真实的根文件系统可用,内核便启动 systemd,这是 Fedora 中默认的系统和服务管理器。然后,Systemd 启动所需的服务,并将系统引导到其配置的目标,例如图形登录屏幕或文本控制台。

对于本文,你只需要记住两件事。EFI 系统分区(ESP) 存储 UEFI 固件用来启动引导程序的文件。/boot 目录存储 Linux 内核和启动过程中所需的其他文件。我们将在接下来的部分中更详细地解释每一个。

EFI 系统分区 (ESP) 是什么?

EFI 系统分区(ESP) 是计算机在 统一可扩展固件接口(UEFI) 模式下启动时使用的一个特殊磁盘分区。它存储 UEFI 固件启动操作系统所需的文件。大多数支持 UEFI 的操作系统,包括 Linux 和 Windows,都使用 ESP。

ESP 在几乎所有现代计算机上都使用 FAT32 文件系统。UEFI 固件的设计目的是在操作系统启动之前读取 FAT 格式的分区。这使得固件能够在不依赖 Linux、Windows 或任何其他操作系统的情况下找到并启动引导加载程序。

在 Linux 上,ESP 通常挂载在 /boot/efi。挂载点 是文件系统挂载后变得可访问的目录。一些 Linux 发行版和系统配置使用不同的挂载点,例如 /efi。确切的挂载点是一个配置选择。重要的是操作系统和引导加载程序配置为使用相同的位置。

一个典型的ESP包含每个安装在计算机上的操作系统或引导加载程序的一个目录。例如:

EFI/
├── BOOT/
├── fedora/
├── Microsoft/
└── ubuntu/

此布局允许多个操作系统共享相同的ESP。每个操作系统将其自己的启动文件存储在单独的目录中。

下一部分解释了 Fedora 在 /boot 中存储的内容,以及为什么这些文件与 ESP 分开存放。

/boot 是什么?

/boot 目录存储启动 Linux 所需的文件。这些文件由 引导加载程序 使用,引导加载程序是将操作系统加载到内存中的程序。

一个典型的 /boot 目录包含:

  • Linux 内核,它是操作系统的核心。
  • 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 内核和 initramfs 并将它们加载到内存中。然后,它将控制权转移给 Linux 内核,内核继续启动过程。

在 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 系统分区 (ESP) 的 挂载点。它不是一个独立的分区。而是 Linux 在挂载后使 ESP 可访问的目录。

与存储 Linux 内核和其他启动文件的 /boot 不同,/boot/efi 提供对 ESP 上存储的文件的访问。这些文件在启动过程的第一阶段由 UEFI 固件使用。

一个典型的 /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 内核和 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/efi、/boot 和根 (/) 文件系统。

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]

EFI 系统分区 (ESP),挂载在 /boot/efi,存储 UEFI 固件用于启动过程的 EFI 程序。/boot 分区存储 Linux 内核、initramfs 以及启动加载程序用于启动 Linux 的其他文件。

在默认的 Fedora 安装中,/boot 是一个独立的 ext4 分区,而根文件系统使用 Btrfs。这种布局在各种存储设置中提供了一致且经过充分测试的启动配置。它也很好地适用于 Fedora 的默认磁盘加密选项,因为启动文件位于加密的根文件系统之外。

Ubuntu 使用不同的默认布局。在典型的 Ubuntu 安装中,/boot 目录是根文件系统的一部分,而不是单独的分区。Fedora 和 Ubuntu 都遵循 UEFI 标准。它们只是以不同的方式组织其启动文件。

你可能还会遇到统一内核镜像 (UKIs)。UKI将Linux内核、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推荐的分区布局。

对于大多数用户来说,安装程序选择的默认分区布局是最佳选项。

Linux 发行版默认 /boot 布局
Fedora 工作站独立的 /boot 分区
Ubuntu 桌面根文件系统中的/boot目录

一些存储配置,例如磁盘加密、RAID 或逻辑卷管理器(LVM),也可能使用一个单独的 /boot 分区。是否需要取决于 Linux 发行版、引导加载程序和存储配置。

如果你决定手动分区磁盘,请遵循你的 Linux 发行版提供的建议。Fedora、Ubuntu 以及其他发行版可能会根据它们的默认文件系统、引导程序和安装程序推荐不同的布局。

最重要的一点是:Linux 或 UEFI 规范并不要求有单独的 /boot 分区。这是一个设计选择,取决于 Linux 发行版的目标和存储配置。

常见误解

误区 1:/boot 和 /boot/efi 是同一回事。

它们不同。

/boot 目录存储 Linux 内核、initramfs 以及 Linux 启动过程所需的其他文件。

/boot/efi 目录是 EFI 系统分区 (ESP) 的挂载点,该分区存储在启动过程的第一阶段使用的 EFI 程序。

误区 2:每个 Linux 发行版都会创建一个单独的 /boot 分区。

不正确。Fedora 默认会创建一个单独的 /boot 分区。Ubuntu 通常将 /boot 目录存放在根文件系统中。这两种布局都是有效的。

误区 3:每个操作系统都需要自己的 EFI 系统分区。

不正确。单个EFI系统分区可以被多个操作系统共享。每个操作系统通常会在EFI目录下的单独目录中存储自己的EFI文件。

神话 4:UEFI 需要一个单独的 /boot 分区。

不正确。UEFI 规范要求一个 EFI 系统分区 (ESP),但它不要求单独的 /boot 分区。

是否将 /boot 作为独立分区或作为根文件系统的一部分,是由 Linux 发行版或系统管理员进行的设计选择。

常见问题解答 (FAQ)

问:我可以删除 /boot 分区吗?

A:不。如果你的系统使用了单独的 /boot 分区,它包含启动 Linux 所需的文件。删除或格式化它通常会导致系统无法启动,直到恢复所需的启动文件。

问:我可以删除 EFI 系统分区吗?

A: 不。EFI 系统分区 (ESP) 存储在 UEFI 启动期间使用的 EFI 文件。删除或格式化它通常会导致已安装的操作系统无法启动,直到 ESP 及其所需文件被恢复。

问:为什么EFI系统分区使用FAT32?

A:UEFI 规范要求 EFI 系统分区使用 FAT 文件系统。在几乎所有现代计算机上,这通常是 FAT32。因为 UEFI 固件可以读取采用 FAT 格式的分区,所以它可以在操作系统加载之前找到并启动引导程序。

问:Windows 和 Linux 可以共享同一个 EFI 系统分区吗?

A: 是的。单个 EFI 系统分区可以被多个操作系统共享。每个操作系统通常会在 EFI 目录下的自己的目录中存储其 EFI 文件。这是 UEFI 系统使用的标准布局。

问:我可以使用 /efi 代替 /boot/efi 吗?

A:是的。Linux 不需要 EFI 系统分区的特定挂载点。虽然 /boot/efi 是许多 Linux 发行版使用的传统挂载点,但一些发行版和系统配置使用 /efi。确切的挂载点是一个配置选择。重要的是操作系统和引导加载程序配置为使用相同的位置。

结论

Fedora 会创建 /boot 和 /boot/efi,因为它们在启动过程中起不同的作用。

EFI 系统分区 (ESP),通常挂载在 /boot/efi,用于存储在 UEFI 引导期间使用的 EFI 程序。/boot 目录存储 Linux 内核、initramfs 以及启动 Linux 所需的其他文件。

Fedora 的默认安装会将 /boot 放在一个单独的分区上。其他 Linux 发行版可能使用不同的布局。例如,Ubuntu 通常会将 /boot 目录存储在根文件系统中。

UEFI 规范要求一个 EFI 系统分区,但 不要求单独的 /boot 分区。Linux 发行版可以自由选择最适合其默认文件系统、引导加载程序和安装设计的分区布局。

理解 /boot、/boot/efi 和 EFI 系统分区的目的,可以更容易理解 Linux 系统是如何启动的,以及为什么不同的 Linux 发行版使用不同的分区布局。

推荐阅读:

  • 在 Linux 中使用 Fdisk 创建和管理磁盘分区
  • 在 Linux 中使用 Parted 创建和管理磁盘分区
  • 如何在Linux中列出磁盘分区
  • 如何在 Linux 中将主目录移动到新分区或磁盘
  • 如何在Linux中查找已挂载的文件系统类型