EFI system partition (简体中文)

From ArchWiki

Tango-preferences-desktop-locale.png本文或本节需要翻译。要贡献翻译,请访问简体中文翻译团队Tango-preferences-desktop-locale.png

附注: 请使用模板的第一个参数进行更详细的指示。(在 Talk:EFI system partition (简体中文)# 中讨论)

EFI 系统分区(也称为 ESP)是一个与操作系统无关的分区,其中存储了由 UEFI 固件启动的 EFI 引导加载器、应用程序和驱动,是 UEFI 启动所必须的。

检查现有的分区

如果你正将 Arch Linux 安装到支持 UEFI 且已安装操作系统的计算机上,例如与 Windows 10 双启动,那么你很可能已有 EFI 系统分区。

要查看磁盘分区表和系统分区,以 root 的身份对你想要启动的磁盘使用 fdisk

# fdisk -l /dev/sdx

命令将返回:

  • 磁盘的分区表:如果分区表是 GPT,则会显示 Disklabel type: gpt;如果是 MBR,则会显示 Disklabel type: dos
  • 磁盘上分区的列表:在列表中搜索 EFI 系统分区,它通常大小不小于 100 MiB,且类型为 EFI SystemEFI (FAT-12/16/32)。要确认这个分区是 ESP,mount 它,然后看看是否包含一个名为 EFI 的目录,如果有,那这肯定就是 ESP。
提示: 要判断是 FAT12、FAT16 还是 FAT32 文件系统,参阅 FAT#Detecting FAT type
警告: 双启动时不要重新格式化 ESP,因为它可能包含启动其他操作系统所需的文件。

如果你找到了现有的 EFI 系统分区,前往#挂载分区,否则,你将需要创建一个,前往#创建分区

创建分区

下两节介绍如何创建 EFI 系统分区(ESP)。

警告: EFI 系统分区必须是磁盘主要分区表上的物理分区,不能处于 LVM 或软件 RAID 等等之下。

分区大小应足以储存启动加载器和启动所需要的其他文件。

为避免与其他操作系统的互操作问题[1][2],大小最好不小于 300 MiB。对于早期和/或古怪的 UEFI 实现,可能最少需要 512 MiB。[3]如果这些问题都不相关,分区大小最小可达 2 MiB,此时只能放得下启动加载器。

GPT 分区磁盘

GUID Partition Table 中 EFI 系统分区以 分区类型 GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B 标识。

从以下方法中任选其一在 GPT 分区的磁盘上创建 ESP:

  • fdisk:创建分区类型为 EFI System 的分区。
  • gdisk:创建分区类型为 EF00 的分区。
  • GNU Parted:创建文件系统类型为 fat32 的分区,并设置 esp 标志。

创建分区之后,应当格式化为一种文件系统。前往#格式化分区

MBR 分区磁盘

注意:

另请参阅 Partitioning#Choosing between GPT and MBR 查看 GPT 的优点。

Master Boot Record 中 EFI 系统分区以 partition type ID EF 标识。

从以下方法中任选其一在 MBR 分区的磁盘上创建 ESP:

  • fdisk: 创建一个分区类型为 EFI (FAT-12/16/32) 的主分区。
  • GNU Parted: 创建文件系统类型为 fat32 的分区,并设置 esp 标志。

创建分区之后,应当格式化为一种文件系统。前往#格式化分区

格式化分区

UEFI 规范要求支持 FAT12、FAT16 和 FAT32 文件系统(参见 UEFI specification version 2.9, section 13.3.1.1),但任何合规的厂商都可以支持额外的文件系统。例如,Apple Mac 的固件支持 HFS+ 文件系统。

为避免与其他操作系统的潜在问题,同时既然 UEFI 规范声称 UEFI "encompasses the use of FAT32 for a system partition, and FAT12 or FAT16 for removable media"[4],建议使用 FAT32。使用 dosfstools 中的 mkfs.fat(8) 工具:

# mkfs.fat -F 32 /dev/sdxY

如果你收到消息 WARNING: Not enough clusters for a 32 bit FAT!,运行 mkfs.fat -s2 -F32 ...-s1 减小簇大小。否则 UEFI 可能无法读取分区。参见 mkfs.fat(8) 查看支持的簇大小。

小于 32 MiB 的分区可能无法使用 FAT32。这种情况下,格式化为 FAT16 甚至是 FAT12。例如, 2 MiB 的 ESP 只能支持 FAT12:

# mkfs.fat -F 12 /dev/sdxY

挂载分区

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:EFI system partition (简体中文))

为防止 EFISTUB, 内核以及 initramfs 文件应储存在 EFI 系统分区。精简起见,当以 EFISTUB 启动时你可以把 ESP 当做 /boot 分区而不是单独分一个 /boot 分区。 }}

RAID 上的 ESP

将 ESP 包含进 RAID1 组是可行的,但是会有数据污染的危险,创建 ESP 时请三思。 细节见 https://bbs.archlinux.org/viewtopic.php?pid=1398710#p1398710https://bbs.archlinux.org/viewtopic.php?pid=1390741#p1390741.

技巧

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:EFI system partition (简体中文))

Using bind mount

除了直接将 ESP 挂载到 /boot,还可以将 ESP 中的某个目录 bind mount 挂载到 /boot(参考 mount(8)). 用这种方式,pacman 可以直接更新目录,而 ESP 分区上的文件可以按照需要进行放置,这个方式比文件复制要简单的多。

注意: 这种做法需要兼容FAT32的内核和引导。通常来说Arch都没问题, 但是其他发行版可能会有 (namely those that require symlinks in /boot). 讨论帖 在这里.

参考 EFI system partition#Alternative mount points, 将所有文件复制到 ESP 下的某个目录,将 ESP 挂载到 /boot 之外的地方 (例如 /esp)。然后 bind mount 目录:

# mount --bind /esp/EFI/arch/ /boot

这样 /boot 下就有了你需要的文件,编辑 Fstab

/etc/fstab
/esp/EFI/arch /boot none defaults,bind 0 0
警告: 必须使用 root=system_root 内核参数 才能通过此方法启动。

参阅