GRUB 配置大全-syd168

1.          GRUB 介紹

計算機在啓動的時候,首先由BIOS中的程序執行自檢,自檢通過後,就根據CMOS的配置找到第一個可啓動磁盤的MBR中的Boot Loader程序(一般在啓動盤的第一個物理扇區,佔416字節),並把控制權交給Boot Loader,由Boot Loader進一步完成操作系統內核的加載。當Boot Loader找到內核之後,就把控制權交給操作系統內核,由內核繼續完成系統的啓動。

可以看出,Boot Loader 是計算機啓動中第二個要執行的程序,它是引導操作系統的關鍵程序。可以引導操作系統的Boot Loader主要有LiLoGRUB以及Windows下的MBR程序。其中,GRUB是目前使用最爲廣泛,並且非常優秀的一款啓動引導程序。

(1)       GRUB特性

q 提供了圖形和文本兩種操作接口

q 提供文本格式可手工修改的配置文件

q 支持動態加載需要的模塊

q 可以移植到不同的平臺上

q 支持國際化語言,如英文,中文,日文漢文等多字節語言

q 跨平臺的安裝,允許從另一個平臺上安裝GRUB

q 支持rescue模式,可用於系統無法引導的情況

q 支持多種可執行文件格式,支持各種a.out格式和ELF格式

q 多文件系統識別。如BSD FFSDOS FAT16FAT32Linux ext2fs

q 支持壓縮文件的解壓縮。能夠解壓縮被gzip壓縮的文件

q 能夠使用BIOS所檢測到的全部RAM空間

q 支持硬盤的LBA模式,能夠訪問8GB以外的全部硬盤空間

q 支持網絡引導,可以通過TFTP協議從網絡上得到操作系統映象文件並引導

(2)       GRUB對設備的命名

首先,GRUB對設備的命名必須包含在小括號( )內;其次,GRUB不區分IDE硬盤和SCSI硬盤,統一使用hdx,其中x指定BIOS中硬盤的編號,並從0開始計數,而且IDE硬盤編號小於SCSI硬盤;第三,GRUBfdx指定軟盤設備,x是軟盤驅動器號。下面是一些GRUB對設備命名的舉例:

q (fd0)表示第1個軟盤

q (hd0,1)表示第1個硬盤的第2個分區

q (hd0,0)/boot/vmlinuz表示第1個硬盤的第一個分區下的boot/目錄下的vmlinuz文件。如果沒有指定某個分區,則表示使用整個設備,否則只使用指定的分區

q (hd0,2,a)專用於FreeBSDFreeBSD有一個slice概念,把一個分區進一步分爲幾個slice,此處指明是第1塊硬盤的第3個分區中的slice a

(3)       GRUB的執行流程

GRUB的工作原理如圖5.2所示。當系統加電後,固化在BIOS中的程序首先對系統硬件進行自檢,自檢通過後,就加載啓動磁盤上的MBR,並將控制權交給MBR中的程序(stage1)stage1執行,判斷自己是否GRUB,如果是且配置了stage1_5,則加載stage1_5,否則就轉去加載啓動扇區,接着,stage2被加載並執行,由stage2藉助stage1_5驅動文件系統,並查找grub.conf,顯示啓動菜單供用戶選擇,然後根據用戶的選擇或默認配置加載操作系統內核,並將控制權交給操作系統內核,由內核完成操作系統的啓動。

4-2 GRUB執行流程

從上面的敘述可以看出,GRUB涉及到幾個重要的文件:

第一個就是stage1。它被安裝在MBR扇區(00磁道的第1扇區),大小爲512字節(446字節代碼+64字節分區表+2字節標誌55AA),它負責加載存放於00道第2扇區的start程序。

第二個是stage1_5stage1_5負責識別文件系統和加載stage2,所以stage1_5往往有多個,以支持不同文件系統的讀取。在安裝GRUB的時候,GRUB會根據當前/boot/分區類型,加載相應的stage1_500磁道的第3扇區。stage1_5是由start加載的。

第三個是stage2。它負責顯示啓動菜單和提供用戶交互接口,並根據用戶選擇或默認配置加載操作系統內核。同前兩個文件不同,stage2是存放在磁盤上/boot/grub下。

