歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> GRUB 多系統引導

GRUB 多系統引導

日期:2017/2/28 17:14:02   编辑:Linux教程
1、多重操作系統引導管理器及工作原理;
系統啟動引導管理器,是在計算機啟動後運行的第一個程序,他是用來負責加載、傳輸控制到操作系統的內核,一旦把內核掛載,系統引導管理器的任務就算完成退出,系統引導的其它部份,比如系統的初始化及啟動過程則完全由內核來控制完成;
Briefly, boot loader is the first software program that runs when a computer starts. It is responsible for loading and transferring control to the operating system kernel software (such as the Hurd or the Linux). The kernel, in turn, initializes the rest of the operating system (e.g. GNU).
在X86 架構的機器中,Linux、BSD 或其它Unix類的操作系統中GRUB、LILO 是大家最為常用,應該說是主流;
Windows也有類似的工具NTLOADER;比如我們在機器中安裝了Windows 98後,我們再安裝一個Windows XP ,在機器啟動的會有一個菜單讓我們選擇進入是進入Windows 98 還是進入Windows XP。NTLOADER就是一個多系統啟動引導管理器,NTLOADER 同樣也能引導Linux,只是極為麻煩罷了;
在Powerpc 架構的機器中,如果安裝了Linux的Powerpc 版本,大多是用yaboot 多重引導管理器,比如Apple機目前用的是IBM Powerpc處理器,所以在如果想在Apple機上,安裝Macos 和Linux Powerpc 版本,大多是用yaboot來引導多個操作系統;
因為目前X86架構的機器仍是主流, 所以目前GRUB和LILO 仍然是我們最常用的多重操作系統引導管理器;
2、什麼是GRUB;為什麼我要選擇GRUB;
1)什麼是GRUB;
GNU GRUB 是一個多重操作系統啟動管理器。GNU GRUB 是由GRUB(GRand Unified Bootloader) 派生而來。GRUB 最初由Erich Stefan Boleyn 設計和應用;
GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand Unified Bootloader, which was originally designed and implemented by Erich Stefan Boleyn.
2)“GRUB太不好用”──對GRUB的認識的誤區;
GRUB真的不好用嗎?不是的,通過LinuxSir.Org 社區近四年來的運行,我發現了大多新手弟兄還是不太了解GRUB;當然這也有中文Linux社區的責任,雖然也有GRUB的中文譯本,初學Linux的弟兄可能有點看不懂;
我們欣喜的看到LinuxSir.Org 社區的好多弟兄都曾經或正在寫GRUB實踐文檔,也有的弟兄也總結了GRUB的一些基礎知識,比如 probing兄弟的 《GRUB 學習筆記》;由於每個人的寫文檔時風格不同,可能同一份文檔不同的人來寫就有不同的風格;所以今天也抖膽也一篇入門級的教程,由於北南不會寫高級教程,所以還得請高手弟兄指教,先謝過;
3)為什麼要選擇GRUB;
基於在X86架構的CPU而開發操作系統,系統引導管理器不僅僅有GRUB ,而且也有LILO,但對於多重系統引導管理器,你只能選擇其一而用;不能兩個同時使用;
目前這兩個多重系統引導管理器是大家最常用的,也是主流Linux發行版而采用的;有的弟兄喜歡GRUB;
主流發行版 Fedora、RedHat、CentOS等基於RPM包的系統,在最新版本中都默認GRUB引導;Slackware 目前仍采用LILO;而Debian發行版目前最新的版本也是采用GRUB;
從目前看來,GRUB有逐漸取代LILO之勢,GRUB 2.0正在開發之中;所以我們有理由用GRUB,我也有理由寫GRUB使用教程;
二、GRUB軟件包版本選擇和安裝;
1、GRUB的版本選擇,Linux版本的GRUB及Windows版本的GRUB的說明;
GRUB不但有Linux版本,也有Windows版本;現我們一一介紹;
如前面所說,目前在在Unix類的操作系統中,大多是都有GRUB;GRUB幾乎能引導所有X86架構的操作系統;功能之強,使用簡單是GRUB最大的賣點;由於Windows 操作系統的先入為主的優勢,使得大家對Windows的NTLOADER了解的比較多,而對開源社區的GRUB顯得有點寞生,由此而帶來使用上的“心理恐懼”;究其初學者對GRUB“恐懼”的主要原因還是對GRUB沒有太多的了解和深入;無論是WINGRUB還是Linux版本的GRUB,最方便的還是對 GRUB命令行的操作;一談到命令行(Command)的操作,可能初學者對此恐懼;其實沒有什麼難的,象北南這樣低級的寫手,還能操作得起來,您也應該能行;
2、GRUB的Windows版本WINGRUB;
請參考:《以WINGRUB 引導安裝Fedora 4.0 為例,詳述用WINGRUB來引導Linux的安裝》
3、GRUB的Linux版本軟件包的安裝;
其實對於Linux的GRUB,幾乎所有的Linux主流發行版都有打包,如果您安裝了Linux,並且在開機後出現GRUB字樣的,證明您已經安裝了GRUB;而無需再次安裝;Linux的GRUB軟件包安裝部份並不是本文的重點;
如果您的Linux系統沒有安裝GRUB,或者采用的是LILO,而您想用GRUB,可以用系統安裝盤自帶GRUB軟件包來安裝,或者到相關發行版本的軟件倉庫下載後安裝;
GRUB 的Linux版本目前在各大發行版中都有打包;比如Fedora/Redhat/Centos/Mandrive/Mandriva/SUSE等以RPM包管理機制的系統,可以通過如下的命令來安裝;
請參考《Fedora / Redhat 軟件包管理指南》
[root@localhost ~]# rpm -ivh grub*.rpm
如果是Slackware 您可以用如下的辦法來安裝;
[root@localhost ~]# installpkg grub*.tgz
其它的發行版本請用其自己特色的軟件包管理工具來安裝;
當然您也可以通過源碼包,在任何Linux的發行版上安裝;至於源碼包的安裝方法;
請參考:《如何編譯安裝源碼包軟件》
[root@localhost ~]#tar zxvf grub*.tar.gz
[root@localhost ~]#cd grub-xxx
[root@localhost ~]#./configure;make;make install
確認您是否成功安裝了GRUB,您可以測試是否有如下兩個命令;
[root@localhost ~]# grub
[root@localhost ~]# grub-install
如果您不能找到這兩個命令,可能您的可執行程序的路徑沒有設置;
請參考:《設置可執行程序路徑》,當然您可以用絕對路徑;比如下面的;
[root@localhost ~]# /usr/sbin/grub
[root@localhost ~]# /usr/sbin/grub-install
如果您還是找不到GRUB軟件包安裝在哪了;您可以用下面的命令來解決和查找;
[root@localhost ~]# updatedb 注:這個要花很長時間;是索引slocate 的庫,然後再通過locate來查找;
[root@localhost ~]# locate grub
比如找到的是有類似如下的;
[root@localhost ~]# locate grub
/sbin/grub-md5-crypt
/sbin/grub
/sbin/grub-install
/sbin/grub-terminfo
在一般情況下,在路徑中帶有bin或sbin中字樣的,這些路徑下都是可執行程序;sbin 是超級權限用戶才能使用的管理命令;要使用這些命令一般的情況下得切換到root用戶下才能使用;比如
[beinan@localhost ~]$ su - 注:切換到root用戶,並且切換到其家目錄;
Password:
[root@localhost ~]#/sbin/grub 注:用絕對路徑來運行grub命令;
三、在Linux中,GRUB的配置中的安裝和寫入硬盤的MBR;
1、在Linux中,GRUB配置過程中的安裝grub-install;
grub-install 命令有何用呢?其實就是把我們前面已經安裝的軟件包中的一些文件復制到 /boot/grub中;對於新安裝GRUB軟件包後,也是一個必經的過程;我們前面所說的GRUB軟件包的安裝;而現在我們說的是GRUB配置的過程中的安裝;雖然在洋文中都是install ,但表達的意思是不一樣的;
我們首先要運行 fdisk -l 來確認到底是硬盤的標識;
這個過程主要是確認硬盤的標識是哪個調備,到底是/dev/hda還是/dev/hdb 還是其它的;
[root@localhost ~]# fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 970 7791493+ 7 HPFS/NTFS
/dev/hda2 971 9729 70356667+ 5 Extended
/dev/hda5 971 2915 15623181 b W95 FAT32
/dev/hda6 2916 4131 9767488+ 83 Linux
/dev/hda7 4132 5590 11719386 83 Linux
/dev/hda8 5591 6806 9767488+ 83 Linux
/dev/hda9 6807 9657 22900626 83 Linux
/dev/hda10 9658 9729 578308+ 82 Linux swap / Solaris
如果通過fdisk -l 出現有/dev/hda字樣的,我們就要用下面的命令來安裝;
[root@localhost ~]# grub-install /dev/hda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/hda
如果是您fdisk -l 出現的有/dev/hdb呢,那就如下運行;
[root@localhost ~]# grub-install /dev/hdb
如果既有/dev/hda和/dev/hdb 就安裝到/dev/hda中;
[root@localhost ~]# grub-install /dev/hda
值得注意的是如果您有一個/boot分區,應該用如下的辦法來安裝;
[root@localhost ~]#grub-install --root-directory=/boot /dev/hda
[root@localhost ~]#grub-install --root-directory=/boot /dev/hdb
注解:具體是/dev/hda還是/dev/hdb,請以fdisk -l 為准;如果兩個都有,就看您把/boot分區是放在第一塊硬盤還是第二塊硬盤上了,以實際情況為准;
2、設定GRUB的/boot分區並寫入MBR;;
在Linux中,GRUB軟件包的安裝,及在配置過程中安裝grub到 /boot中還是不夠的, 還要把GRUB,寫入MBR才行;有時我們重新安裝了Windows,Windows會把MBR 重寫,這樣GRUB就消失了;如果您出現這樣的情況,就要進行這個過程;
[root@localhost ~]# grub
會出現grub>提示符,這是grub命令行模式 ,如果能在開機中出現提示符,沒有引導不起來的系統,除非您的系統破壞的極為嚴重。如果僅僅是GRUB被破壞了,GRUB命令行是能讓操作系統引導起來的;
接著看例子,我們要找到 /boot/grub/stage1的,在grub>後面輸入;
grub> find /boot/grub/stage1
(hd0,6)
(fd0) 注:這個是軟驅;現在很少用軟驅了,如果您有這方面的需要,自己看GRUB的DOC吧;
注解:
(hd0,6) 這是/boot所在的分區;不要誤解為是Linux 的/所在的分區,這是值得注意的;
(fd0) 注:這個是軟驅;現在很少用軟驅了,如果您有這方面的需要,自己看GRUB的DOC吧;
grub>root (hd0,6) 注:這是/boot所在的分區;
grub>setup (hd0) 注:把GRUB寫到MBR上;
注解:
上面這步驟是根據 find /boot/stage1而來的,仔細看一下就明白了;現在我們一般安裝很少會把/boot分區列為一個單獨的分區;不過有的弟兄可能也喜歡這麼做;所以還是有必要說一下為好;
四、GRUB的配置文件的menu.lst的寫法;
對於GRUB來說,如果沒有配置menu.lst,無論是Linux版本的GRUB,還是WINGRUB,都會有命令行可用,通過命令行是一樣能把操作系統引導起來的;有些弟兄總以為menu.lst 配��錯了,或者在機器啟動後出現grub>命令行模式就要重新安裝系統,其實根本沒有這個必要;只要學會GRUB的命令行的用法,根本沒有必要重裝系統;
menu.lst 位於/boot/grub目錄中,也就是/boot/grub/menu.lst 文件;您可以用vi或您喜歡的編輯器來編輯他;如果您不會用vi,還是去學習一下吧;簡單的用法怎麼也得會,對不對?畢竟這個文檔不是講vi的用法的;
有的弟兄會說,我沒有menu.lst怎麼辦?那就創建一個;用下面的命令;
[root@localhost ~]# touch /boot/grub/menu.lst
然後我們再做一個/boot/grub/menu.lst 的鏈接 /boot/grub/grub.conf
[root@localhost ~]# cd /boot/grub
[root@localhost ~]# ln -s menu.lst grub.conf
現在我們來寫GRUB的menu.lst了,因為/boot/grub/grub.conf是 /boot/grub/menu.lst的鏈接文件,改哪個都行。鏈接文件相當於Windows的快捷方式,這樣可能能更好的理解;
1、menu.lst的寫法之一;
首先我們看一下我的Fedora 4.0 中的/boot/grub/menu.lst 的內容;
default=0
timeout=5
#splashimage=(hd0,6)/boot/grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.11-1.1369_FC4)
root (hd0,6)
kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/
initrd /boot/initrd-2.6.11-1.1369_FC4.img
title WinXp
rootnoverify (hd0,0)
chainloader +1
注解:
default=0
default=0 是默認啟動哪個系統,從0開始;每個操作系統的啟動的定義都從title開始的,第一個title 在GRUB的啟動菜單上顯示為0,第二個啟動為1,以此類推;
timeout=5
注:表示在開機後,GRUB畫面出現幾秒後開始以默認啟動;如果在啟動時,移動上下鍵,則解除這一規則;
#splashimage=(hd0,6)/boot/grub/splash.xpm.gz 注:GRUB的背景畫面,這個是可選項;我不喜歡GRUB的背景畫面,所以加#號注掉,也可以刪除;
hiddenmenu
注解:隱藏GRUB的啟動菜單,這項也是可選的,也可以用#號注掉;
一般的情況下對Linux操作系統的啟動,一般要包括四行;title 行;root行;kernel 行;initrd 行;
1)在menu.lst中 ,通過 root (hd[0-n],y)來指定/boot 所在的分區;
title XXXXX 注:title 後面加一個空格,title 是小寫的,後面可以自己定義;比如FC4,自己定義一個名字就行;
root (hd[0-n],y) ,在本例中,我們看到的是root (hd0,6) ,root (hd[0-n],y)表示的是/boot所在的分區;有時我們安裝Linux的時候,大多是不設置/boot的,這時/boot和/所在的同一個分區;這個root (hd[0-n],y)很重要,因為/boot目錄中雖然有grub目錄,最為重要的是還有kernel 和initrd文件,這是Linux能啟動起來最為重要東西;
Copyright © Linux教程網 All Rights Reserved