是的,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(管理员权限):
✅ 最佳实践建议
- 通常只需一个 ESP(100–500 MB),多个系统共用;
- 如果非要多个 ESP(如隔离测试环境),确保 NVRAM 启动项指向正确的设备;
- 备份 ESP 内容(它很小,但极其关键);
- 不要随意格式化 FAT32 小分区——它很可能是 ESP!
如有需要,我也可以教你:
- 如何合并多个 ESP 到一个;
- 如何手动添加 UEFI 启动项;
- 如何用 Live USB 修复多系统引导。
欢迎继续提问!