第四個是menu.lst(/boot/grub/grub.conf的鏈接)grub.conf是一個基於腳本的文本文件,其中包含菜單顯示的配置和各個操作系統的內核加載配置。GRUB根據grub.conf顯示啓動菜單,提供同用戶交互界面。GRUB正是根據用戶選擇或默認配置和grub.conf的內核配置加載相應的內核程序,並把控制權交給內核程序,使得內核程序完成真正的操作系統的啓動。

其它重要文件,GRUB除了上面敘述的主要文件之外,還包括支持交互功能的一些磁盤程序。主要包括/sbin/下的grubgrub-installgrub-md5-cryptgrub-terminfo/usr/bin/mbchk,以及/boot/grub下的設備映像文件(device.map)和菜單背景圖像文件(splash.xpm.gz)

通過上面的分析總結,可以很容易地看出,GRUB實際上包含兩部分,一部分被安裝在磁盤的特殊扇區,另外一部分則以文件的形式存在。要讓GRUB啓動操作系統,就必須首先把GRUBstage1stage1_5(根據文件系統自動選擇是否安裝)安裝到磁盤的特殊扇區,另外,在磁盤的/boot/grub下存在有grub.confdevice.map等文件和支持交互的程序,而且這些程序必須在PATH環境變量指定的路徑中。具備了這些知識,相信不管是安裝、配置、備份或修復GRUB都不是件很難的是情。下面,就來逐個講解這些知識。

2.          編譯安裝GRUB

一般情況下,當完成Linux操作系統的安裝後,系統中已經安裝好了LILOGRUB引導程序。由於系統出現故障或需要更換LILOGRUB時,需全新或重新安裝GRUB。如何安裝和配置GRUB就是下面要介紹的內容。而有時候,GRUB出現了故障,但並不需要重新安裝,從後面的內容中,讀者也可以讀到如何修復GRUB的知識。

(1)       下載安裝包

可以從ftp://alpha.gnu.org/gnu/grub/下載GRUB的源碼。具體安裝方法請參考下面的內容,這裏的安裝過程都是在RHEL 4中進行的。

(2)       檢查是否安裝GRUB

#rpm  -q  grub

如果顯示grub-0.95-3.5或其它版本的GRUB的信息,說明系統已經安裝了,則執行如下命令首先將其卸載:

#rpm  -e  grub

(3)       編譯源碼安裝

a.)        編譯條件

要編譯GRUB的源代碼,系統必須具備以下條件:

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)       安裝GRUBMBR

GRUB的工作目錄是在/boot/grub下,而make install並沒將其安裝到/boot/grub。所以,安裝完成後要執行如下一些操作:

a)   /usr/local/share/grub/i386-pc/目錄下的所有文件統統拷貝到/boot/grub/目錄下

#cp  /usr/local/share/grub/i386-pc/*  /boot/grub/

b)  /boot/grub下創建grub.conf文件,並建立一個到grub.conf的軟鏈接menu.lst

#cd  /boot/grub

#touch  grub.conf

#ln  -s  grub.conf  menu.lst

注意!如果已經存在grub.conf,就最好不要再次創建,需要時直接修改即可。

c)   確認/usr/local/sbin/usr/local/binPATH變量的值中,執行如下命令檢查

#env  |grep  PATH

如果發現/usr/local/sbin/usr/local/bin不在PATH變量中,可以通過如下命令修改:

#export  PATH=$PATH /usr/local/sbin:/usr/local/bin

d)  安裝GRUBMBR

GRUB在啓動中,被BIOS調用,只有放在MBR中才可以被調用,所以,GRUB要讓BIOS調用,就必須安裝在MBR中。實際上是將stage1安裝到MBR中,也可能根據文件系統選擇安裝了stage1_5。下面,提供幾個安裝GRUB的例子:

#grub-install  /dev/hda       //GRUB安裝到第1IDE硬盤的MBR

#grub-install  /dev/sda                  //GRUB安裝到第1SCSI硬盤的MBR

#grub-install  /dev/fd0                  //GRUB安裝到軟盤

#grub-install  /dev/hda1      //GRUB安裝到第1快硬盤的0扇區,當用其它引導程序引導系統時,往往選擇這種方式,以免覆蓋其它引導程序。

e)   GRUB的命令行模式下安裝GRUB

