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磁盤的問題。
