Ubuntu+Windows双系统:解决GRUB不显示Windows启动项、一闪而过问题

Ubuntu+Windows双系统:解决GRUB菜单一闪而过、不显示Windows启动项

很多用户在安装Ubuntu和Windows双系统后,会遇到两个典型问题:

  1. 开机GRUB菜单一闪而过,来不及选择系统,直接进入Ubuntu;
  2. 即使调出GRUB菜单,也看不到Windows的启动选项,无法进入Windows系统。

本文以Ubuntu 24.04系统为例,详细讲解从排查到彻底解决这两个问题的完整步骤,同时附上常见报错分析、一键修复脚本,以及极端情况的Live USB救援方案,帮助双系统用户顺利切换系统、解决引导故障。

一、问题分析

1. 菜单一闪而过的原因

GRUB默认的配置中,部分版本会设置GRUB_TIMEOUT=0或GRUB_TIMEOUT_STYLE=hidden,导致开机菜单被隐藏或停留时间极短,用户来不及操作就直接进入默认系统(通常是Ubuntu)。

2. 不显示Windows启动项的原因

Ubuntu的GRUB配置中,默认禁用了os-prober工具,该工具用于探测系统中其他可引导的操作系统(如Windows),因此GRUB无法识别并添加Windows启动项,进而无法切换到Windows。

二、解决步骤

全程无需修改BIOS,安全启动保持关闭即可

步骤1:临时验证Windows是否可被探测

首先在Ubuntu终端执行下面命令:

bash 复制代码
sudo os-prober

如果输出类似下面内容,说明系统已经识别到Windows:

bash 复制代码
/dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi

步骤2:修改GRUB配置文件,开启菜单并启用os-prober

打开GRUB配置文件:

bash 复制代码
sudo nano /etc/default/grub

进入文件后,修改三项配置,直接复制粘贴下面三行替换原有对应行:

bash 复制代码
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=menu
GRUB_DISABLE_OS_PROBER=false

配置说明:

  • GRUB_TIMEOUT=10:开机菜单停留10秒,足够选择系统
  • GRUB_TIMEOUT_STYLE=menu:强制显示GRUB菜单,不再隐藏
  • GRUB_DISABLE_OS_PROBER=false:允许GRUB自动探测Windows系统

编辑完成:

按 Ctrl+X → 按 Y → 回车 保存退出。

步骤3:更新GRUB配置生效

bash 复制代码
sudo update-grub

正常会输出类似:

复制代码
Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings ...
done

步骤4:重启验证

bash 复制代码
reboot

开机就能看到GRUB菜单停留10秒,选项如下:

  • Ubuntu
  • Advanced options for Ubuntu
  • Windows Boot Manager

上下键选中 Windows 回车即可进入。

三、进阶:设置默认启动系统

  1. 先记住GRUB菜单序号(从0开始)

    一般顺序:

    0:Ubuntu

    1:高级选项

    2:Windows Boot Manager

  2. 再次打开配置文件

bash 复制代码
sudo nano /etc/default/grub
  1. 修改默认项
    把
bash 复制代码
GRUB_DEFAULT=saved

改成(Windows是第2项就写2):

bash 复制代码
GRUB_DEFAULT=2
  1. 保存并更新
bash 复制代码
sudo update-grub

重启后默认直接进Windows。

四、常见报错日志分析与解决方案

报错1

bash 复制代码
Warning: os-prober will not be executed to detect other bootable partitions

原因:禁用了系统探测功能。

解决:

  1. 编辑配置