關於GRUB命令行模式及其操作方法請參考3小節的內容。在系統顯示啓動菜單時候按下c鍵,或者系統啓動後在命令行執行/usr/sbin/grub程序,都可以進入GRUB的命令行模式。命令行模式下安裝GRUB的基本過程如下:

q  指定啓動設備

grub>root  (hd0,0)                       #除了root後必須有空格,別的位置均不能有空格!

此處(hd00)是指第1塊硬盤的第1個分區。如果不能確定包含GRUBstage1文件的分區,可以通過find指令查找確定:

grub> find  /boot/grub/stage1    #查找stage1

GRUB將會查找文件/boot/grub/stage1並顯示包含這個文件的設備名,這個設備就是上面要用到的設備。

q  安裝GRUB

grub> setup  (hd0)                       #除了setup後必須有空格,別的位置均不能有空格!

這條命令將會在第1塊硬盤的MBR安裝GRUB,如果不想在MBR安裝GRUB,而是希望將GRUB安裝在某分區的引導扇區的話,可以用下面的命令安裝:

grub> setup (hd0,0)                    #除了setup後必須有空格,別的位置均不能有空格!

這將會在第1塊硬盤的第1個分區的引導扇區安裝GRUB

q  退出GRUB

grub>quit

f)    重啓機器,新安裝的GRUB生效

3.          GRUB的交互操作

爲了方便用戶交互使用GRUBGRUB提供了交互模式,下面分別作一介紹:

(1)       命令行模式

登陸Linux系統後,在命令行中輸入grub,便可以進入到命令行模式。如圖4-3所示。進入命令行模式後GRUB會給出一個命令提示符grub>,此時就可以鍵入命令,按回車執行。此模式下允許類似於Bash shell的命令行編輯功能:

q  <C-f><右箭頭鍵> 光標右移一個字符

q  <C-b><左箭頭鍵> 光標左移一個字符

q  <C-a><HOME> 到這一行的開頭

q  <C-e><END> 到行尾

q  <C-d><DEL> 刪除光標處的字符

q  <C-h><BackSpace> 刪除光標左邊的字符

q  <C-k> 刪除光標右邊的所有字符(包括光標處的字符)

q  <C-u> 刪除光標左邊的所有字符(包括光標處的字符)

q  <C-y> 恢復上次刪除的字符串到光標位置

q  <C-p><向上鍵> 歷史記錄中的上一條命令

q  <C-n><向下鍵> 歷史記錄中的下一條命令

4-2 啓動時GRUB命令行模式

在命令行模式下<tab>鍵有補全命令的功能,如果你敲入了命令的前一部分,鍵入<tab>系統將列出所有可能以你給出的字符串開頭的命令。如果你給出了命令,在命令參數的位置按下<tab>鍵,系統將給出這條命令的可能的參數列表。

在計算機啓動的時候,GRUB首先顯示啓動菜單,這是如果用戶按鍵盤的“c”鍵,便進入如圖4-4所示的命令行模式,它的操作和在Linux的命令行模式是一樣的。

(2)       菜單模式

系統在啓動時,如果找到/boot/grub/menu.lst,則grub顯示grub並進入菜單模式,如圖4-4所示。菜單模式下用戶可以選擇要啓動的操作系統,或者修改配置。菜單的定義在menu.lst文件中,也可以從菜單模式按<c>鍵進入命令行模式,並且可以按<ESC>鍵從命令行模式返回菜單模式。菜單模式下按<e>鍵將進入菜單編輯模式。

(3)       菜單編輯模式

菜單編輯模式用來對菜單項進行編輯改變,其界面和菜單模式的界面十分類似,不同的是菜單中顯示的是對應某個菜單項的命令列表。如果在編輯模式下按下<ESC>,則取消所有當前對菜單的編輯並回到菜單模式下。在編輯模式下選中一個命令行,就可以對這條指令進行修改,修改完畢後按下回車GRUB將提示你確認並完成修改。如果你想在當前命令列表中增加一條命令,按<o>在當前命令的下面增加一條指令,按<O>在當前命令前處增加一條指令,按<d>刪除一條指令。

