Ubuntu+Windows双系统:解决GRUB菜单一闪而过、不显示Windows启动项
很多用户在安装Ubuntu和Windows双系统后,会遇到两个典型问题:
- 开机GRUB菜单一闪而过,来不及选择系统,直接进入Ubuntu;
- 即使调出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 回车即可进入。
三、进阶:设置默认启动系统
-
先记住GRUB菜单序号(从0开始)
一般顺序:
0:Ubuntu
1:高级选项
2:Windows Boot Manager
-
再次打开配置文件
bash
sudo nano /etc/default/grub
- 修改默认项
把
bash
GRUB_DEFAULT=saved
改成(Windows是第2项就写2):
bash
GRUB_DEFAULT=2
- 保存并更新
bash
sudo update-grub
重启后默认直接进Windows。
四、常见报错日志分析与解决方案
报错1
bash
Warning: os-prober will not be executed to detect other bootable partitions
原因:禁用了系统探测功能。
解决:
- 编辑配置
bash
sudo nano /etc/default/grub
- 确保是下面这行(去掉前面#号)
bash
GRUB_DISABLE_OS_PROBER=false
- 更新配置
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救援)
前提准备
- 准备和你同版本的Ubuntu镜像,制作UEFI模式U盘启动盘
- 插入故障电脑,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盘,正常双系统恢复。
七、总结
- 菜单一闪而过:修改
GRUB_TIMEOUT、GRUB_TIMEOUT_STYLE - 不显示Windows:开启
GRUB_DISABLE_OS_PROBER=false并update-grub - 改坏引导进不去系统:用Ubuntu Live USB chroot救援恢复
补充说明
- 适配 Ubuntu 20.04 / 22.04 / 24.04 所有版本
- 每次改完grub配置必须执行
sudo update-grub才生效 - 双系统建议安全启动保持关闭,不要随意进BIOS改动
- 修改grub前最好备份配置文件,防止引导损坏