news 2026/8/4 15:09:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双系统GRUB引导修复:解决Win10/Ubuntu启动项丢失问题

1. 项目概述:一个困扰无数双系统用户的经典“鬼打墙”

如果你正在经历“电脑装了Win10和Ubuntu双系统,开机直接黑屏,或者直接跳进Ubuntu,Windows选项消失”的窘境,那么恭喜你,你并不孤单。这几乎是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环境

  1. 情况A:能进入GRUB菜单,但有Ubuntu选项。

    • 开机时狂按Shift键(部分电脑是Esc键),直到出现GRUB菜单。选择“Ubuntu”启动即可。
  2. 情况B:黑屏,或直接进Windows,完全看不到GRUB。

    • 你需要制作一个Ubuntu安装U盘。从Ubuntu官网下载22.04 LTS的ISO镜像,用Rufus(Windows)或Startup Disk Creator(Ubuntu)工具将其写入U盘。
    • 插入U盘,开机按F2/F12/Del等键进入主板BIOS/UEFI设置。
    • 在“启动”(Boot)选项里,将U盘设为第一启动项,保存并重启。
    • 电脑会从U盘启动,进入Ubuntu安装界面。这时,不要选择“安装Ubuntu”,而是选择“试用Ubuntu”(Try Ubuntu)。这样你就会进入一个完整的、运行在内存中的Ubuntu桌面环境,可以执行所有修复命令。

3.2 确认启动模式与磁盘分区表

打开终端(Ctrl+Alt+T),我们通过几个命令来摸清家底。

1. 检查启动模式:

ls /sys/firmware/efi

如果这个目录存在,说明你当前是以UEFI模式启动的。如果不存在,则是传统BIOS(Legacy)模式。这是最关键的一步,因为UEFI和Legacy模式的修复方法有根本区别。现代电脑(2015年后)装Win10,绝大多数都是UEFI+GPT模式。

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是否能发现Windows:

sudo 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目录,进去后可能有MicrosoftUbuntu等子目录。

步骤2:检查并安装必要的工具确保os-probergrub-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

重启时,再次按ShiftEsc键呼出GRUB菜单。现在,你应该能看到一个新增的“Windows Boot Manager”或者类似的条目了。选择它,应该就能正常进入Windows 10。

4.2 方案B:针对传统BIOS(Legacy)+ 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-repair

sudo 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传递了错误的参数,或者显卡模式问题。

  1. 尝试在GRUB菜单中编辑启动项:在GRUB菜单选中Windows条目,按e键进入编辑模式。找到以chainloader开头的那一行,在其上一行添加:

    set root=(hd0,gpt1) # 确保这里指向你的ESP分区

    然后按F10启动。如果成功,可以将这个修改永久化到40_custom文件中。

  2. 禁用显卡驱动冲突(适用于Legacy模式或某些独显机器):在40_custom的Windows启动项里,chainloader行之前可以尝试添加:

    drivemap -s (hd0) ${root} # 交换磁盘驱动号,解决某些磁盘识别问题

    或者

    insmod vbe # 加载基本VESA显卡驱动

6. 修复后的优化与预防措施

成功修复后,为了避免问题再次发生,我强烈建议你进行以下设置。

6.1 设置GRUB为默认启动项并调整等待时间

进入Ubuntu系统,编辑GRUB主配置文件:

sudo nano /etc/default/grub

修改以下两行:

GRUB_DEFAULT=0 # 0表示默认选中第一个菜单项(通常是Ubuntu),可以改成`saved`并使用`grub-set-default`来记住上次选择 GRUB_TIMEOUT=10 # 菜单显示时间,单位秒,建议5-10秒

修改后,运行sudo update-grub使设置生效。

6.2 在Windows中禁用可能破坏GRUB的自动修复

Windows的“自动修复”功能有时会好心办坏事。我们可以通过组策略或注册表阻止它。

  • 方法一(专业版/企业版Windows):按Win+R,输入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。这需要借助EasyUEFI(Windows下)或efibootmgr(Linux下)工具来管理UEFI启动项。基本原理是,为Ubuntu的grubx64.efishimx64.efi文件在UEFI固件中创建一个独立的启动项。这样,开机时按F12等启动菜单键,你可以独立选择启动Windows还是Ubuntu,两者互不干扰。这种方法更干净,但设置稍复杂,且每次切换系统需要进BIOS菜单选择。

经过以上从诊断到修复,再到优化和预防的完整流程,你的Win10/Ubuntu双系统应该已经恢复了健康。这个问题的本质是操作系统之间引导管辖权的争夺,理解UEFI/ESP分区、GRUB配置生成机制这两个核心,就能以不变应万变。记住,在Linux世界里,终端和日志是你最好的朋友,遇到问题多查输出信息,冷静分析,大部分问题都能迎刃而解。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/4 15:09:50

C# Socket通讯:断线重连与文件传输的工业级实现

1. 项目概述:Socket通讯的核心价值与应用场景在工业控制、物联网和分布式系统中,可靠的双向通讯是系统稳定运行的基石。基于C#的Socket通讯实现,不仅能够满足基础的客户端与服务器数据交互需求,更通过断线重连机制和文件传输功能&…

作者头像 李华
网站建设 2026/8/4 15:09:29

SpringBoot+大数据技术构建老旧小区改造需求评估系统

1. 项目背景与核心价值 老旧小区改造是当前城市更新的重点工程,但传统人工调研方式存在数据采集效率低、需求分析主观性强等痛点。这个毕业设计项目通过SpringBoot大数据技术构建了一套科学的需求评估系统,我在实际开发中发现其核心价值在于:…

作者头像 李华
网站建设 2026/8/4 15:09:28

LinkSwift:九大网盘直链解析引擎的技术架构与实现原理

LinkSwift:九大网盘直链解析引擎的技术架构与实现原理 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

作者头像 李华
网站建设 2026/8/4 15:06:54

如何快速解锁加密音乐:3个简单步骤搞定平台限制

如何快速解锁加密音乐:3个简单步骤搞定平台限制 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://git…

作者头像 李华
网站建设 2026/8/4 15:06:54

关于高性能的那点事

关于高性能的那点事 在高并发、大数据时代,“高性能”早已不是可选项,而是生存底线。很多团队在业务初期只关注功能实现,等用户量上来后,却发现系统像老牛拉破车一样寸步难行。这里不聊玄学,只讲实战。我会用具体代码和…

作者头像 李华
网站建设 2026/8/4 15:02:12

选机构看设备资质服务链

正畸矫正该怎么选机构,不少打算整牙的朋友蹲攻略蹲到脱发都拿不准主意。面对不同机构给出的五花八门的矫正方案,要判断一家机构的专业程度和服务能力,确实得多维度好好考察。本文我只基于公开可查的机构信息,围绕设备配置、资质背…

作者头像 李华