资讯动态

双系统GRUB引导修复:解决Win10/Ubuntu启动项丢失问题

发布时间:2026/8/4 15:10:15 来源:尧图企业网站定制
1. 项目概述一个困扰无数双系统用户的经典“鬼打墙”如果你正在经历“电脑装了Win10和Ubuntu双系统开机直接黑屏或者直接跳进UbuntuWindows选项消失”的窘境那么恭喜你你并不孤单。这几乎是Linux与Windows双系统安装后排名第一的“入门级劝退”故障。表面上看是GRUB引导菜单出了问题Windows引导项神秘失踪导致你无法进入熟悉的Windows桌面。但更深层的原因往往与UEFI/BIOS启动模式、磁盘分区表GPT/MBR、以及操作系统安装顺序的“潜规则”紧密相关。我自己的主力开发机就是Win10 Ubuntu 22.04 LTS的双系统配置这套组合在带来极致开发便利的同时也让我几乎把GRUB相关的坑踩了个遍。从最开始的“黑屏左上角光标闪烁”到后来的“GRUB rescue”再到这次要解决的“GRUB菜单里没有Windows”每一次都像是一次对耐心和系统知识的考验。网上教程五花八门有让重装GRUB的有让用boot-repair工具的但很多都治标不治本或者操作复杂容易误伤。今天我就把自己最终稳定解决这个问题的完整思路和实操步骤记录下来目标就一个不重装任何一个系统通过最清晰、最安全的操作让GRUB引导菜单重新识别并正确引导Windows 10。这个方法的核心逻辑不是“修复”而是“重建”与“重定向”。我们不会去动Windows的引导分区而是让GRUB这个“总调度员”重新学会如何找到并启动Windows。整个过程在Ubuntu环境下完成无需Windows安装盘对数据绝对安全。2. 核心问题诊断为什么Windows会从GRUB菜单里消失在动手之前我们必须先搞清楚敌人是谁。GRUB菜单里找不到Windows通常不是Windows系统本身坏了而是引导信息的“链接”断了。根据我的经验主要原因可以归结为以下三类你可以对照自己的情况做个初步判断。2.1 原因一Windows更新或恢复操作“覆盖”了GRUB这是最常见的情况。你原本双系统用得好好的某天Windows 10进行了一次重大更新例如功能更新或者你用Windows的“系统恢复”功能修复了启动问题。Windows的引导管理器bootmgr在完成自己的修复后会“霸道”地将自己写入主板UEFI的启动项首位并覆盖MBR传统BIOS下或EFI分区中的GRUB引导文件。结果就是电脑下次启动时直接由Windows引导管理器接管它自然只认识Windows于是要么直接进入Windows要么在UEFI设置里你发现“Ubuntu”这个启动项不见了只剩下“Windows Boot Manager”。2.2 原因二Ubuntu安装或更新后GRUB配置未正确更新另一种情况发生在你安装新版本的Ubuntu或者对现有Ubuntu系统执行了内核更新之后。GRUB的配置文件/boot/grub/grub.cfg是由update-grub命令或其前端工具grub-customizer自动生成的。这个命令会调用一个名为os-prober的脚本去扫描所有磁盘分区寻找其他可引导的操作系统。如果os-prober因为某些原因比如权限、Windows分区未挂载、休眠文件存在没能正确识别到Windows分区那么生成的grub.cfg里就不会包含Windows的启动项。2.3 原因三磁盘分区格局或UEFI/BIOS设置变动这种情况相对少一些但更棘手。例如你调整了磁盘分区用GParted等工具移动、 resize了分区导致分区UUID发生变化或者你在主板UEFI/BIOS设置里不小心关闭了“安全启动”Secure Boot或改变了启动模式UEFI/Legacy。GRUB和Windows引导都严重依赖这些底层信息一旦变动就可能出现引导链断裂。注意在开始任何修复操作前请务必确保你已经备份了重要数据。虽然以下操作主要针对引导区风险较低但备份是一个必须养成的好习惯。3. 修复前的准备工作与环境确认“工欲善其事必先利其器”。盲目操作可能会让情况更糟。我们需要先启动到Ubuntu系统并确认几个关键信息。如果你现在黑屏进不去任何系统你需要一个Ubuntu Live USB安装U盘来启动电脑。3.1 如何进入Ubuntu环境情况A能进入GRUB菜单但有Ubuntu选项。开机时狂按Shift键部分电脑是Esc键直到出现GRUB菜单。选择“Ubuntu”启动即可。情况B黑屏或直接进Windows完全看不到GRUB。你需要制作一个Ubuntu安装U盘。从Ubuntu官网下载22.04 LTS的ISO镜像用RufusWindows或Startup Disk CreatorUbuntu工具将其写入U盘。插入U盘开机按F2/F12/Del等键进入主板BIOS/UEFI设置。在“启动”Boot选项里将U盘设为第一启动项保存并重启。电脑会从U盘启动进入Ubuntu安装界面。这时不要选择“安装Ubuntu”而是选择“试用Ubuntu”Try Ubuntu。这样你就会进入一个完整的、运行在内存中的Ubuntu桌面环境可以执行所有修复命令。3.2 确认启动模式与磁盘分区表打开终端CtrlAltT我们通过几个命令来摸清家底。1. 检查启动模式ls /sys/firmware/efi如果这个目录存在说明你当前是以UEFI模式启动的。如果不存在则是传统BIOSLegacy模式。这是最关键的一步因为UEFI和Legacy模式的修复方法有根本区别。现代电脑2015年后装Win10绝大多数都是UEFIGPT模式。2. 查看磁盘分区情况sudo fdisk -l或者用图形化工具gparted需安装sudo apt install gparted查看更直观。你需要找到EFI系统分区ESP在UEFI模式下这是一个约100MB-500MB的FAT32格式分区通常标记为“EFI System”。它里面存放了所有操作系统的引导文件。Windows的安装分区通常是巨大的NTFS格式分区。Ubuntu的/boot分区或根分区。记下你的Windows分区设备名比如/dev/nvme0n1p3或/dev/sda3。3. 检查os-prober是否能发现Windowssudo os-prober如果命令输出了包含“Windows”字样的行例如/dev/sda1:Windows 10:Windows:chain恭喜这说明系统能识别到Windows问题很可能只是GRUB配置没更新。如果没有输出说明os-prober没能扫描到我们需要进一步排查。4. 分步修复实操让Windows重回GRUB菜单根据你确认的启动模式选择对应的修复路径。UEFI模式是当前主流我们将以此为重点详述。4.1 方案A针对UEFI启动模式的修复最推荐、最彻底这个方案的核心是挂载Windows的EFI分区ESP让Ubuntu能访问其中的引导文件然后更新GRUB配置使其将Windows引导项加入菜单。步骤1挂载EFI系统分区ESP首先找到你的ESP分区。使用sudo fdisk -l寻找类型为“EFI System”的分区。假设它是/dev/nvme0n1p1。# 创建一个挂载点目录 sudo mkdir -p /mnt/efi # 挂载ESP分区 sudo mount /dev/nvme0n1p1 /mnt/efi挂载后你可以用ls /mnt/efi查看里面的内容应该能看到EFI目录进去后可能有Microsoft、Ubuntu等子目录。步骤2检查并安装必要的工具确保os-prober和grub-efi相关包已安装且最新。sudo apt update sudo apt install --reinstall grub-efi-amd64 os-prober步骤3临时禁用可能导致探测失败的“快速启动”和“休眠”Windows的“快速启动”和休眠功能会在关机时将一个休眠文件hiberfil.sys留在系统盘并将分区标记为“脏”状态。Linux出于安全考虑默认会以只读方式挂载这样的NTFS分区导致os-prober无法读取引导信息。如果你能进入Windows彻底关闭“快速启动”。进入“控制面板”-“电源选项”-“选择电源按钮的功能”-“更改当前不可用的设置”取消勾选“启用快速启动”保存。然后完全重启不是关机再开机而是点击“重启”进入Windows再正常关机。这样能确保Windows完全关闭清除休眠状态。如果你无法进入Windows在Ubuntu下强制移除休眠标记。首先找到你的Windows系统分区比如/dev/nvme0n1p3然后sudo mount -o remove_hiberfile /dev/nvme0n1p3 /mnt这个命令会尝试挂载并删除休眠文件。如果分区是BitLocker加密的此方法无效你必须先进入Windows解密。步骤4重新生成GRUB配置这是最关键的一步。sudo grub-mkconfig -o /boot/grub/grub.cfg或者使用等价的sudo update-grub仔细观察命令输出你期望看到类似这样的信息Found Windows Boot Manager on /dev/nvme0n1p1/EFI/Microsoft/Boot/bootmgfw.efi这表示os-prober成功找到了Windows引导管理器。如果看到了那么修复基本成功。步骤5将GRUB安装到EFI分区确保GRUB引导器被正确写入ESP分区。# 请将 /dev/nvme0n1 替换为你的磁盘设备名不带分区号如 /dev/sda sudo grub-install /dev/nvme0n1这个命令会将GRUB的EFI引导文件grubx64.efi写入到ESP分区的EFI/ubuntu/目录下。步骤6重启并验证sudo reboot重启时再次按Shift或Esc键呼出GRUB菜单。现在你应该能看到一个新增的“Windows Boot Manager”或者类似的条目了。选择它应该就能正常进入Windows 10。4.2 方案B针对传统BIOSLegacy MBR启动模式的修复如果你的电脑是比较老的型号使用的是传统BIOS和MBR分区表修复思路类似但命令稍有不同。步骤1确保GRUB已安装到MBR在Ubuntu终端中执行# 请将 /dev/sda 替换为你的第一块硬盘设备名 sudo grub-install /dev/sda这个命令会将GRUB的第一阶段引导程序写入硬盘的MBR主引导记录。步骤2更新GRUB配置同样需要确保Windows分区没有被标记为休眠状态然后sudo update-grub查看输出是否找到Windows。步骤3重启验证。4.3 方案C使用boot-repair工具图形化一键修复对于不想敲命令的用户这是一个非常流行的“傻瓜式”解决方案。boot-repair是一个图形化工具能自动诊断并修复大多数引导问题。步骤1在Ubuntu中安装并运行boot-repairsudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair boot-repair步骤2使用推荐修复启动boot-repair后点击“Recommended repair”推荐修复。工具会自动执行一系列操作包括重新安装GRUB、更新配置、修复EFI引导顺序等。过程中可能会提示你打开终端执行一些命令照做即可。步骤3重启系统。实操心得boot-repair虽然方便但它有时会“过度修复”比如创建一大堆无用的GRUB启动项。对于追求干净引导菜单的用户我更推荐手动方案A因为它让你对整个引导过程有更清晰的控制。但在紧急情况下boot-repair无疑是救命稻草。5. 高级排查与手动添加引导项如果上述所有方法都失败了os-prober依然找不到Windows或者GRUB菜单出现了但选择Windows后黑屏/报错我们就需要进入“手动模式”。这要求你对GRUB的配置语法有基本了解。5.1 手动在GRUB配置中添加Windows启动项GRUB的配置文件是/boot/grub/grub.cfg但它是由脚本自动生成的直接修改它会在下次update-grub时被覆盖。正确的做法是修改自定义配置文件/etc/grub.d/40_custom。步骤1编辑自定义配置文件sudo nano /etc/grub.d/40_custom在文件末尾添加以下内容。你需要根据实际情况修改三处关键信息menuentry Windows 10 { insmod part_gpt # 如果是GPT分区表则保留MBR则改为 insmod part_msdos insmod ntfs # 加载NTFS文件系统模块 insmod chain # 加载链式加载模块 # 设置Windows的EFI引导文件路径。假设ESP分区是 (hd0,gpt1)Windows引导文件在其 \EFI\Microsoft\Boot\bootmgfw.efi set root(hd0,gpt1) chainloader /EFI/Microsoft/Boot/bootmgfw.efi }(hd0, gpt1)这是GRUB对分区的命名方式。hd0表示第一块硬盘。gpt1表示GPT分区表下的第一个分区如果是MBR则用msdos1。如何确定你的ESP分区是哪个在Ubuntu中运行sudo grub-probe -t device /boot/efi可以找到当前挂载的EFI分区对应的GRUB设备名。更简单的方法是根据sudo fdisk -l的结果推算第一个硬盘的第一个分区通常是(hd0,gpt1)或(hd0,msdos1)。/EFI/Microsoft/Boot/bootmgfw.efi这是Windows在UEFI模式下的标准引导文件路径。请确保你挂载ESP分区后这个路径确实存在。步骤2重新生成GRUB配置保存并退出编辑器后执行sudo update-grub这次你会在输出中看到“Found custom menu entry ‘Windows 10’”说明添加成功。步骤3重启测试。5.2 修复“选择Windows后黑屏”的问题有时GRUB菜单出现了选择Windows后却黑屏无响应。这通常是因为GRUB传递了错误的参数或者显卡模式问题。尝试在GRUB菜单中编辑启动项在GRUB菜单选中Windows条目按e键进入编辑模式。找到以chainloader开头的那一行在其上一行添加set root(hd0,gpt1) # 确保这里指向你的ESP分区然后按F10启动。如果成功可以将这个修改永久化到40_custom文件中。禁用显卡驱动冲突适用于Legacy模式或某些独显机器在40_custom的Windows启动项里chainloader行之前可以尝试添加drivemap -s (hd0) ${root} # 交换磁盘驱动号解决某些磁盘识别问题或者insmod vbe # 加载基本VESA显卡驱动6. 修复后的优化与预防措施成功修复后为了避免问题再次发生我强烈建议你进行以下设置。6.1 设置GRUB为默认启动项并调整等待时间进入Ubuntu系统编辑GRUB主配置文件sudo nano /etc/default/grub修改以下两行GRUB_DEFAULT0 # 0表示默认选中第一个菜单项通常是Ubuntu可以改成saved并使用grub-set-default来记住上次选择 GRUB_TIMEOUT10 # 菜单显示时间单位秒建议5-10秒修改后运行sudo update-grub使设置生效。6.2 在Windows中禁用可能破坏GRUB的自动修复Windows的“自动修复”功能有时会好心办坏事。我们可以通过组策略或注册表阻止它。方法一专业版/企业版Windows按WinR输入gpedit.msc打开组策略编辑器。导航到“计算机配置”-“管理模板”-“系统”-“故障排除和诊断”-“启动修复”。将“配置启动修复的执行级别”设置为“已禁用”。方法二这是一个更彻底的“偏方”在Ubuntu终端中挂载Windows系统分区然后sudo touch /mnt/你的Windows分区/Windows/System32/Recovery/ReAgent.xml sudo chattr i /mnt/你的Windows分区/Windows/System32/Recovery/ReAgent.xml这会在Windows恢复代理的配置文件上设置“不可更改”属性阻止其运行。此操作有风险请谨慎评估。6.3 创建GRUB配置的备份养成好习惯在GRUB工作正常时备份其核心配置和EFI文件。# 备份GRUB配置文件 sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.backup # 备份整个ESP分区内容挂载后 sudo cp -r /mnt/efi/EFI /你的备份目录/下次出问题时你可以直接恢复备份而不是从头再来。7. 终极备选方案使用Windows引导管理器引导Ubuntu如果你厌倦了GRUB的问题或者主要使用Windows偶尔用Ubuntu可以考虑“反客为主”让Windows的引导管理器来引导Ubuntu。这需要借助EasyUEFIWindows下或efibootmgrLinux下工具来管理UEFI启动项。基本原理是为Ubuntu的grubx64.efi或shimx64.efi文件在UEFI固件中创建一个独立的启动项。这样开机时按F12等启动菜单键你可以独立选择启动Windows还是Ubuntu两者互不干扰。这种方法更干净但设置稍复杂且每次切换系统需要进BIOS菜单选择。经过以上从诊断到修复再到优化和预防的完整流程你的Win10/Ubuntu双系统应该已经恢复了健康。这个问题的本质是操作系统之间引导管辖权的争夺理解UEFI/ESP分区、GRUB配置生成机制这两个核心就能以不变应万变。记住在Linux世界里终端和日志是你最好的朋友遇到问题多查输出信息冷静分析大部分问题都能迎刃而解。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价