uefi扫描esp分区时会扫描所有的硬盘吗?如果有多个硬盘都有efi分区呢

是的,UEFI 固件在启动时默认会扫描所有连接的存储设备(硬盘、SSD、U盘、NVMe 等),只要它们包含 有效的 EFI 系统分区(ESP),就可能被识别并用于启动。



✅ 回答你的两个核心问题:

1. UEFI 扫描 ESP 时会扫描所有硬盘吗?

是的。UEFI 固件会枚举所有支持的存储控制器(SATA、NVMe、USB、eMMC 等)上挂载的设备,并检查每个设备是否包含:
  • GPT 分区表中类型为 C12A7328-F81F-11D2-BA4B-00A0C93EC93B(即 EFI System Partition)的分区;
  • 或 MBR 分区中 FAT32 格式且被标记为“活动”的小分区(兼容模式,少见)。

只要满足条件,该 ESP 就会被纳入启动候选。



2. 如果多个硬盘都有 EFI 分区,会发生什么?

UEFI 会从所有 ESP 中收集 .efi 引导文件,并合并到启动菜单中。

具体行为如下:

🔹 情况 A:NVRAM 中已有启动项(最常见)
  • 安装操作系统时,安装程序会向 UEFI 的 NVRAM 写入一条启动记录,例如:
  • 这些记录明确指定了设备 + 路径,所以即使有多个 ESP,UEFI 也知道该从哪个硬盘加载哪个 .efi 文件。
  • 开机时,你看到的启动菜单(或默认启动项)就是这些 NVRAM 条目。
🔹 情况 B:NVRAM 为空或启动项失效(如新装硬盘)
  • UEFI 会执行 fallback 启动机制
  • 此时,哪个设备先被扫描到、或固件优先级更高,就可能先启动它(不同主板行为略有差异)。
⚠️ 这也是为什么可启动 U 盘必须包含 \EFI\BOOT\BOOTX64.EFI —— 这是 UEFI 的“通用入口”。


🧪 实际例子:双硬盘双系统

假设你有:

  • Disk 0:安装了 Windows,ESP 在 /dev/sda1,含 \EFI\Microsoft\Boot\bootmgfw.efi
  • Disk 1:安装了 Ubuntu,ESP 在 /dev/sdb1,含 \EFI\ubuntu\grubx64.efi

安装完成后,UEFI NVRAM 中会有两条记录:

Boot0001* Windows Boot Manager (on Disk 0)
Boot0002* ubuntu               (on Disk 1)

开机时:

  • 如果默认启动项是 Boot0001,就从 Disk 0 的 ESP 启动 Windows;
  • 如果你在启动菜单(通常按 F12/ESC)中选择 ubuntu,就从 Disk 1 的 ESP 启动 GRUB。

✅ 两个 ESP 互不干扰,各自存放自己的引导文件。



❓常见问题

Q1:能不能把多个系统的引导文件放在同一个 ESP 里?

完全可以,而且推荐这样做!大多数 Linux 安装程序(如 Ubuntu)默认会复用已有的 ESP(通常是 Windows 创建的那个),把 grubx64.efi 放进同一个分区的 /EFI/ubuntu/ 目录下。这样只需一个 ESP,管理更简单。

Q2:多个 ESP 会导致启动混乱吗?

一般不会,只要 NVRAM 启动项正确。但如果手动删除了某个系统的引导文件,或重装系统覆盖了 ESP,可能导致其他系统无法启动(因为 .efi 文件被删了)。

Q3:如何查看当前有哪些 UEFI 启动项?

  • Linux
  • Windows(管理员权限):


✅ 最佳实践建议

  1. 通常只需一个 ESP(100–500 MB),多个系统共用;
  2. 如果非要多个 ESP(如隔离测试环境),确保 NVRAM 启动项指向正确的设备;
  3. 备份 ESP 内容(它很小,但极其关键);
  4. 不要随意格式化 FAT32 小分区——它很可能是 ESP!


如有需要,我也可以教你:

  • 如何合并多个 ESP 到一个;
  • 如何手动添加 UEFI 启动项;
  • 如何用 Live USB 修复多系统引导。

欢迎继续提问!