当前位置:首页>Linux>Linux笔记(6)-EFI 系统分区(ESP)简介

Linux笔记(6)-EFI 系统分区(ESP)简介

  • 2026-10-11 08:39:34
Linux笔记(6)-EFI 系统分区(ESP)简介

EFI 系统分区(ESP)简介

EFI 系统分区(EFI System Partition,缩写 ESP)是 UEFI 启动体系的核心组件,存放操作系统和固件的引导程序文件,是计算机正常启动的必要条件。


目录

  1. 什么是 EFI 分区
  2. ESP 的技术规格
  3. ESP 的目录结构
  4. ESP 的 GUID 标识
  5. 各操作系统在 ESP 中的引导文件
  6. Linux 中挂载与管理 ESP
  7. 多系统共用 ESP
  8. ESP 的备份与恢复
  9. 常见问题与排查

1. 什么是 EFI 分区

EFI 系统分区是磁盘上一个特殊的 FAT32 格式分区,由 UEFI 固件直接读取。当计算机启动时,UEFI 固件会:

  1. 扫描所有磁盘,寻找含有 ESP 标志的分区
  2. 读取 ESP 中存放的 .efi 可执行引导文件
  3. 执行引导文件,加载对应操作系统

ESP 是 UEFI 启动模式下的唯一合法引导入口,无论安装多少个操作系统,通常全盘只需一个 ESP,各系统将自己的引导文件存入 ESP 下各自的子目录,通过 NVRAM 条目注册引导项,互不干扰。


2. ESP 的技术规格

属性
规范要求
实际推荐
文件系统
FAT32(UEFI 规范强制要求)
FAT32
最小大小
100 MB(UEFI 规范最低)
512 MB ~ 1 GB
推荐大小
——
多系统环境建议 1 GB
分区类型 GUID
C12A7328-F81F-11D2-BA4B-00A0C93EC93B
固定值
MBR 分区类型码
0xEF
——
挂载点(Linux)
无强制规定
/boot/efi
(推荐)或 /efi
位置
无强制规定
推荐磁盘最前端(对齐 1 MiB)

为什么必须是 FAT32? UEFI 规范明确规定固件必须能够读取 FAT32 文件系统,因此所有符合规范的 UEFI 固件天然支持 FAT32,这保证了跨平台兼容性。ESP 中不应存放其他文件系统格式。


3. ESP 的目录结构

ESP 内部采用标准化的目录布局:

/boot/efi/          (ESP 挂载点,以下为 ESP 内部结构)├── EFI/│   ├── BOOT/│   │   └── BOOTX64.EFI       ← 默认回退引导文件(Fallback)│   ├── debian/│   │   ├── grubx64.efi       ← Debian GRUB 引导程序│   │   ├── shimx64.efi       ← Secure Boot shim(可选)│   │   └── grub.cfg          ← GRUB 配置(部分发行版)│   ├── ubuntu/│   │   ├── grubx64.efi│   │   └── shimx64.efi│   ├── Microsoft/│   │   └── Boot/│   │       ├── bootmgfw.efi  ← Windows 引导管理器│   │       └── BCD           ← Windows 启动配置数据库│   └── fedora/│       ├── shim.efi│       └── grubx64.efi└── shellx64.efi               ← UEFI Shell(可选)

目录说明

路径
说明
EFI/BOOT/BOOTX64.EFIFallback 引导路径
:当 NVRAM 中没有有效启动项时,固件自动寻找此文件。可移动介质(U 盘)通常使用此路径。
EFI/<发行商>/
各操作系统独立目录,互不干扰
EFI/Microsoft/Boot/bootmgfw.efi
Windows 引导管理器,由 Windows 安装程序创建
EFI/debian/grubx64.efi
Debian 的 GRUB 引导程序
EFI/debian/shimx64.efi
支持 Secure Boot 的 shim 引导器,由微软签名

4. ESP 的 GUID 标识

在 GPT 分区表中,ESP 通过特定 GUID 标识:

