Linux操作系統(tǒng)GRUB引導程序配置方法大全
1. GRUB 介紹
計算機在啟動的時候,首先由BIOS中的程序執(zhí)行自檢,自檢通過后,就根據(jù)CMOS
的配置找到第一個可啟動磁盤的MBR中的Boot Loader程序(一般在啟動盤的第一個物理扇區(qū),占416字節(jié)),并把控制權交給Boot
Loader,由Boot Loader進一步完成操作系統(tǒng)內核的加載。當Boot
Loader找到內核之后,就把控制權交給操作系統(tǒng)內核,由內核繼續(xù)完成系統(tǒng)的啟動。
可以看出,Boot Loader
是計算機啟動中第二個要執(zhí)行的程序,它是引導操作系統(tǒng)的關鍵程序??梢砸龑Р僮飨到y(tǒng)的Boot
Loader主要有LiLo、GRUB以及Windows下的MBR程序。其中,GRUB是目前使用最為廣泛,并且非常優(yōu)秀的一款啟動引導程序。
(1) GRUB特性
q 提供了圖形和文本兩種操作接口
q 提供文本格式可手工修改的配置文件
q 支持動態(tài)加載需要的模塊
q 可以移植到不同的平臺上
q 支持國際化語言,如英文,中文,日文漢文等多字節(jié)語言
q 跨平臺的安裝,允許從另一個平臺上安裝GRUB
q 支持rescue模式,可用于系統(tǒng)無法引導的情況
q 支持多種可執(zhí)行文件格式,支持各種a.out格式和ELF格式
q 多文件系統(tǒng)識別。如BSD FFS,DOS FAT16,F(xiàn)AT32和Linux ext2fs
q 支持壓縮文件的解壓縮。能夠解壓縮被gzip壓縮的文件
q 能夠使用BIOS所檢測到的全部RAM空間
q 支持硬盤的LBA模式,能夠訪問8GB以外的全部硬盤空間
q 支持網(wǎng)絡引導,可以通過TFTP協(xié)議從網(wǎng)絡上得到操作系統(tǒng)映象文件并引導
(2) GRUB對設備的命名
首先,GRUB對設備的命名必須包含在小括號(
)內;其次,GRUB不區(qū)分IDE硬盤和SCSI硬盤,統(tǒng)一使用hdx,其中x指定BIOS中硬盤的編號,并從0開始計數(shù),而且IDE硬盤編號小于
SCSI硬盤;第三,GRUB用fdx指定軟盤設備,x是軟盤驅動器號。下面是一些GRUB對設備命名的舉例:
q (fd0)表示第1個軟盤
q (hd0,1)表示第1個硬盤的第2個分區(qū)
q (hd0,0)/boot/vmlinuz表示第1個硬盤的第一個分區(qū)下的boot/目錄下的vmlinuz文件。如果沒有指定某個分區(qū),則表示使用整個設備,否則只使用指定的分區(qū)
q (hd0,2,a)專用于FreeBSD,F(xiàn)reeBSD有一個slice概念,把一個分區(qū)進一步分為幾個slice,此處指明是第1塊硬盤的第3個分區(qū)中的slice a
(3) GRUB的執(zhí)行流程
GRUB的工作原理如圖5.2所示。當系統(tǒng)加電后,固化在BIOS中的程序首先對系
統(tǒng)硬件進行自檢,自檢通過后,就加載啟動磁盤上的MBR,并將控制權交給MBR中的程序(stage1),stage1執(zhí)行,判斷自己是否GRUB,如果
是且配置了stage1_5,則加載stage1_5,否則就轉去加載啟動扇區(qū),接著,stage2被加載并執(zhí)行,由stage2借助stage1_5驅
動文件系統(tǒng),并查找grub.conf,顯示啟動菜單供用戶選擇,然后根據(jù)用戶的選擇或默認配置加載操作系統(tǒng)內核,并將控制權交給操作系統(tǒng)內核,由內核完
成操作系統(tǒng)的啟動。
從上面的敘述可以看出,GRUB涉及到幾個重要的文件:
第一個就是stage1。它被安裝在MBR扇區(qū)(0面0磁道的第1扇區(qū)),大小為512字節(jié)(446字節(jié)代碼+64字節(jié)分區(qū)表+2字節(jié)標志55AA),它負責加載存放于0面0道第2扇區(qū)的start程序。
第二個是stage1_5。stage1_5負責識別文件系統(tǒng)和加載stage2,
所以stage1_5往往有多個,以支持不同文件系統(tǒng)的讀取。在安裝GRUB的時候,GRUB會根據(jù)當前/boot/分區(qū)類型,加載相應的
stage1_5到0面0磁道的第3扇區(qū)。stage1_5是由start加載的。
第三個是stage2。它負責顯示啟動菜單和提供用戶交互接口,并根據(jù)用戶選擇或默認配置加載操作系統(tǒng)內核。同前兩個文件不同,stage2是存放在磁盤上/boot/grub下。
第四個是menu.lst(/boot/grub/grub.conf的鏈接)。
grub.conf是一個基于腳本的文本文件,其中包含菜單顯示的配置和各個操作系統(tǒng)的內核加載配置。GRUB根據(jù)grub.conf顯示啟動菜單,提供
同用戶交互界面。GRUB正是根據(jù)用戶選擇或默認配置和grub.conf的內核配置加載相應的內核程序,并把控制權交給內核程序,使得內核程序完成真正
的操作系統(tǒng)的啟動。
其它重要文件,GRUB除了上面敘述的主要文件之外,還包括支持交互功能的一些磁
盤程序。主要包括/sbin/下的grub、grub-install、grub-md5-crypt和grub-terminfo和
/usr/bin/mbchk,以及/boot/grub下的設備映像文件(device.map)和菜單背景圖像文件(splash.xpm.gz)。
通過上面的分析總結,可以很容易地看出,GRUB實際上包含兩部分,一部分被安裝
在磁盤的特殊扇區(qū),另外一部分則以文件的形式存在。要讓GRUB啟動操作系統(tǒng),就必須首先把GRUB的stage1和stage1_5(根據(jù)文件系統(tǒng)自動
選擇是否安裝)安裝到磁盤的特殊扇區(qū),另外,在磁盤的/boot/grub下存在有grub.conf、device.map等文件和支持交互的程序,而
且這些程序必須在PATH環(huán)境變量指定的路徑中。具備了這些知識,相信不管是安裝、配置、備份或修復GRUB都不是件很難的是情。下面,就來逐個講解這些
知識。
2. 編譯安裝GRUB
一般情況下,當完成Linux操作系統(tǒng)的安裝后,系統(tǒng)中已經(jīng)安裝好了LILO或
GRUB引導程序。由于系統(tǒng)出現(xiàn)故障或需要更換LILO為GRUB時,需全新或重新安裝GRUB。如何安裝和配置GRUB就是下面要介紹的內容。而有時
候,GRUB出現(xiàn)了故障,但并不需要重新安裝,從后面的內容中,讀者也可以讀到如何修復GRUB的知識。
(1) 下載安裝包
可以從ftp://alpha.gnu.org/gnu/grub/下載GRUB的源碼。具體安裝方法請參考下面的內容,這里的安裝過程都是在RHEL 4中進行的。
(2) 檢查是否安裝GRUB
#rpm -q grub
如果顯示grub-0.95-3.5或其它版本的GRUB的信息,說明系統(tǒng)已經(jīng)安裝了,則執(zhí)行如下命令首先將其卸載:
#rpm -e grub
(3) 編譯源碼安裝
a.) 編譯條件
要編譯GRUB的源代碼,系統(tǒng)必須具備以下條件:
q GCC2.95或者以上版本
q 安裝了GNU Make
q binutils2.9.1.0.23或者個更高版本
q Texinfo 4.0或者更高版本
q Autoconf 2.5x
q Automake 1.7 或者更高版本
b.) 編譯安裝
這里,假設下載的GRUB源代碼為grub-0.95.tar.gz,并放在~/(當前用戶的主目錄)下。通過編譯源代碼安裝GRUB的基本過程如下:
#tar -zxvf grub-0.95.tar.gz #解壓源代碼
#cd grub-0.95 #轉入grub目錄
#./configure #生成Makefile文件
#make install #編譯代碼并安裝
(4) 安裝GRUB到MBR
GRUB的工作目錄是在/boot/grub下,而make install并沒將其安裝到/boot/grub。所以,安裝完成后要執(zhí)行如下一些操作:
a) 把/usr/local/share/grub/i386-pc/目錄下的所有文件統(tǒng)統(tǒng)拷貝到/boot/grub/目錄下
#cp /usr/local/share/grub/i386-pc/* /boot/grub/
b) 在/boot/grub下創(chuàng)建grub.conf文件,并建立一個到grub.conf的軟鏈接menu.lst
#cd /boot/grub
#touch grub.conf
#ln -s grub.conf menu.lst
注意!如果已經(jīng)存在grub.conf,就最好不要再次創(chuàng)建,需要時直接修改即可。
c) 確認/usr/local/sbin和/usr/local/bin在PATH變量的值中,執(zhí)行如下命令檢查
#env |grep PATH
如果發(fā)現(xiàn)/usr/local/sbin和/usr/local/bin不在PATH變量中,可以通過如下命令修改:
#export PATH=$PATH /usr/local/sbin:/usr/local/bin
d) 安裝GRUB到MBR
GRUB在啟動中,被BIOS調用,只有放在MBR中才可以被調用,所以,GRUB要讓BIOS調用,就必須安裝在MBR中。實際上是將stage1安裝到MBR中,也可能根據(jù)文件系統(tǒng)選擇安裝了stage1_5。下面,提供幾個安裝GRUB的例子:
#grub-install /dev/hda //將GRUB安裝到第1塊IDE硬盤的MBR
#grub-install /dev/sda //將GRUB安裝到第1塊SCSI硬盤的MBR
#grub-install /dev/fd0 //將GRUB安裝到軟盤
#grub-install /dev/hda1 //將GRUB安裝到第1快硬盤的0扇區(qū),當用其它引導程序引導系統(tǒng)時,往往選擇這種方式,以免覆蓋其它引導程序。
e) 在GRUB的命令行模式下安裝GRUB
關于GRUB命令行模式及其操作方法請參考3小節(jié)的內容。在系統(tǒng)顯示啟動菜單時候按下c鍵,或者系統(tǒng)啟動后在命令行執(zhí)行/usr/sbin/grub程序,都可以進入GRUB的命令行模式。命令行模式下安裝GRUB的基本過程如下:
q 指定啟動設備
grub>root (hd0,0) #除了root后必須有空格,別的位置均不能有空格!
此處(hd0,0)是指第1塊硬盤的第1個分區(qū)。如果不能確定包含GRUB的stage1文件的分區(qū),可以通過find指令查找確定:
grub> find /boot/grub/stage1 #查找stage1
GRUB將會查找文件/boot/grub/stage1并顯示包含這個文件的設備名,這個設備就是上面要用到的設備。
q 安裝GRUB
grub> setup (hd0) #除了setup后必須有空格,別的位置均不能有空格!
這條命令將會在第1塊硬盤的MBR安裝GRUB,如果不想在MBR安裝GRUB,而是希望將GRUB安裝在某分區(qū)的引導扇區(qū)的話,可以用下面的命令安裝:
grub> setup (hd0,0) #除了setup后必須有空格,別的位置均不能有空格!
這將會在第1塊硬盤的第1個分區(qū)的引導扇區(qū)安裝GRUB。
q 退出GRUB
grub>quit
f) 重啟機器,新安裝的GRUB生效
3. GRUB的交互操作
為了方便用戶交互使用GRUB,GRUB提供了交互模式,下面分別作一介紹:
(1) 命令行模式
登陸Linux系統(tǒng)后,在命令行中輸入grub,便可以進入到命令行模式。如圖4-3所示。進入命令行模式后GRUB會給出一個命令提示符“grub>”,此時就可以鍵入命令,按回車執(zhí)行。此模式下允許類似于Bash shell的命令行編輯功能:
或 光標右移一個字符
或 光標左移一個字符
到這一行的開頭
或 到行尾
或 刪除光標處的字符
或 刪除光標左邊的字符
刪除光標右邊的所有字符(包括光標處的字符)
刪除光標左邊的所有字符(包括光標處的字符)
恢復上次刪除的字符串到光標位置
或 歷史記錄中的上一條命令
或 歷史記錄中的下一條命令
啟動時GRUB命令行模式在命令行模式下鍵有補全命令的功能,如果你敲入了命令的前一部分,鍵入系統(tǒng)將列出所有可能以你給出的字符串開頭的命令。如果你給出了命令,在命令參數(shù)的位置按下鍵,系統(tǒng)將給出這條命令的可能的參數(shù)列表。
在計算機啟動的時候,GRUB首先顯示啟動菜單,這是如果用戶按鍵盤的“c”鍵,便進入如圖4-4所示的命令行模式,它的操作和在Linux的命令行模式是一樣的。
(2) 菜單模式
系統(tǒng)在啟動時,如果找到/boot/grub/menu.lst,則grub顯示grub并進入菜單模式,如圖4-4所示。菜單模式下用戶可以選擇要啟動的操作系統(tǒng),或者修改配置。菜單的定義在menu.lst文件中,也可以從菜單模式按鍵進入命令行模式,并且可以按鍵從命令行模式返回菜單模式。菜單模式下按鍵將進入菜單編輯模式。
(3) 菜單編輯模式
菜單編輯模式用來對菜單項進行編輯改變,其界面和菜單模式的界面十分類似,不同的是菜單中顯示的是對應某個菜單項的命令列表。如果在編輯模式下按下,則取消所有當前對菜單的編輯并回到菜單模式下。在編輯模式下選中一個命令行,就可以對這條指令進行修改,修改完畢后按下回車,GRUB將提示你確認并完成修改。如果你想在當前命令列表中增加一條命令,按在當前命令的下面增加一條指令,按在當前命令前處增加一條指令,按刪除一條指令。
在實際中,菜單模式用于選擇要啟動的操作系
統(tǒng),菜單編輯模式用于臨時修改編輯啟動菜單,這樣的修改可疑通過命令寫入MBR活指定的分區(qū),但并不影響grub.conf。命令行模式也是一樣,可以通
過命令方式動態(tài)啟動一個操作系統(tǒng),同時也不影響grub.conf。所以,菜單編輯模式和命令行模式常常用來安裝GRUB到MBR或動態(tài)引導一個操作系
統(tǒng)。而GRUB的配置文件,則是系統(tǒng)啟動時GRUB程序必須加載的配置文件,這個文件中有關于GRUB的各種配置。不需要用戶每次啟動都執(zhí)行繁瑣的命令
了。
4. GRUB配置文件
grub.conf是GRUB的配置文件,其結構比較簡單,可以分為兩部分,第一步分是全局配置,另外一部分就是每個操作系統(tǒng)的啟動配置。其中可以有多個操作系統(tǒng)的菜單配置。下面就是一個具體的例子。
#=================/boot/grub/grub.conf文件范例==================
timeout 30 # 等待用戶選擇菜單項的時間(以秒計),超時則引導默認的選項
default 0 # 默認選項,第一項
fallback 1 # 如果第一項出錯,則啟動下面的后備選項
splashimage=(hd0,0)/grub/splash.xpm.gz #GRUB啟動畫面
#以下是啟動Linux的配置
titleRed Hat Linux Enterprise AS3 for syd168 #啟動項的菜單標題
root (hd0,0) #指定根文件系統(tǒng),第1塊硬盤第1個扇區(qū)中的/boot。
kernel /vmlinuz-2.4.18 ro root=LABEL=/ #內核在/boot中
initrd /initrd-2.4.18-14.img #啟動RAM盤在/boot下
#以下是啟動Windows的配置,如果只有Linux就不需要
title Windows2003 Enterprise for syd168 #Windows啟動菜單標題
root noverify(hd0,1) #該操作系統(tǒng)在hd0的第二分區(qū),不mount
chainloader +1 #從第一個硬盤的第二個分區(qū)引導Windows
#=================/boot/grub/grub.conf文件范例==================
上面的例子,只是簡單說明了GRUB中啟動Linux和Windows的配置方法。更多的啟動配置請參考下面內容。
5. 引導多系統(tǒng)配置
GRUB支持多操作系統(tǒng)引導。用GRUB引導后可以進入命令行模式或者菜單模式,可
以通過靈活的命令行模式選擇引導各個分區(qū)的操作系統(tǒng),指定引導參數(shù)。GRUB支持三種引導方法,一種是直接引導操作系統(tǒng)內核,另一種是通過
chainload進行間接引導,第三種就是通過網(wǎng)絡引導操作系統(tǒng)。
對于GRUB能夠支持的Linux,F(xiàn)reeBSD,OpenBSD,NetBSD,GUN Mach等可以通過直接引導完成,但是對于GRUB不支持的操作系統(tǒng)(如Windows),需要用第二種方法chainload來完成。下面就分別來看看這幾種引導方法:
(1) 直接引導
配置過程通常如下:
a) 用root命令設置包含操作系統(tǒng)內核的根設備
b) 用kernel命令裝載內核映象文件,如果這個內核引導的時有參數(shù)的話,可以直接將參數(shù)加在內核文件名的后面
c) 用module或modulenounzip裝載內核模塊
d) boot開始引導
(2) chainload引導
a) 設置GRUB的根設備,用rootnoverify (hdx,y)指定
b) 開始引導,用chainloader +1指定,此處“+1”是指示GRUB讀入分區(qū)的第一個扇區(qū)的引導記錄。
c) 執(zhí)行boot開始引導
以上是一般的chainloader方式,對于DOS和WINDOWS,可以簡單地用兩條指令進行引導:chainloader (hdx,y)+1,然后boot,其中x,y用來指明所在分區(qū)號。
(3) 從網(wǎng)絡引導:
為了使GRUB能夠支持從網(wǎng)絡引導,需要在編譯時打開網(wǎng)絡支持選項(請參考源文件中
的netboot/README.netboot)。另外,要在網(wǎng)絡中設置兩個服務:動態(tài)IP服務(BOOTP、DHCP或RARP)和FTP服務。然
后,分別針對不同的服務器BOOTP,DHCP或RARP運行bootp,dhcp或rarp。如果一切設置無誤的話GRUB就會給出IP,IP
netmask和TFTP服務器的IP和網(wǎng)關的IP地址。最后,從網(wǎng)上得到操作系統(tǒng)的映象文件。下面是一個例子:
grub> bootp
Probing...[NE*000]
NE2000 base ...
Address: 192.168.110.23 Netmask: 255.255.255.0
Server: 192.168.110.14 Gateway: 192.168.110.1
grub> root (nd)
grub> kernel /tftproot/gnumach.gz root=sd0s1
本文來自ChinaUnix博客,如果查看原文請點:
http://blog.chinaunix.net/u/17030/showart_348244.html