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