分区类型 GUID:C12A7328-F81F-11D2-BA4B-00A0C93EC93B

此 GUID 固定不变,是 UEFI 规范规定的标准值。UEFI 固件通过扫描 GPT 分区表,寻找含有此 GUID 的分区来定位 ESP。

属性标志:ESP 分区条目的属性位中,Bit 2 通常被设置(表示「必要分区」),防止工具意外删除。


5. 各操作系统在 ESP 中的引导文件

5.1 Windows

文件
路径
说明
bootmgfw.efiEFI\Microsoft\Boot\
Windows 启动管理器主程序
bootmgr.efiEFI\Microsoft\Boot\
备用引导文件
BCDEFI\Microsoft\Boot\
启动配置数据库(Boot Configuration Data)
memtest.efiEFI\Microsoft\Boot\
内存测试工具

Windows 11 安装时自动在 ESP 中创建以上文件,并在 NVRAM 中注册启动项。

5.2 Debian / Ubuntu(GRUB + shim)

文件
路径
说明
shimx64.efiEFI/debian/
Secure Boot shim,由微软签名
grubx64.efiEFI/debian/
GRUB 引导程序(由 shim 加载)
mmx64.efiEFI/debian/
MOK Manager,管理自定义密钥
grub.cfgEFI/debian/
指向 /boot/grub/grub.cfg 的引导配置

安装时由 grub-install 命令自动部署。

5.3 Fedora / RHEL

EFI/fedora/├── shim.efi          ← Secure Boot shim├── shimx64.efi       ← 同上(软链接)├── grubx64.efi       ← GRUB└── grub.cfg          ← 指向 /boot/grub2/grub.cfg

5.4 Arch Linux

Arch 可使用多种引导方式,常见布局:

EFI/└── arch/    └── vmlinuz-linux         ← 内核(直接 EFISTUB 启动)    └── initramfs-linux.img   ← (也可以用 systemd-boot 或 GRUB)

5.5 macOS

EFI/├── APPLE/│   └── EXTENSIONS/│       └── Firmware.scap     ← 固件更新包└── BOOT/    └── BOOTX64.EFI           ← 用于 Boot Camp 场景

6. Linux 中挂载与管理 ESP

6.1 查找 ESP

# 方法一:通过分区类型查找sudo fdisk -l | grep -i "EFI System"# 方法二:通过 blkidsudo blkid | grep -i vfat# 方法三:通过 partedsudo parted -l | grep -i "esp\|EFI"# 方法四:通过 lsblklsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,PARTTYPE

6.2 挂载 ESP

# 创建挂载点(若不存在)sudo mkdir -p /boot/efi# 挂载 ESP(替换 /dev/sda1 为实际设备)sudo mount /dev/sda1 /boot/efi# 验证挂载df -h /boot/efils /boot/efi/EFI/

6.3 配置自动挂载(/etc/fstab)

# 获取 ESP 的 UUIDsudo blkid /dev/sda1

在 /etc/fstab 中添加:

UUID=XXXX-XXXX  /boot/efi  vfat  umask=0077,shortname=winnt  0  2

6.4 查看 ESP 中的引导文件

# 列出 ESP 内容ls -lhR /boot/efi/EFI/# 查看 NVRAM 启动项sudo efibootmgr -v# 示例输出:# BootCurrent: 0001# BootOrder: 0001,0002,0000# Boot0000* Windows Boot Manager  HD(1,GPT,...)/File(\EFI\Microsoft\Boot\bootmgfw.efi)# Boot0001* debian                HD(1,GPT,...)/File(\EFI\debian\shimx64.efi)# Boot0002* UEFI: USB Drive       ...

6.5 手动注册 UEFI 启动项

# 注册 Debian GRUB 引导项sudo efibootmgr \  --create \  --disk /dev/sda \  --part 1 \  --label "Debian" \  --loader '\EFI\debian\shimx64.efi'# 修改启动顺序(0001 优先)sudo efibootmgr -o 0001,0000,0002# 删除指定启动项sudo efibootmgr -b 0003 -B

