You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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可能默认没完全启用,先把它开足马力扫一遍:

  1. 打开Debian的终端,先确保os-prober已经安装(没装的话先装):
    sudo apt update && sudo apt install os-prober
  2. 编辑Grub的核心配置文件,启用系统扫描:
    运行sudo nano /etc/default/grub,找到GRUB_DISABLE_OS_PROBER这一行,把它改成GRUB_DISABLE_OS_PROBER=false(如果这行被注释了就去掉前面的#,如果压根没有就直接加在文件末尾)
  3. 保存退出后,更新Grub的配置:
    sudo update-grub
    这时候os-prober会重新扫描所有硬盘分区,大概率能把WinXP和Win98找出来,自动添加到启动菜单里。

方法二:手动添加Win98/WinXP的启动项(自动扫描失效时用)

如果上面的方法没效果,那咱们直接手动给Grub加启动条目,稳得一批:

  1. 先查清楚Win98(sda1)和WinXP(sda2)分区的UUID,终端里运行:
    sudo blkid
    从输出里找到对应分区的UUID="xxxxxx"内容,记下来。
  2. 编辑Grub的自定义配置文件:
    运行sudo nano /etc/grub.d/40_custom,在文件末尾添加以下内容(把xxxxxx换成你刚才记的UUID):
    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
    }
    
    注意:Win98是FAT32分区,所以用insmod fat;WinXP是NTFS分区,用insmod ntfs,别搞混了。
  3. 保存退出后,再次更新Grub配置:
    sudo update-grub
    这时候重启电脑,Grub菜单里就会出现你手动添加的Win98和WinXP条目了。

额外提醒

如果手动添加后启动老Windows出错,大概率是UUID填错了,或者分区模块加载不对,再回去检查blkid的输出和配置里的内容就行。另外,Win98的引导比较老,确保你的硬盘是MBR格式(你已经说了没有UEFI,所以没问题),别搞成GPT,不然老Windows根本启动不了。

备注:内容来源于stack exchange,提问作者8192K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:58:10