在實際中,菜單模式用於選擇要啓動的操作系統,菜單編輯模式用於臨時修改編輯啓動菜單,這樣的修改可疑通過命令寫入MBR活指定的分區,但並不影響grub.conf。命令行模式也是一樣,可以通過命令方式動態啓動一個操作系統,同時也不影響grub.conf。所以,菜單編輯模式和命令行模式常常用來安裝GRUBMBR或動態引導一個操作系統。而GRUB的配置文件,則是系統啓動時GRUB程序必須加載的配置文件,這個文件中有關於GRUB的各種配置。不需要用戶每次啓動都執行繁瑣的命令了。

4.          GRUB配置文件

grub.confGRUB的配置文件,其結構比較簡單,可以分爲兩部分,第一步分是全局配置,另外一部分就是每個操作系統的啓動配置。其中可以有多個操作系統的菜單配置。下面就是一個具體的例子。

#=================/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) #指定根文件系統,第1塊硬盤第1個扇區中的/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)                               #該操作系統在hd0的第二分區,不mount

chainloader  +1                                                    #從第一個硬盤的第二個分區引導Windows

 

#=================/boot/grub/grub.conf文件範例==================

上面的例子,只是簡單說明了GRUB中啓動LinuxWindows的配置方法。更多的啓動配置請參考下面內容。

5.          引導多系統配置

GRUB支持多操作系統引導。用GRUB引導後可以進入命令行模式或者菜單模式,可以通過靈活的命令行模式選擇引導各個分區的操作系統,指定引導參數。GRUB支持三種引導方法,一種是直接引導操作系統內核,另一種是通過chainload進行間接引導,第三種就是通過網絡引導操作系統。

對於GRUB能夠支持的LinuxFreeBSDOpenBSDNetBSDGUN Mach可以通過直接引導完成,但是對於GRUB不支持的操作系統(如Windows),需要用第二種方法chainload來完成。下面就分別來看看這幾種引導方法:

(1)       直接引導

配置過程通常如下:

a)   root命令設置包含操作系統內核的根設備

b)  kernel命令裝載內核映象文件,如果這個內核引導的時有參數的話,可以直接將參數加在內核文件名的後面

c)   modulemodulenounzip裝載內核模塊

d)  boot開始引導

(2)       chainload引導

a)   設置GRUB的根設備,用rootnoverify (hdxy)指定

b)  開始引導,用chainloader  +1指定,此處“+1”是指示GRUB讀入分區的第一個扇區的引導記錄。

c)   執行boot開始引導

以上是一般的chainloader方式,對於DOSWINDOWS,可以簡單地用兩條指令進行引導:chainloader (hdxy)+1,然後boot,其中xy用來指明所在分區號。

(3)       從網絡引導:

爲了使GRUB能夠支持從網絡引導,需要在編譯時打開網絡支持選項(請參考源文件中的netboot/README.netboot)。另外,要在網絡中設置兩個服務:動態IP服務(BOOTPDHCPRARPFTP服務。然後,分別針對不同的服務器BOOTPDHCPRARP運行bootpdhcprarp。如果一切設置無誤的話GRUB就會給出IPIP netmaskTFTP服務器的IP和網關的IP地址。最後,從網上得到操作系統的映象文件。下面是一個例子

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

grub> module /tftproot/serverboot.gz

grub> boot

(4)       操作系統引導距離

a)     GNU/Linux

grub> root (hd13)

grub> kernel /vmlinuz root=/dev/hda1

如果你需要指定內核啓動參數的話,可以直接加到命令的最後面如:

grub> kernel /vmlinuz root=/dev/hda1 vga=ext

如果你使用initrd的話,在kernel命令之後執行:

grub> initrd /initrd

grub> boot

b)    FreeBSD

GRUB能夠直接裝載.ELFa.out兩種格式的內核,但是由於FreeBSD的內核引導接口有時有較大的變動,所以,對FreeBSD最安全的引導方法是引導/boot/loader

grub> root (hd0a)

grub> kernel /boot/loader

grub> boot

c)     NetBSDOpenBSDNetBSD

這三種系統的引導指令序列一樣,如下:

q  root命令設置根設備

q  kernel裝載內核

q  boot'引導系統

d)    DOS/Windows

grub> rootnoverify (hd00)

grub> chainloader +1

grub> boot

e)     SCO UnixWare

grub> rootnoverify (hd10)

grub> chainloader --force +1

grub> makeactive

