win10和centos7双系统双磁盘引导的实现

1、背景:dell5460笔记本电脑M2-120G固态盘无法在bios中引导,新装了M360G固态盘后,考虑把120G固态盘安装centos7.5系统做深度学习开发机测试用,因dell5460笔记本有独立显卡NVDIA GT 630,可学习安装支持GPU的深度学习环境。

2、难点:使用网络引导顺利安装完centoos7.5系统后,发现无法直接进入centos7.5系统,使用网络引导的第一层菜单选择第二块磁盘也无法进入,只有进入gpxlinux.0的二层菜单,选择第二块磁盘引导才进入了centos系统。本想手动调整引导功能,过程中才发现,centos7.5是使用grub2引导系统,其与原来的grub有较大差别,原有grub是无法直接引导centos7.5系统的。使用easyBSD和BootICE软件折腾了两天也没有效果,使用easyBSD软件的“添加新条目”——“NeoGrub”功能虽然能添加菜单功能,但其核心仍然是grub,其命令chainloader +1命令是没法驱动grub2下的120G固态盘,因此,也无法实现引导。考虑到使用网络引导时,在gpxlinux.0的菜单下可实现120G固态盘的引导,使用bootice把gpxlinux.0作为引导文件配置进NeoGrub菜单,引导时提示不是PXE网络环境,也无法实现预想的功能。

3、解决思路:既然问题出在grub与grub2的不兼容上,考虑手动建立grub2的引导环境。在网上搜索grub2软件,发现有grub2win软件,可尝试去实现目标。

4、软件安装及配置:

(1)软件下载:Grub2Win.rar     #约3MB
(2)软件安装:解压后,运行安装程序,在c盘根目录会自动生成grub2目录,同时,在windows的BSD菜单中会新增一个条目“Grub 2 For Windows”,其指向的引导文件为“\grub2\g2bootmgr\gnugrub.kernel.bios”。
(3)软件配置:在grub2软件界面,点击“Manage Boot Menu”进入菜单配置界面,点击“Add A New Entry”,在Type项选择fedora或ubuntu等linux系统名称(该项中还没有centos的选项,但不影响使用),在“Automatically Generate Configuration Code For Fedore”标签栏中点选“Chainloader”,在对应的“Driver”选择为“1”,表示从第二块磁盘引导,注意,不要勾选“Partitior”,这是分区选择,因我需要的是系统从第二块磁盘的MBR引导,而不是从分区PBR引导。
查看C:\grub2\grub.cfg配置文件内容,引导第二块磁盘的配置如下:

...
#  Menu Entry 0       Fedora Linux
##  ** Grub will boot this entry by default **
#
menuentry   'Fedora Linux'       --class fedora   --class icon-fedora  {
     set gfxpayload=any
     set reviewpause=2
     set root='(hd1)'
     chainloader +1
savelast 0 'Fedora Linux'
echo Grub is now loading  Fedora Linux
}
...



5、测试:重启系统后,系统首先进入windows的bsd引导菜单,选择“Grub 2 For Windows”就会进入grub2win菜单,点击刚才建的“Fedora linux”菜单项,系统顺利进入引导centos7.5界面,双系统引导成功!
6、分析:
虽然双引导成功,但是,仔细想想道理不通,因为在这处应用中,不论是grub还是grub2,都是用于为了实现从第二块磁盘(120G固态盘)的MBR区引导系统,在功能上没有根本区别,grub和grub2的区别实质上是在PBR(分区引导扇区)上。在bsd中保留了前面配置的NeoGrub引导选项,因为其支持菜单配置功能。继续进行测试,无意中发现在实现第二块磁盘引导的菜单项改为如下形式后,成功引导第二块磁盘的centos7.5系统。

title 2HD
root (hd1,0)
chainloader (hd1)+1                    #此处,红色部分(hd1)是新加上的。

注:NeoGrub选项的引导文件NeoGrub.mbr和菜单文件menu.lst都在c:\NST目录下,是由easyBSD软件生成。


继续测试,把网络引导的第一层菜单的第二块磁盘引导脚本“chainloader +1”修改为“chainloader (hd1)+1”后,也能成功引导第二块磁盘了。如下:

title 从HDD1第一分区启动
rootnoverify (hd1,0)
makeactive
chainloader (hd1)+1         #此处,红色部分(hd1)是新加上的。


几种错误提示信息:

(1)“chainloader +1”的错误提示:Error 13:Invalid or unsupported executable format

(2) 在“chaniloader (hd1)+1”中增加空格,破坏格式,如“chainloader (hd1)+ 1”:Error 23:Error while parsing number

(3) 仿grub2,修改“root (hd1,0)”为“root (hd1)”:Error 17:Cannot mount selected partition

继续测试,发现“root (hd1,0)”修改为“root (hd1,1)”、“root (hd1,2)”、“root (hd1,3)”都能正常引导。这说明在grub中,root命令必须跟分区参数,而不能跟磁盘参数。


7、总结:

(1)本次工作对easyBSD和Bootice软件进一步熟悉,这两个软件结合可对windows的BSD进行灵活的修改调整。

(2)新学习了grub2win软件,对grub和grub2的功能区别有了一个初步的认识。

(3)试用了grub2win做引导菜单,解决了grub引导linux centos磁盘的问题。