通过Grub命令指定引导分区
起因:在公司服务器上装了Windows和Ubuntu双系统,Windows是自带的,Ubuntu是后装的。系统有两块硬盘,参照网上的教程从C盘和D盘分别压缩出200M和100G空间分给Ubuntu使用,安装时手动设置把200M挂载到/boot,把100G挂载到/,安装一切顺利,重启后可以看到Ubuntu带的Grub菜单,默认进入Ubuntu,还有一个选项是Windows Boot Manager可以进入Windows,选择Ubuntu进入Ubuntu正常,再次重启在Grub菜单选择进入Windows也正常,但是再次重启时Grub菜单消失了,直接进入了Windows,无法选择进入Ubuntu。
猜测是Windows Boot Manager会改写MBR(主引导记录)
MBR是硬盘上的一个扇区,包含了引导程序(的第一阶段)、分区表等信息。
引导程序第一阶段需要去MBR中去读引导程序,GRUB第二阶段需要到/boot分区读系统内核和配置文件。
而MBR中的程序包括了加载第二阶段的程序。
当我只有Windows系统时,MBR中的程序会启动Windows Boot Manager,在我安装了Ubuntu之后,MBR中的程序被修改成启动Ubuntu新分出来的那个/boot下的引导程序,然后可以通过菜单再去启动原来的Windows Boot Manager。
如果启动Windows Boot Manager后它修改了MBR让其中的程序在下次启动时加载自己,那么就跳过了选择进入Ubuntu的可能。
因为我们装Ubuntu只是为了测试,所以采取了临时的解决方式。通过Ubuntu的安装U盘启动,到选择安装Ubuntu的Grub菜单界面按c进入命令模式。
因为这时候插着一个U盘两块硬盘,不知道对应的编号,通过
1 | ls (hd0) |
这样的试探操作,可以根据硬盘上的分区数量和分区大小确定Ubuntu /boot对应的硬盘和分区编号
1 | (hd1, gpt3) 100G Ubuntu / |
手动指定加载已经安装的Ubuntu的Grub的配置文件/boot/grub/grub.cfg
即
1 | configfile (hd2, gpt5)/grub/grub.cfg |
会弹出选择菜单,就和MBR在引导第二阶段加载了Ubuntu的/boot一样,然后选择Ubuntu进入即可。
BTW:准备尝试还没有尝试的命令
1 | set root=(hd2, gpt5) |