注意,最後的這條指令將設置Unix Ware分區爲活動分區,這樣要求你的GRUB安裝在MBR,否則下次啓動時將直接進入UnixWare而不會進入GRUB grub>

當然,如果每次引導都需要敲入命令的話實在是太麻煩了,因此,類似於LILOGRUB提供了一個菜單方式,只要將這些命令放入配置文件中就可以實現菜單方式的多引導。當然在菜單方式下你可以切換到命令模式下。GRUB引導時查找/boot/grub/menu.lst,如果存在這個文件的話,就根據這個文件生成一個引導菜單,menu.lst文件格式請參考後面的內容。

6.          GRUB的安全配置

對於Linux系統,root帳號有着之高無尚的權限。但即使root帳號沒有被盜竊,黑客照樣可能登陸系統竊取機密。可以在啓動的時候,通過在Linux啓動菜單的kernel行最後加入“1”或“single”進入單用戶模式,直接可以修改root密碼。另外,有時候一臺計算機上安裝了多個操作系統,有些系統必須在授權後纔可以啓動。

爲了保護GRUB在未被授權下的修改和一些系統在授權下才可啓動的目的,GRUB提供了密碼驗證功能,只有通過密碼驗證才能在啓動時候進入命令行狀態修改GRUB或啓動需要密碼驗證的操作系統。

GRUB的菜單密碼是在grub.conf配置文件中實現的。GRUB提供的密碼級別有兩種,一種是全局的密碼,即進入命令行前都必須輸入的密碼,另外就是隻針對修改特定菜單項時必須輸入的密碼。GRUB密碼可以是明文的或MD5加密的。

如果是明文密碼,格式爲:password  明文密碼串,如:

password    123456

如果是MD5加密的密碼,格式爲:password  --md5  md5密碼串,如:

password    --md5  XJjfsddf33444%%$^$^$###。下面是一個具體的例子:

#=================包含密碼的grub.conf文件範例==================

password  --md5 <進入GRUB命令行模式的密碼>

timeout=30

default=0

 

title Red Hat Enterprise Linux 4 for syd168

password  --md5 <啓動RHEL 4驗證密碼>

root (hd01)

kernel /vmlinuz ro root=LABEL=/

initrd /initrd-xxx.img

 

title Windows 2003 Enterprise Edition for syd168

password  --md5 <啓動Windows 2003驗證密碼>

rootnoverify hd00

chainloader +1

#=================包含密碼的grub.conf文件範例==================

對於這個配置,當GRUB顯示菜單的時候,必須按下p並輸入對應的密碼才能進入命令模式,如果選擇 Red Hat Enterprise Linux 4 for syd168並按下回車,會出現提示信息,要求輸入密碼,這時應該輸入密碼,密碼正確後纔可以啓動該系統。

--md5告訴GRUB後面的內容是已經用md5算法加密過的了。所以GRUB會將用戶輸入的口令用MD5(grub-crypt完成)加密後再與之比較。要產生MD5密碼,可以把在命令模式下用md5crypt命令或在shell下執行grub-md5-crypt得到的MD5加密串複製到配置文件中即可。

7.          GRUB的修復

GRUB雖然提供了方便的啓動管理功能,但某些情況下,可能因爲誤操作或者系統故障導致GRUB被破壞或丟失。如何恢復被破壞的GRUB是很多讀者頭痛的問題。其實GRUB的修復並不是很難,只要懂得GRUB的基本工作原理,就可以很容易地修復它。

下面,我們介紹兩種修復GRUB的方法,即用安裝光盤和用備份軟盤修復的方法。

(1)       用安裝光盤修復GRUB

a.)      用安裝光盤啓動計算機

首先修改計算機的CMOS配置,並準備好RHEL 4的安裝光盤。然後啓動計算機,系統會自動從光盤啓動。

b.)     選擇rescue修復模式

當計算機啓動後,會顯示如圖4-5所示的畫面,在最後行輸入如下命令並按回車:

bootlinux  rescue

這時候,安裝程序會自動進入緊急修復模式。首先顯示語言,鍵盤等基本配置。建議語言選擇中選擇簡體中文,後面會出現網絡配置,可以選擇不配置網絡。隨後會出現圖4-6的畫面,提示查找系統中安裝的RHEL 4並將其掛載在/mnt/sysimage下。這裏直接按回車即可,隨後出現圖4-7,表示找到已經安裝的RHEL 4,並要將其掛在在/mnt/sysimage下,而且提示可以將其切換爲根。這裏也是按回車即可。然後就進入Linux 的命令行狀態。

