如何让Grub2识别并显示三个Windows分区与一个Linux分区的四系统启动项
如何让Grub2识别并显示三个Windows分区与一个Linux分区的四系统启动项
我太懂你这种憋屈感了——辛辛苦苦装了Win98、WinXP、Win10再加Debian12的四系统,结果Grub2只认Debian和Win10,另外俩老Windows系统直接隐身了,完全不是你想要的全条目启动菜单对吧?
咱们先捋捋问题出在哪:Grub2的自动扫描工具os-prober对老Windows和Win10嵌套的启动链支持不太好,Win10把WinXP、Win98的引导入口藏在自己的启动菜单里,导致os-prober只能扫到最外层的Win10,没法穿透识别到嵌套的老系统。
下面给你两种解决思路,从简单到手动,一步步来:
方法一:启用并强制os-prober扫描所有分区
Debian12里os-prober可能默认没完全启用,先把它开足马力扫一遍:
- 打开Debian的终端,先确保
os-prober已经安装(没装的话先装):sudo apt update && sudo apt install os-prober - 编辑Grub的核心配置文件,启用系统扫描:
运行sudo nano /etc/default/grub,找到GRUB_DISABLE_OS_PROBER这一行,把它改成GRUB_DISABLE_OS_PROBER=false(如果这行被注释了就去掉前面的#,如果压根没有就直接加在文件末尾) - 保存退出后,更新Grub的配置:
sudo update-grub
这时候os-prober会重新扫描所有硬盘分区,大概率能把WinXP和Win98找出来,自动添加到启动菜单里。
方法二:手动添加Win98/WinXP的启动项(自动扫描失效时用)
如果上面的方法没效果,那咱们直接手动给Grub加启动条目,稳得一批:
- 先查清楚Win98(sda1)和WinXP(sda2)分区的UUID,终端里运行:
sudo blkid
从输出里找到对应分区的UUID="xxxxxx"内容,记下来。 - 编辑Grub的自定义配置文件:
运行sudo nano /etc/grub.d/40_custom,在文件末尾添加以下内容(把xxxxxx换成你刚才记的UUID):
注意:Win98是FAT32分区,所以用menuentry "Windows 98 (on /dev/sda1)" { insmod fat insmod search_fs_uuid search --fs-uuid --no-floppy --set=root xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx chainloader +1 } menuentry "Windows XP (on /dev/sda2)" { insmod ntfs insmod search_fs_uuid search --fs-uuid --no-floppy --set=root xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx chainloader +1 }insmod fat;WinXP是NTFS分区,用insmod ntfs,别搞混了。 - 保存退出后,再次更新Grub配置:
sudo update-grub
这时候重启电脑,Grub菜单里就会出现你手动添加的Win98和WinXP条目了。
额外提醒
如果手动添加后启动老Windows出错,大概率是UUID填错了,或者分区模块加载不对,再回去检查blkid的输出和配置里的内容就行。另外,Win98的引导比较老,确保你的硬盘是MBR格式(你已经说了没有UEFI,所以没问题),别搞成GPT,不然老Windows根本启动不了。
备注:内容来源于stack exchange,提问作者8192K
相关产品推荐
相关产品推荐

