先确认Windows引导文件是否存在,再启用os-prober、关闭Windows快速启动、手动重建UEFI启动项或通过Windows侧bcdboot修复。

银河麒麟双系统中Windows开机引导丢失,表现为开机直接进入麒麟系统、GRUB菜单里没有Windows选项,或重启后根本进不了Windows。这种情况多发生在麒麟系统更新、重装或Windows执行快速启动后,UEFI固件中的Windows Boot Manager引导项被覆盖或失效。
确认Windows引导文件是否完好
先验证Windows的启动文件是否真实存在,避免后续操作白费功夫。打开终端,执行:
sudo mkdir -p /mnt/win-efi && sudo mount /dev/nvme0n1p1 /mnt/win-efi(请将/dev/nvme0n1p1替换为你实际的EFI系统分区,可用lsblk -f | grep vfat确认)
检查关键路径:
ls /mnt/win-efi/EFI/Microsoft/Boot/bootmgfw.efi
如果命令返回“没有那个文件或目录”,说明Windows引导文件已被删除或ESP分区异常;若显示文件且大小>1MB,则引导体完好,问题出在UEFI注册或GRUB探测环节。【务必先做这一步,跳过可能导致update-grub反复失败】
启用os-prober并强制刷新GRUB菜单
麒麟默认可能禁用跨系统探测,需手动开启:
方法一:修改配置并更新
执行:sudo nano /etc/default/grub,找到GRUB_DISABLE_OS_PROBER这一行,将其值改为false(若该行被注释,取消注释;若不存在,手动添加一行:GRUB_DISABLE_OS_PROBER=false)
保存退出后运行:
sudo os-prober
若输出中出现类似/dev/nvme0n1p3@/Windows/bootmgr:Windows 10:Windows:chain或含Windows Boot Manager的行,说明探测成功;若无任何输出,继续下一步。
方法二:绕过挂载限制修复休眠NTFS
Windows启用快速启动时,NTFS分区被标记为“休眠”,Linux以只读方式挂载,os-prober无法读取BCD。此时需在Windows中彻底关闭快速启动:进入“控制面板→电源选项→选择电源按钮的功能→更改当前不可用的设置”,取消勾选“启用快速启动”,然后完全关机(非重启),再回到麒麟执行sudo os-prober。
重建Windows在UEFI固件中的启动项
当GRUB仍不显示Windows,但已确认bootmgfw.efi存在,说明UEFI固件里的启动条目丢失。必须手动重建,否则无论怎么update-grub都没用。
第一步:查看当前所有UEFI启动项
执行:sudo efibootmgr -v
留意输出中是否有Boot0002* Windows Boot Manager类条目。若全无Windows相关项,进入第二步。
第二步:手动添加Windows启动项
执行:sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Windows Boot Manager" -l "\EFI\Microsoft\Boot\bootmgfw.efi"
其中-d /dev/nvme0n1是磁盘设备(不是分区),-p 1表示第1个分区(即ESP),请按你实际设备调整。
第三步:设为第一启动项(可选但推荐)
执行:sudo efibootmgr -o 0002,0000(假设新生成的是Boot0002,原麒麟是Boot0000)
从Windows侧反向修复引导链
若你暂时能进入Windows,这是最稳妥的兜底方案,不依赖Linux环境是否正常。
① 以管理员身份运行PowerShell
② 执行:bcdedit /set {bootmgr} displaybootmenu yes
③ 执行:bcdedit /timeout 10
④ 执行:diskpart → list volume → select volume X(X为EFI分区卷号)→ assign letter=Z → exit
⑤ 执行:bcdboot C:\Windows /s Z: /f UEFI
这会重写Z:\EFI\Microsoft\Boot\下的全部文件,并确保BCD包含合法入口。











