当 GRUB 找不到 Windows —— 一次纯 UEFI 双系统引导修复全记录
关键词:Debian 13、Windows 10/11、UEFI、ESP、bcdboot、diskpart、chkdsk、双系统、引导修复
一、背景
在一台 NVMe 双硬盘主机上,我先安装了 Windows,随后把 Debian 13 装进另一块盘。安装过程顺利,但重启后 BIOS 里根本没有「Windows Boot Manager」条目,GRUB 也只剩 Debian。lsblk 一看,Windows 所在盘(nvme1n1)没有 ESP 分区——原来 Windows 被 Legacy/MBR 方式安装,而 Debian 以 UEFI 方式写入,于是两边「各玩各的」。
二、解决思路
- 保持 Debian 的 UEFI 现状
- 给 Windows 盘补一个 ESP → 把 Windows 引导改写成 UEFI 模式 → 让主板与 GRUB 都能识别
三、操作步骤(完整可复制)
0. 预备
- 一个 Windows 10/11 原版安装 U 盘
- 主板先设为 UEFI Only,关闭 CSM,关闭 Secure Boot(待成功后可视情况再开)
1. 确认盘符
进入 Windows 安装界面 → Shift+F10 调出命令提示符
diskpart
list disk
通过容量 476 GB 找到对应磁盘(本文是 Disk 0),记下编号。
2. 检查文件系统
sel disk 0
list part
sel part 2 ← Windows 所在的 NTFS 大分区
assign letter=C
exit
chkdsk C: /f /x ← 必须等 3 阶段 100 %,无错误后再继续
3. 缩容新建 ESP
diskpart
sel disk 0
sel part 2
shrink desired=300 ← 成功后会多出 300 MB 未分配
cre part efi size=260
format quick fs=fat32 label="ESP"
assign letter=S
4. 生成 UEFI 引导文件
bcdboot C:\Windows /s S: /f UEFI
看到「Boot files successfully created」即成功。
此时 S:\EFI\Microsoft\Boot\bootmgfw.efi 已写入,主板可以识别。
5. 验证
重启 → 进 BIOS Boot Menu → 已出现 Windows Boot Manager (nvme1n1)
设为第一启动项可直接进 Windows,确认无异常。
6. 让 GRUB 也识别
回 Debian 执行
sudo mkdir -p /boot/efi
sudo mount /dev/nvme1n1p1 /boot/efi ← 新建 ESP
sudo blkid /dev/nvme1n1p1 | awk '{print $2}' # 取 UUID
sudo nano /etc/fstab
# 添加
UUID=XXXX-XXXX /boot/efi vfat umask=0077 0 1
保存后
sudo mount -a
sudo update-grub
终端里看到
Found Windows Boot Manager on /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
重启,GRUB 菜单出现「Windows Boot Manager」条目,双系统自由切换。
四、常见坑汇总
| 报错 | 原因 | 解决 |
|---|---|---|
| 没有卷处于焦点 | shrink 前没 sel part | 先 sel part 2 |
| 虚拟磁盘服务错误 | NTFS 有逻辑错误 | chkdsk /f 修完再 shrink |
| BIOS 仍无 Windows | 1. 没 ESP 2. ESP 不是 FAT32 3. 分区类型不是 EF00 | 确保 260 MB FAT32 + EF00 |
| GRUB 找不到 Windows | 1. Debian 没挂 ESP 2. os-prober 被禁用 | 挂载 ESP 后 update-grub,并检查 GRUB_DISABLE_OS_PROBER=false |
五、结语
Legacy 与 UEFI 混装时,ESP 是连接两个系统的“桥梁”。只要保证:
- 主板纯 UEFI 模式
- 至少有一个 FAT32 的 ESP,分区类型 EF00
- Windows 与 Linux 各自的
bootmgfw.efi/grubx64.efi都写进同一块 ESP
双系统就能被任意引导器互相发现,再也不用 BIOS 里来回点 F12 了。
希望这份流水账能帮到同样踩坑的你。祝折腾愉快,早日回归生产力!
什么是ESP分区?
ESP 分区(EFI System Partition,EFI 系统分区)是在采用 UEFI(统一可扩展固件接口)启动方式的电脑上,硬盘最前面划出的一小块 FAT32 分区,专门用来存放系统启动所必需的 .efi 引导文件、启动配置以及部分 UEFI 工具。它通常在 Windows 下不可见,容量 100 MB~500 MB,分区标识为十六进制的 EF。只要电脑以 UEFI+GPT 方式启动,操作系统就必须依赖 ESP 里的引导程序来完成加载;多系统共存时,各系统的 .efi 文件也会集中放在这里,供 UEFI 固件选择启动。
ESP(EFI System Partition)分区和传统分区虽然同属于硬盘分区,但它们在作用、格式、大小、可见性、依赖关系等方面有明显区别。下面用对比方式帮你快速看清异同:
和传统的分区(Legacy BIOS 时代)异同
✅ 相同点
| 项目 | 说明 |
|---|---|
| 本质 | 都是硬盘上的一个逻辑分区,受分区表(GPT/MBR)管理。 |
| 工具 | 都能用磁盘管理工具(如 Diskpart、GParted)创建、删除、格式化。 |
❗ 关键差异
| 对比维度 | ESP 分区(UEFI 时代) | 传统分区(Legacy BIOS 时代) |
|---|---|---|
| 主要作用 | 仅存放 UEFI 启动文件(.efi、启动配置),不存用户数据。 | 存放 操作系统、用户数据、启动扇区 等。 |
| 文件系统 | 强制为 FAT32,UEFI 固件只能识别 FAT32。 | 无强制,可以是 NTFS、FAT32、ext4 等任意格式。 |
| 分区标识 | GPT 分区表中的特殊类型代码 EF00(十六进制 EF)。 | 普通分区类型,无特殊标识。 |
| 容量大小 | 推荐 100~500 MB,Windows 默认 100 MB,macOS 200 MB。 | 无限制,按需求划分,通常几十 GB 起步。 |
| 可见性 | 默认 隐藏,Windows 资源管理器不分配盘符。 | 默认分配盘符,用户可见。 |
| 启动依赖 | 电脑 必须 依赖 ESP 里的 .efi 文件才能启动系统。 | 依赖 活动主分区的 PBR(分区引导记录)和 MBR。 |
| 多系统场景 | 多系统 共用 一个 ESP,不同 .efi 文件放在不同子目录。 | 多系统 各自 把启动代码写在自己分区的 PBR,或覆盖 MBR。 |
| 分区表类型 | 只在 GPT 磁盘上存在;MBR 磁盘无 ESP。 | 主要在 MBR 磁盘上;GPT 磁盘也可有数据分区,但无 ESP。 |
🎯 一句话总结
ESP 分区是 UEFI 启动的“钥匙扣”,只挂启动钥匙,不装行李;传统分区是 “行李箱”,既装系统也装数据,启动方式也完全不同。