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=0GRUB_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_TIMEOUTGRUB_TIMEOUT_STYLE
  2. 不显示Windows:开启 GRUB_DISABLE_OS_PROBER=falseupdate-grub
  3. 改坏引导进不去系统:用Ubuntu Live USB chroot救援恢复

补充说明

  • 适配 Ubuntu 20.04 / 22.04 / 24.04 所有版本
  • 每次改完grub配置必须执行 sudo update-grub 才生效
  • 双系统建议安全启动保持关闭,不要随意进BIOS改动
  • 修改grub前最好备份配置文件,防止引导损坏
相关推荐
tangwangbi9 小时前
Linux 系统配置文件:/etc/profile、~/.bashrc 和 ~/.bash_profile 三者之间的区别与作用
linux·运维·bash
Akiyama_Mio-Kon9 小时前
2026 最新:Dify 本地 Docker 部署完整教程(Windows + Git Bash)
windows·git·docker
蜀道山老天师9 小时前
Shell Bash变量与运算符(含条件测试与流程控制)
linux·运维·bash
Mr.朱鹏9 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
mengge.cloud9 小时前
存储技术基础小白教程
linux·运维·服务器·wpf·存储
霸道流氓气质10 小时前
Spring AI 输出解析器进阶
人工智能·windows·spring
tang7778910 小时前
反爬虫场景下代理IP池的动态扩容与失效IP自动清理方案实现
linux·服务器·网络·爬虫代理·住宅代理ip
新时代牛马11 小时前
Linux 系统调用与IPC 完整篇:从syscall 入口、VDSO 到pipe/shm/futex 选型
linux·运维·服务器
黄一一91124312 小时前
跨平台视频图片压缩互转!离线视频压缩工具!Github开源轻松无损压缩视频!Win/Mac/Linux三端通用开源工具
windows·macos·音视频·开源软件
fpcc13 小时前
计算机原理—Linux是如何加载可执行文件到内存
linux