6.6 重新安装 GRUB 到 ESP

# 确保 ESP 已挂载到 /boot/efisudo grub-install --target=x86_64-efi \  --efi-directory=/boot/efi \  --bootloader-id=debian \  --recheck# 更新 GRUB 配置sudo update-grub

7. 多系统共用 ESP

在多操作系统环境中,所有系统共享同一个 ESP,无需为每个系统单独创建 EFI 分区。

7.1 共存原则

  • 每个系统在 EFI/ 下创建独立子目录(如 EFI/debian/、EFI/Microsoft/)
  • 各系统向 NVRAM 注册自己的启动项
  • GRUB 通常接管 UEFI 启动菜单,通过 os-prober 探测其他系统

7.2 双系统安装注意事项

⚠️ 安装 Linux 时绝对不要格式化已有 ESP!

# 安装 Debian 时,在分区步骤中:# 1. 选中已有的 EFI 分区(通常是 /dev/sda1,100-512 MB 的 FAT32 分区)# 2. 设置挂载点为 /boot/efi# 3. 确保"格式化"选项为 否(No)# 4. 继续安装

格式化 ESP 会删除 Windows 等已有系统的引导文件,导致无法启动。

7.3 ESP 空间不足时的处理

若 ESP 空间太小(如 Windows 默认创建的 100 MB),多个 Linux 发行版共存时可能空间不足:

# 方法一:清理旧内核的 EFI 文件sudo ls /boot/efi/EFI/sudo apt autoremove   # 清理旧内核包,GRUB 会自动清理对应 EFI 文件# 方法二:调整 ESP 大小(需使用 GParted,有风险,建议先备份)

8. ESP 的备份与恢复

8.1 备份整个 ESP

# 备份 ESP 为 tar 压缩包sudo tar -czvf /root/esp-backup.tar.gz -C /boot/efi .# 或直接 dd 备份分区镜像sudo dd if=/dev/sda1 of=/root/esp-backup.img bs=4M status=progress

8.2 恢复 ESP

# 从 tar 恢复(ESP 已挂载到 /boot/efi)sudo tar -xzvf /root/esp-backup.tar.gz -C /boot/efi# 或从 dd 镜像恢复(注意目标分区大小需 ≥ 源镜像)sudo dd if=/root/esp-backup.img of=/dev/sda1 bs=4M status=progress

8.3 重建损坏的 ESP

若 ESP 文件系统损坏但分区结构完好:

# 检查文件系统错误sudo fsck.fat -v /dev/sda1# 修复 FAT32 错误sudo fsck.fat -a /dev/sda1# 若需重建文件系统(会清空数据!务必先备份)sudo mkfs.fat -F32 /dev/sda1# 然后重新安装 GRUB 和 Windows 引导文件

9. 常见问题与排查

问题
可能原因
解决方法
EFI variables are not supported
系统以 BIOS 模式启动
确认以 UEFI 模式启动;检查 /sys/firmware/efi 是否存在
UEFI 找不到引导项
NVRAM 启动条目丢失
进入 UEFI Shell,手动运行 \EFI\debian\grubx64.efi;然后用 efibootmgr 重新注册
ESP 挂载报错
分区文件系统损坏
sudo fsck.fat -a /dev/sda1
安装后 Windows 无法启动
安装时格式化了 ESP
用 Windows 安装盘修复引导:bootrec /fixboot;或手动拷回 bootmgfw.efi
grub-install: error: failed to get canonical path
ESP 未正确挂载
确认 /boot/efi 已挂载:`mount
多发行版共存时互相覆盖引导项
多个发行版使用相同 bootloader-id
安装时使用不同 --bootloader-id,如 debian、ubuntu、arch
Secure Boot 拒绝启动
.efi
 文件未签名
安装 shim-signed;或在固件中关闭 Secure Boot
ESP 空间不足(100 MB)
Windows 默认 ESP 过小
使用独立 ESP(Linux 安装时创建新的 1 GB ESP);或清理旧内核文件

最新文章

随机文章