目錄
1、GRUB 基礎
2、命名習慣
3、安裝 GRUB
4、GRUB 接口
5、GRUB 常用命令
6、保護 GRUB 設置
7、GRUB 和 stage 文件
8、GRUB 常見錯誤信息
9、制作 GRUB 引導軟盤
10、使用 GRUB 通過網絡引導操作系統
11、把配置文件嵌入到 GRUB 中
12、總結
13、個人建議
一、GRUB 基礎
1.1 GRUB 簡介
“boot loader”是計算機啟動后第一個運行的軟件。它負責加載一個操作系統的內核,并把控制權交給內核。內核則負責剩下的初始過程。
GRUB 一個很重要的特色就是靈活性;GRUB 可以識別文件系統和二進制格式的內核,所以你可以加載任何操作系統,而不需要記錄內核在
磁盤上的物理位置。
1.2 GRUB 的現狀
我不打算介紹 GRUB 的發展歷史,有興趣的朋友可以自己到官方站點或者執行 info grub 自行獲取信息。我們著眼于 GRUB 當前的現狀。
目前 GRUB 分成 GRUB legacy 和 GRUB 2。版本號是 0.9x 以及之前的版本都稱為 GRUB Legacy ,從 1.x 開始的就稱為 GRUB 2。目前
GRUB Legacy 已經停止開發了,只是出于一個 bug fix 的狀態,不再增加新的功能了,所有的開發都轉移到 GURB 2 之上了。
1.3 GRUB Legacy 和 GRUB 2
GRUB 2 是源自于一個名為 PUPA 的項目,目的是建立下一代的 boot loader。GRUB 2 幾乎是從零開始開始開發的,它和 GRUB Legacy 不
同的地方有很多,例如支持 scripts、國際化語言、動態加載模塊、帶有 resuce 模式等等,這些都是 GRUB Legacy 所沒有的。
下面是 GRUB2 新特性的介紹 :(原文請參
http://www.gnu.org/software/grub/grub-2.en.html )
a)支持腳本語言,例如條件判斷,循環、變量和函數
b)圖形接口
c)在運行時動態加載需要的模塊,而不是在 biuld 的時候指定加入那些模塊(靜態)
d)可以移植到不同的架構上
e)國際化語言。包括支持非ASCII的字符集和類似 gettext 的消息分類,字體,圖形控制臺等等。
f)實際內存管理。使得 GNU GRUB 更加具有可擴展性
g)針對文件系統、文件、設備、驅動、終端、命令、分區表、 os loder 的模塊化、層次化、基于對象的框架
h)跨平臺的安裝,允許從另外一個架構上安裝 GRUB
i)支持 rescue 模式,可用于系統無法引導的情況。stage 1.5 被取消了
j)修復 GRUB Legacy 設計上的錯誤,同時又保持向后的兼容性。
1.4 Multiboot 規范
Multiboot 規范是在 boot loader 和 kernel 之間的一個協議,用于統一各種引導操作系統的方法。Linux 和 BSD 目前并不支持該規范。
1.5 可用資源
GRUB 的 homepage
http://www.gnu.org/software/grub/grub-legacy-faq.en.html)
info grub
1.6 舊版 GRUB(GRUB Legacy)的功能特色
a)識別多種可執行格式,支持 “a.out” , ELF, symbol tables)
b)支持 non-Multiboot 內核。主要是FreeBSD、NetBSD、OpenBSD、Linux。
c)支持加載多個模塊
d)支持配置文件
e)提供菜單接口。菜單項的數量并沒有限制,目前版本支持數百個菜單條目
f)有一個靈活的命令行接口。如果沒有配置文件存在,GRUB 會自動進入命令模式
g)支持多種文件系統格式。主要有BSD FFS”、“DOS FAT 16 、FAT32”,“Minix fs”、ext2/ext3、ReiserFS 、jfs、xfs、VSTa fs
h)支持自動解壓
i)能夠訪問任何已經安裝的設備上的數據
j)Be independent of drive geometry translations (這個不知道怎么翻譯好)
Unlike many other boot loaders, GRUB makes the particular drive
translation irrelevant. A drive installed and running with one
translation may be converted to another translation without any
adverse effects or changes in GRUB's configuration.
k)檢測所有已經安裝的 RAM
l)支持 LBA 模式。在傳統的磁盤調用(稱為 CHS 模式),存在一個限制 :就是 BIOS 無法訪問在 1024 柱面。之后的內容,所以 BIOS
只能訪問最小 508 MB ,最大8GB 的空間。(這也就是 /boot 分區必須在 1024 柱面之前的原因)。GRUB 并不能解決全部問題,因為
并沒有統一的解決方法,不過 GRUB 可以檢測是否支持 LBA 模式,如果支持則使用 LBA 模式。
m)支持網絡引導,可以使用 TFTP 協議通過網絡加載內核
n)支持遠程終端,目前只支持串口
二、命名習慣
首先 GRUB 要求設備名被括在一個 ( ) 中。fd表示軟盤,hd 表示硬盤(不區分 IDE 還是 SCSI)。其次設備是從 0 開始編號,分區也是如此,
分區和設備之間用一個 ‘,’ 分開。下面給出幾個例子 :
(fd0) :表示整個軟盤
(hd0,1) :表示 BIOS 中的第一個硬盤的第2個分區
(hd0,0)/boot/vmlinuz :表示 BIOS 中的第一個硬盤的第一個分區下的 boot/ 目錄下的vmlinuz 文件。
如果沒有指定某個分區,則表示使用整個設備,否則只使用指定的分區。
三、安裝 GRUB
3.1 下載 tarball
有兩種方法,一種是 rpm ;一種是 tarball 。rpm 沒有什么好說的,只是 rpm –Uvh 就可以了。不過一般不會啟用網絡引導功能,
所以我們決定采用 tarball 的方式安裝。 首先到下面的地址下載 tarball
ftp://alpha.gnu.org/gnu/grub上面有 GRUB Legacy 和 GRUB 2 ,就選擇目前 RHEL AS4 用的 0.95 版本做實驗。
不過在安裝之前先要用 rpm –q grub 檢查一下 grub 是否安裝了。如果是的話,用 rpm –e grub 刪除,即使你在安裝時指定不安裝
boot loader ,安裝程序還是會安裝 grub rpm 包的。
3.2 安裝需求
INSTALL 文件中給出了 build 所需要的軟件包條件 :
GCC :當前版本的 GCC 應該也可以用,不過還是建議用 2.95 或者以上版本的 GCC
GNU Make :生成 Makefiles 所用
GNU binutils 2.9.1.0.23 或者個更高版本
如果你想自己開發 GRUB ,還需要 Texinfo 4.0 或者更高 ,同時還有GNU Autoconf 2.5x ,GNU Automake 1.7 或者更高頒布。
3.3 參數介紹
下面我們介紹幾個 configure 過程中可能用到的選項,要完整的選項列表,可以參看 INSTALL 文件和 netboot/README.netboot 文件.
a)--enable-preset-menu=FILE :默認情況下 grub.conf 和 stage2 文件是分離的,使用該選項,可以直接把配置文件嵌入到 stage2 中,
這樣啟動時可以立即獲得配置文件。對于一些嵌入式的系統來說比較有用,又或者在前面提到的沒有顯示器/鍵盤的主機有用,因為在切
換顯示輸出到你的筆記本之前,你是看不到啟動的畫面的,所以執行切換顯示操作也是在看不到輸出的情況下進行的(切換顯示之后就不會了)。
通過這個選項你可以在
中指定啟動時立即把顯示輸出切換到你的筆記本上了。
b)--enable-diskless :如果使用了該選項,你會得到額外的兩個文件,nbgrub 和 pxegrub。接下來你需要指定網卡的驅動程序,
netboot/ 目錄下有較常見的幾種 ,可以看到幾種網卡可以合用一個驅動。常見的有 :
[Copy to clipboard]CODE:
Intel Etherexpress Pro/100
--enable-eepro100
Novell NE2100 and NE1500
--enable-ne2100
Realtek 8139
SMC 1211
D-Link DFE530TX+ and DFE538TX
--enable-rtl8139
3Com90x
--enable-3c90x
如果你不想那么麻煩,則按照下面的過程進行 :
[Copy to clipboard]CODE:
./configure
make
make install
安裝結束。默認命令會放在 /usr/local/bin 和 /usrlocal/sbin 下。Stage 文件則放在 /usr/local/share/grub/i386-pc/ 目錄下。
3.4 安裝之后的操作
a)把 /usr/local/share/grub/i386-pc/ 目錄下的所有文件統統拷貝到 /boot/grub/ 目錄下。
b)接下來是創建 grub.conf ,并在 /boot/grub/ 目錄下建立一個 menu.lst ,指向 grub.conf。
c)注意,這個 symbol link 在 Redhat 9 是必需的,否則啟動時會直接進入命令模式,即使已經存在 grub.conf ;但在 RHEL AS4 下卻不是。
d)確認 /usr/local/sbin 和 /usr/local/bin 在 PATH 變量的值中。
e)執行 grub-install /dev/hda1 把 stage1 寫入到 /boot 分區的引導扇區。
也可以執行 grub 進入 grub shell ,然后通過 root 和 setup 命令來安裝 stage1 。
f)重啟機器,安裝過程到此結束。