EFI (Extensible Firmware Interface) 系统分区是现代计算机(特别是采用 UEFI 启动的系统)所必需的一个小分区,它存储了引导加载程序(如 Windows Boot Manager 或 GRUB)、EFI 驱动程序和系统固件所需的数据。 将涵盖:

- 识别 EFI 分区
- 创建 EFI 分区
- 格式化 EFI 分区
- 挂载和卸载 EFI 分区
- 在 EFI 分区中安装引导加载程序
- 重要注意事项
识别 EFI 分区
在操作之前,首先需要确认你的系统上 EFI 分区的位置和标识,它的文件系统类型是 FAT32,并且有一个特定的 GPT 分区类型标识符。
使用 lsblk 命令
lsblk 是一个非常直观的命令,可以列出所有块设备及其分区。
sudo lsblk -f
输出可能如下所示(sda 是你的硬盘):
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1 ntfs ? Windows ... ... ... /mnt/windows
├─sda2 vfat FAT32 EFI-SYSTEM 1234-5678 ... ... /boot/efi <-- 这就是 EFI 分区
└─sda3 ext4 ? Arch Linux ... ... ... /
关键点:

- FSTYPE:
vfat(这是 Linux 对 FAT32 文件系统的称呼)。 - LABEL:
EFI-SYSTEM或EFI。 - MOUNTPOINT: 通常挂载在
/boot/efi或/boot目录下。
使用 fdisk 或 gdisk 命令
这两个命令可以查看更底层的分区表信息。
使用 fdisk (对于 MBR 和 GPT):
sudo fdisk -l
在输出中,找到 Type 为 "EFI System" 的分区。
使用 gdisk (更推荐,专门用于 GPT):

sudo gdisk -l /dev/sda
输出示例:
Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Disk model: ...
...
Partition table: GPT
Disk identifier: ...
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System <-- 这里
...
如何确认分区类型?
使用 blkid 命令可以查看分区的详细信息,包括 GPT 类型 UUID。
sudo blkid /dev/sda2
输出中应该包含 PARTTYPE="C12A7328-F81F-11D2-BA4B-00A0C93EC93B",这就是 EFI 分区的标准 GPT 类型 ID。
创建 EFI 分区
如果你需要全新创建或调整分区,通常会使用 gdisk 或 parted。警告:此操作会删除分区内的所有数据,请务必谨慎!
使用 gdisk (推荐)
-
打开
gdisk:sudo gdisk /dev/sda
-
使用命令
n创建一个新分区。- 它会提示输入分区号,直接回车使用下一个可用编号。
- 起始扇区:直接回车,让它自动选择(通常是 2048)。
- 结束扇区:输入
+512M(推荐 512MB,足够使用) 或+1G,你也可以输入扇区号。 - 分区类型代码:输入
EF,这是EFI System的快捷代码。 - 分区名称:可以输入
EFI或直接回车。
-
使用命令
w写入分区表并退出,系统会提示你确认,输入Y。
使用 parted (功能更强大)
-
打开
parted:sudo parted /dev/sda
-
切换到 GPT 模式(如果还不是):
(parted) mktable gpt
-
创建分区:
(parted) mkpart primary fat32 1MiB 513MiB
-
设置分区类型为 EFI:
(parted) set 1 esp on
(这里的
1是分区号,根据你的情况调整) -
退出:
(parted) quit
格式化 EFI 分区
创建分区后,需要将其格式化为 FAT32 文件系统。
假设你的 EFI 分区是 /dev/sda2:
sudo mkfs.vfat -F 32 -n EFI /dev/sda2
mkfs.vfat: 用于创建 FAT 文件系统。-F 32: 指定使用 FAT32 格式。-n EFI: 为分区设置卷标为EFI,方便识别。
挂载和卸载 EFI 分区
挂载
你需要创建一个挂载点,然后将分区挂载上去。
-
创建挂载点(
/boot/efi是标准路径):sudo mkdir -p /boot/efi
-
挂载分区:
sudo mount /dev/sda2 /boot/efi
-
验证挂载是否成功:
lsblk -f # 或者 df -hT
你将看到 /dev/sda2 已经挂载在 /boot/efi 上。
卸载
当不再需要访问该分区时,应将其卸载。
sudo umount /boot/efi
如果遇到“设备忙”的错误,可能是因为有程序正在使用该分区,可以尝试使用 lsof 查找并关闭相关进程,或者强制卸载(不推荐,可能导致数据损坏):
sudo umount -l /boot/efi
在 EFI 分区中安装引导加载程序
这是 EFI 分区最重要的功能,以安装 GRUB 为例:
-
确保分区已挂载:
sudo mount /dev/sda2 /boot/efi
-
安装 GRUB 到 EFI 系统分区:
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ArchLinux --recheck
--target=x86_64-efi: 指定目标为 UEFI。--efi-directory=/boot/efi: 指定 EFI 分区的挂载点。--bootloader-id=ArchLinux: 设置引导加载程序的名称,在启动菜单中会显示。--recheck: 强制重新检查设备。
-
生成 GRUB 配置文件:
sudo grub-mkconfig -o /boot/efi/EFI/ArchLinux/grub.cfg
- 注意路径:
/boot/efi/EFI/ArchLinux/是--bootloader-id指定的路径。
- 注意路径:
重要注意事项
- 数据备份:在进行任何分区操作之前,务必备份所有重要数据! 分区格式化或调整大小都有可能导致数据丢失。
/boot/efi的必要性:对于独立的 Linux 发行版(如 Arch Linux, Fedora),将/boot和 分开,并将/boot挂载到/boot/efi是一个常见的做法,对于双系统,Windows 通常会自动创建和管理自己的 EFI 分区(通常挂载在/boot/efi或/mnt/EFI/Microsoft)。- 不要随意删除:不要删除或格式化 EFI 分区,否则你的系统将无法启动。
- 权限:挂载 EFI 分区后,你可能需要调整
/boot/efi目录的权限,以确保普通用户可以访问(如果需要)。sudo chmod 755 /boot/efi