bash 复制代码
sudo nano /etc/default/grub
  1. 确保是下面这行(去掉前面#号)
bash 复制代码
GRUB_DISABLE_OS_PROBER=false
  1. 更新配置
bash 复制代码
sudo update-grub

报错2:执行 os-prober 无任何输出

原因:

  • Windows EFI分区未挂载
  • Ubuntu和Windows引导模式一个UEFI、一个Legacy

解决:

bash 复制代码
ls /sys/firmware/efi
lsblk
sudo mkdir -p /mnt/efi
sudo mount /dev/nvme0n1p1 /mnt/efi
sudo os-prober

报错3:改完配置仍不显示Windows

bash 复制代码
sudo grub-mkconfig -o /boot/grub/grub.cfg

重启测试,不行就看后面Live USB救援方案。

五、一键修复脚本(懒人必备)

新建 fix_grub.sh,粘贴以下全部代码:

bash 复制代码
#!/bin/bash
# 备份原始GRUB配置文件,防止修改错误无法恢复
sudo cp /etc/default/grub /etc/default/grub.bak
echo "已备份原始GRUB配置文件为/etc/default/grub.bak"

# 自动修改GRUB配置文件:启用os-prober、设置菜单停留10秒、强制显示菜单
sudo sed -i 's/^#GRUB_DISABLE_OS_PROBER=false/GRUB_DISABLE_OS_PROBER=false/' /etc/default/grub
sudo sed -i 's/GRUB_TIMEOUT=.*/GRUB_TIMEOUT=10/' /etc/default/grub
sudo sed -i 's/GRUB_TIMEOUT_STYLE=.*/GRUB_TIMEOUT_STYLE=menu/' /etc/default/grub
echo "已修改GRUB配置文件,启用os-prober并设置菜单停留时间为10秒"

# 更新GRUB配置,使修改生效
sudo update-grub
echo "GRUB配置已更新,重启电脑即可生效"

执行命令:

bash 复制代码
chmod +x fix_grub.sh
sudo ./fix_grub.sh
sudo reboot

六、极端情况:修改GRUB后系统无法启动(Live USB救援)

前提准备

  1. 准备和你同版本的Ubuntu镜像,制作UEFI模式U盘启动盘
  2. 插入故障电脑,U盘启动,选择 Try Ubuntu without installing

救援操作

进入试用桌面,打开终端依次执行:

bash 复制代码
lsblk
sudo mount /dev/nvme0n1p5 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

sudo chroot /mnt

恢复原有配置:

bash 复制代码
cp /etc/default/grub.bak /etc/default/grub

重新更新引导:

bash 复制代码
sudo update-grub
sudo grub-install /dev/nvme0n1

退出并重启:

bash 复制代码
exit
sudo umount /mnt/boot/efi
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt
sudo reboot

拔掉U盘,正常双系统恢复。

七、总结

  1. 菜单一闪而过:修改 GRUB_TIMEOUT、GRUB_TIMEOUT_STYLE
  2. 不显示Windows:开启 GRUB_DISABLE_OS_PROBER=false 并 update-grub
  3. 改坏引导进不去系统:用Ubuntu Live USB chroot救援恢复

补充说明

  • 适配 Ubuntu 20.04 / 22.04 / 24.04 所有版本
  • 每次改完grub配置必须执行 sudo update-grub 才生效
  • 双系统建议安全启动保持关闭,不要随意进BIOS改动
  • 修改grub前最好备份配置文件,防止引导损坏
相关推荐
梦帮科技26 分钟前
Web 漏洞攻防深度:WAF 规则逃逸技术(畸形分块传输、双重编码)与对抗加固
linux·前端·网络安全·ssl·web
for_ever_love__32 分钟前
忠实度(Faithfulness):怎么判断 RAG 的答案有没有瞎编
linux·rag·评估·答案·faithfulness·原文·忠实度
是我知白哒33 分钟前
下载的图片Windows上无法设置为屏保如何解决
windows
Vex2une40 分钟前
获取 PowerToys - 从系统外挂工具到开源效率平台
windows·开源·效率工具·powertoys·fancyzones·command palette·键盘管理器
程序员-Benothing43 分钟前
Linux系统监控工具全家桶:sar、dstat、glances、Prometheus
linux·运维·prometheus
瑞克-桑切斯2 小时前
13、DNS、DHCP 与 FTP 协议详解
linux·运维·云计算
程序员-Benothing2 小时前
Linux性能分析方法论:USE、RED、火焰图与perf实战
linux·运维·服务器
骇客野人2 小时前
Windows 安全清理临时文件 bat 脚本
windows·安全
云中双月2 小时前
瑞芯微rv1106进入Loader模式转储emmc数据
linux·嵌入式·uboot·u-boot·emmc·rockchip·烧录·rv1106·瑞芯微
yunwei372 小时前
eBPF 入门实践教程:BPF Token,安全的委托式权限与程序加载
linux·后端·性能优化