Skip to content
Go back

当 GRUB 找不到 Windows

Published:  at  06:40 PM

当 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 方式写入,于是两边「各玩各的」。

二、解决思路

  1. 保持 Debian 的 UEFI 现状
  2. 给 Windows 盘补一个 ESP → 把 Windows 引导改写成 UEFI 模式 → 让主板与 GRUB 都能识别

三、操作步骤(完整可复制)

0. 预备

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 仍无 Windows1. 没 ESP
2. ESP 不是 FAT32
3. 分区类型不是 EF00
确保 260 MB FAT32 + EF00
GRUB 找不到 Windows1. Debian 没挂 ESP
2. os-prober 被禁用
挂载 ESP 后 update-grub,并检查 GRUB_DISABLE_OS_PROBER=false

五、结语

Legacy 与 UEFI 混装时,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 启动的“钥匙扣”,只挂启动钥匙,不装行李;传统分区是 “行李箱”,既装系统也装数据,启动方式也完全不同。


Suggest Changes

Next Post
cordova将html应用构建为跨平台应用