c.)      改變根路徑

按照上面的提示,首先切換目錄/mnt/sysimage爲根。輸入如下命令即可:

#chroot  /mnt/sysimage

這時候,/就和正常的Linux一樣了。

d.)     運行grub修復GRUB

現在,就可以開始修復GRUB了。只要執行如下幾個命令即可:

#grub                                                  #執行grub交互程序

grub>find  /boot/grub/stage1             #查找stage1所在的設備

(hd0,0)                                                      #顯示查到的結果

grub>root  (hd0,0)                                   #設置根設備

grub>setup  (hd0)                                    #安裝GRUB MBR

grub>quit                                                #退出GRUB

e.)      退出系統並重新啓動系統

#exit                                                          #退出chroot

#exit                                                          #退出linux並重新啓動

執行完上述兩條命令後,系統就會重新啓動。丟失的GRUB就再次出現了。當然,如果GRUB的破壞很利害,導致很多文件都丟失。則可以按照前面的指示,重新安裝GRUB。在RHEL 4的安裝光盤中本身就包含GRUB的安裝包。

當然,也可以通過啓動軟盤修復GRUB。但現在計算機上使用軟盤的機率已經很小了,所以這裏就不再囉嗦了。當然,也可以通過可啓動的U盤修復硬盤上的GRUB,由於篇幅的關係,這裏討論了。感興趣的讀者可以參考網絡上的資料。

8.          GRUB網絡引導

GRUB 不僅可以從本地硬盤引導操作系統,還可以通過網絡引導操作系統內核。假使你由於某種原因,無法啓動操作系統。這時你需要在別的空閒的機器上先build一份GRUB,並安裝到一張軟盤上不過由於要支持網絡功能,所以./configure時有所不同了,必須指定啓用網絡功能,和故障機器網卡芯片的型號(具體參考netboot/README.netboot 文件)。假設機器的網卡芯片是RTL-8139,執行configure時加上–-enable-rtl8139

# rpm  –e  grub  #刪除原來的GRUB,如果沒有裝就不用執行該命令了

# ./configure  –-enable-diskless  –-enable-rtl8139

# make

# make install

# cp  –fa  /usr/local/share/grub/i386-pc/*  /boot/grub/

#grub-install  /dev/hda

# mke2fs  /dev/fd0

# mount  /dev/fd0  /mnt/floppy

#grub-install –-root-directory=/mnt/floppy ‘(fd0)’

檢查/mnt/floppy下是否有nbgrubpxegrub兩個文件,這兩個文件就是用於網路啓動的。如果沒有,就從/boot/grub/目錄拷貝到/mnt/floppy/boot/grub/目錄下。

這樣就製作好了一張帶有stage文件,支持網絡引導,且帶有網卡驅動的GRUB 引導盤了。接下來就是TFTP 服務器方面的工作了:

1、啓動 TFTP 服務器(編輯 /etc/xinetd.d/tftp文件,把disable改爲no)。

2、檢查防火牆配置,確保故障主機可以順利訪問該TFTP服務器

3、找出一臺和故障機器具有相同內核的主機,把/boot/vmlinuz-2.xx/boot/initrd-2.xx.img拷貝到TFTP服務器的/tftpboot/boot目錄下

4、把這張軟盤插入故障機器的軟驅並用它啓動機器,就會自動進入GRUB命令模式。

5、執行ifconfig命令將會顯示IP配置畫面

6、設置ip信息

7、現在網卡 ip TFTP 服務器的地址都已經設置了。

8、設置 root devicekernelinitrd 。注意 root 括號中是nd

 當你執行boot 時,內核將被解壓並執行,一切就和往常一樣。補充 :如果你的網絡有 dhcp 服務器,則可以直接執行 dhcp 命令來代替 ifconfig 命令獲取 ip 信息

9.          GRUB常用命令

(1)       僅用於配置文件中配置菜單的命令

命令

default num

設置默認啓動的項目。num0表示第一項,爲1表示第二項

fallback num

設置默認項啓動失敗後啓動的項

hiddenmenu

