您安装了 Windows 更新,重启之后,那个让您在 Linux 和 Windows 之间做选择的 GRUB 菜单不见了。电脑直接启动进入 Windows,或者停在一条提示违反安全策略的消息上。Windows 更新后 GRUB 不见了,看上去令人担心,但在大多数情况下,两个操作系统都完好无损,变化的只是通往启动菜单的路径。本指南说明现代 UEFI 电脑和较旧 BIOS 机器上的常见原因,如何安全地恢复 GRUB,以及开始之前要检查什么。
Windows 更新后 GRUB 不见了:原因何在
在 UEFI 电脑上,每个操作系统都会在 EFI 系统分区上安装自己的引导加载程序,固件则按固定顺序保存一份启动项列表。当 Linux 启动项(shim 和 GRUB)排在第一位,并由 GRUB 提供 Windows 作为选项时,双系统才能正常工作。通常有三件事会破坏它:
- 启动顺序变了。大型 Windows 更新可能把 Windows Boot Manager 重新放回固件列表的最前面。GRUB 仍然安装着,只是不再被启动。
- Secure Boot 吊销。2024 年 8 月,一次 Windows 安全更新把 Secure Boot 策略(SBAT)应用到了一些本应跳过的双系统电脑上,Linux 因而停止,并显示“Verifying shim SBAT data failed: Security Policy Violation”。后来的 Windows 更新不再应用该设置,而 Linux 发行版更新后的 shim 和 GRUB 软件包也满足了它的要求。随着旧引导加载程序被淘汰,类似的吊销还会再次发生,所以未更新的 Linux 安装最容易被拒绝。
- 传统 BIOS 系统。在从主引导记录启动的较旧电脑上,Windows 修复或重新安装可能覆盖 MBR 引导代码,用 Windows 加载程序取代 GRUB。
修复之前先做的检查
- 打开固件的启动菜单。大多数电脑在开机时按 F12、F11 或 Esc 之类的键会显示一次性启动菜单。如果列表中有您的 Linux 发行版条目并且能启动 GRUB,那么只需要修复 UEFI 启动顺序。
- 找到您的 BitLocker 恢复密钥。更改启动项或 Secure Boot 设置,可能让 Windows 在下次启动时要求输入它。在企业电脑上,它通常保存在公司的 Microsoft Entra ID 或 Active Directory 中,个人电脑则保存在用户的 Microsoft 账户中。没有 BitLocker 恢复密钥,加密的驱动器无法读取。
- 关闭 Windows 快速启动,如果 Linux 需要写入 Windows 分区的话,因为处于休眠状态的 Windows 分区会被锁定,无法更改。
- 记下确切的错误信息。“Security Policy Violation”、grub rescue> 提示符,以及无提示地直接启动进入 Windows,对应着不同的修复办法。
如何在 UEFI 电脑上恢复 GRUB
如果 Linux 能从固件菜单启动,您可以在 Linux 内部修复顺序。efibootmgr 命令会列出启动项和当前的 BootOrder,而 efibootmgr -o 后面跟上按您想要的顺序排列的条目编号(Linux 在前),就能让更改永久生效。有些固件会无视这一点并重置顺序,这时必须在固件设置界面本身中修改。
恢复 GRUB 只会重写引导文件和启动项;两个系统上的文档和程序都原封不动。如果 Linux 根本无法启动,请用同一发行版的 live U 盘启动,挂载已安装的系统及其 EFI 系统分区,并通过 chroot 修复 GRUB。在 Debian 和 Ubuntu 上,这意味着重新安装 shim 和 GRUB EFI 软件包或运行 grub-install,然后执行 update-grub。对于 SBAT 错误,有文档记载的变通办法是:暂时关闭 Secure Boot,启动 Linux,安装包括 shim 在内的所有待处理更新,然后再重新开启 Secure Boot。
社区的 Linux Boot-Repair 工具可以在 live 会话中自动完成其中许多步骤。它在简单的布局上效果很好,但接受它的建议之前请先看清它要做什么,尤其是在加密磁盘、RAID 阵列或装有两个以上操作系统的机器上。如果您根本不想在 chroot 中操作,这正是我们的 GRUB 与 MBR 修复服务处理的那类工作。
GRUB 菜单中没有 Windows:os-prober 设置
有时 GRUB 出现了,却只列出 Linux。从 GRUB 2.06 起,出于安全原因,查找其他操作系统的 os-prober 步骤默认被禁用,所以 update-grub 不再自动添加 Windows。在 /etc/default/grub 中设置 GRUB_DISABLE_OS_PROBER=false 并再次运行 update-grub,条目就会回来。或者,保持 GRUB 不变,需要时从固件启动菜单选择 Windows。
问题出在 Windows 一侧时
如果 Windows 本身无法启动,它在 EFI 分区上的引导文件可能已损坏。在 Windows 恢复环境中,bcdboot 命令可以从 Windows 文件夹重建它们,详见 Microsoft 的 BCDBoot 文档。在传统 BIOS 电脑上,bootrec /fixmbr 会恢复 Windows 的 MBR 代码,这同样会把 GRUB 从启动路径中移除,所以如果您仍想要那个菜单,之后要计划恢复 GRUB。能修复 Windows 启动问题的同一批工具也可能删除 Linux 启动项,因此运行之前请先检查您的备份。
常见问题:Windows 更新后 GRUB 不见了
不用 live U 盘能修复吗?
通常可以。如果 Linux 仍能从固件启动菜单启动,可以在 Linux 内部用 efibootmgr 或在固件设置中纠正顺序。只有当 Linux 根本无法启动时才需要 live U 盘。
为了避免这个问题,应该永久关闭 Secure Boot 吗?
最好不要。Secure Boot 能防范在操作系统之前加载的恶意软件。请保持 Linux 更新,让它已签名的 shim 和 GRUB 被接受,只在修复需要时才短暂关闭 Secure Boot。
BIOS 更新后双系统无法启动:是同一个问题吗?
通常是。固件更新可能重置启动顺序、丢弃自定义启动项或恢复 Secure Boot 的默认设置。适用同样的检查:先看固件启动菜单,然后用 efibootmgr 修复顺序,或重新创建 Linux 启动项。
如何避免下一次更新再次破坏双系统?
让两个系统都保持更新,把 BitLocker 恢复密钥存放在您能从另一台设备访问的地方,并在大型 Windows 更新之后检查一次启动顺序。把每个操作系统装在各自的驱动器上,也能限制一次更新能改动的范围。
在洛杉矶(Los Angeles)的电脑或服务器上卡在启动错误?我们的 GRUB 修复服务涵盖 UEFI 和较旧 BIOS 系统上的 Linux、Windows 和双系统机器,如果硬盘出现故障迹象,我们会先复制您的数据。当原因被查明是硬件时,下一步是我们的电脑与笔记本维修服务。请联系我们,并附上确切错误信息的照片。




