1 问题描述
电脑上先安装了Windows10,后安装了Ubuntu22.04,在进入grub界面后找不到Windows选项(“Windows 10”,“Windows Boot Manager”等)。
而且,在ubuntu下,更新了grub, 即运行
sudo update-grub
之后也没用。
2 问题解决
经过一段时间折腾后,我认为最直接的方法就是修改grub配置:
在网上看到修改/boot/grub/grub.cfg 这一文件的方法,但是这种办法不是很好,因为文件里已经有提示:不要修改该文件!
而且也不稳定(update-grub之后文件中你修改的部分就消失了)。
这里我修改的是/etc/grub.d/40_custom 这一文件。在这个文件中,可添加自定义启动项。你可以用gedit或者kate这样的图形化程序打开,也可以在终端中用vim,nano等命令:
sudo vim /etc/grub.d/40_custom
sudo nano /etc/grub.d/40_custom
# 以上二者选其一
在文件最后另起一行,添加下述内容:
menuentry 'Win10' {
set root='(hd0,msdos1)'
chainloader +1
}
这里启动项的名字是“Win10”,可以改成你想要的其他名字。上面的(hd0,msdos1)是Windows启动引导文件的所在分区,请根据自身情况修改,具体看是在哪个分区,接下来会讲方法。
注意:修改这个文件会用到管理员权限。修改过后,运行
sudo update-grub
来更新grub配置,这之后重启系统即可在grub中看到启动项“Win10”,选择进入,然后即可成功启动Windows。
我的电脑是legacy启动模式,如果是UEFI,情况有所不同。同样打开
/etc/grub.d/40_custom,在其中添加以下内容:
menuentry 'Win10' {
set root='(hd0,gpt1)'
chainloader /EFI/MICROSOFT/BOOT/bootmgfw.efi
}
同理,(hd0,gpt1)是Windows启动引导的EFI文件的所在分区,也请根据自身情况修改。
3 找到引导分区编号的方法
前面提到了,在修改文件时会添加对应引导分区的编号,这个编号需要在grub命令行下获取。
在启动时,进入grub菜单后,按“C”键进入命令行模式,输入
ls -lh
可以查看到当前电脑上所有磁盘和分区,使用命令
ls -lh (hdx,msdosy)
# (x,y 的值可能是0,1,2,3等等)
一个一个找,如果发现某一个分区下,有bootmgr文件,那么就是这个分区了,记下其编号。
如果是UEFI,同理,只不过“msdos”可能会变成“gpt”, 如果发现EFI,接下来用命令
ls -lh (hdx,msdosy)/EFI/
如果发现MICROSOFT,那就可以确定这个是引导Windows的EFI分区了,记下这个分区的编号。