隱藏該菜單項,除非在timeout內用戶按下了ESC

timeout second

設置啓動默認操作系統前,等待用戶按鍵時間,單位爲秒

title  description

設置菜單顯示的提示信息。

(2)       在菜單(不包括菜單項內部的命令)和命令行方式下都可用的命令

命令

device

定義BIOS中的磁盤設備和操作系統的磁盤設備之間的映射關係

serial

用於初始化一個串口設備

terminal

用於切換顯示輸出

splashimage

用於定義啓動時的背景圖片。例如splashimage grub/splash.xpm.gz

blocklist

用於顯示某個文件在文件系統中的位置,以block list的形式顯示

root

用於指定含有stage文件的分區

rootnoverify

root類似,但不會嘗試掛載該分區。

chainloader

用於加載另外一個Boot loader,通常是用於加載windowsBoot loader

geometry

用於顯示或者設置某個硬盤的 CHS 參數,同時還顯示分區信息

halt

關機

reboot

重啓機器

kernel

指定操作系統內核文件,還可以在內核文件名後加上參數

initrd

用於指定 RAM Disk 文件,例如 initrd /initrd-2.xx.img

boot

引導kernel所指定的內核

setup

用於安裝stage1到磁盤的MBR或者某個分區的引導扇區

     

(3)       菜單內部和命令行下通用命令

命令

bootp

BOOTP協議初始化網絡設備。

color normal

改變菜單的顏色。

dhcp

DHCP協議初始化網絡設備。

rarp

RARP協議初始化網絡設備。

     

(4)       僅用於命令行方式或者菜單項內部的命令

命令

boot

在命令行模式用這條指令啓動操作系統

chainloader   

file裝入內存進行chainload

configfile

FILE作爲配置文件替代menu.lst

initrd file

Linux格式的啓動映象裝載初始化的ramdisk

kernel file

裝載內核映象文件

makeactive

使當前的分區成爲活躍分區

quit

退出GRUB shell

root device

將當前根設備設爲device

rootnoverify

root類似,但是不mount該設備。

setup

安裝GRUB引導在install_device上。

     

10.       GRUB 常見錯誤信息

出錯信息可以分成3類,stage1階段的、stage 1.5階段的、stage2階段。後兩個可以合在一起。

(1)       Stage1 階段可能出現的錯誤

GRUB 對於該階段出現的錯誤一般是打印一個出錯信息並掛起機器,除非按CTRL-ALT-DEL重啓。

aHard Disk Error:表示無法判讀stage1_5文件所在的磁盤的大小和CHS參數

bFloppy Error:表示無法stage1_5文件所在的軟盤的大小和CHS參數

cRead Error:表示無法讀取stage1_5文件或者stage2文件

dGeom Error stage2或者stage1_5位於 BIOS read 調用可以訪問的範圍之外。

(2)       Stage1_5/2 階段可能出現的錯誤

一般會打印一個Error <N>的錯誤信息,並根據錯誤的嚴重程度看是否繼續進行。

11.       編譯參數

在編譯的時候,可能根據需要配置編譯參數,下面就介紹幾個configure過程中可能用到的選項,要獲得完整的選項列表,可以參看GRUB源代碼中的INSTALL文件和netboot中的README.netboot文件。

q  --enable-preset-menu=FILE默認情況下grub.confstage2文件是分離的,使用該選項,可以直接把配置文件嵌入到stage2中,這樣啓動時可以立即獲得配置文件。對於一些嵌入式的系統來說比較有用。

q  --enable-diskless:如果使用了該選項,會得到額外的兩個文件,nbgrubpxegrub。同時需要如下支持網絡驅動(netboot目錄包含支持的網卡驅動)選項的某一個,如:

l   --enable-eepro100      #Intel Etherexpress Pro/100

l   --enable-ne2100                   #Novell NE2100 and NE1500

l   --enable-rtl8139                   #Realtek 8139SMC 1211DFE538TX

l   --enable-3c90x            #3Com90x

安裝結束後,GRUB默認被安裝在/usr/local/bin/usr/local/sbin下。stage文件則放在/usr/local/share/grub/i386-pc/目錄下。如果要修改默認安裝位置,可以在.configure後添加參數prefix=PATH參數,這裏的PATH是要安裝的路徑。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章