GRUB入門教程
==============================
目錄:
1. 教程提示
2. GRUB 基礎
3. 安裝 GRUB
4. 使用 GRUB
5. GRUB 內幕
6. 總結
==============================
第一章 教程提示
我應該學習這門教程嗎?
本教程向您顯示如何安裝和使用 GRUB (Grand Unified Boot Loader)。就像 LILO 一樣,GRUB 允許引導 Linux 系統,它負責裝入和引導內核。但與 LILO 不同,GRUB 的功能非常多,更易於使用,更可靠和靈活,而且非常小巧。
如果已經有些熟悉 LILO,並了解了磁盤分區的基本知識,那麼您就掌握了學習本教程應具備的預備知識。通過學習本教程和安裝 GRUB 之後,您將改進 Linux 系統的可靠性和可用性。
如果只是想嘗試 GRUB,可以學習本教程的前半部分,並制作 GRUB 引導盤,然後練習使用它來引導系統。這樣做以後,您將學會在緊急情況下如何使用 GRUB 來引導系統。
但是,如果想更深入地體驗 GRUB,可以學完整個教程,它將為您演示如何將 GRUB 設置成缺省引導裝入器。
第二章 GRUB 基礎
什麼是 GRUB?
GRUB 是引導裝入器 -- 它負責裝入內核並引導 Linux 系統。GRUB 還可以引導其它操作系統,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 和 DOS,以及 Windows 95、98、NT 和 2000。盡管引導操作系統看上去是件平凡且瑣碎的任務,但它實際上很重要。如果引導裝入器不能很好地完成工作或者不具有彈性,那麼就可能鎖住系統,而無法引導計算機。另外,好的引導裝入器可以給您靈活性,讓您可以在計算機上安裝多個操作系統,而不必處理不必要的麻煩。
GRUB 很棒
幸好,GRUB 是一個很棒的引導裝入器。它有許多功能,可以使引導過程變得非常可靠。例如,它可以直接從 FAT、minix、FFS、ext2 或 ReiserFS 分區讀取 Linux 內核。這就意味著無論怎樣它總能找到內核。另外,GRUB 有一個特殊的交互式控制台方式,可以讓您手工裝入內核並選擇引導分區。這個功能是無價的:假設 GRUB 菜單配置不正確,但仍可以引導系統。哦,對了 -- GRUB 還有一個彩色引導菜單。我們只是剛開始。
為什麼使用 GRUB?
您也許會奇怪,為什麼全世界都需要 GRUB -- 畢竟,Linux 世界在很長一段時間裡一直使用 LILO 引導裝入器,而且它可以讓上百萬的 Linux 用戶引導系統。是的,的確是這樣,LILO 很有效。但是,LILO 的維修率很高,而且很不靈活。與其花很多時間來描述 GRUB 的優點,還不如演示如何創建自己的 GRUB 引導盤以及如何使用它來引導系統。然後,我將說明 GRUB 的一些很“酷”的技術細節,並指導您完成將 GRUB 安裝到 MBR(主引導記錄)的過程,以使它成為缺省引導裝入器。
如果您有點膽小,不必害怕。可以學習本教程的前半部分,創建 GRUB 引導盤,嘗試使用 GRUB 而不必弄亂現有的引導裝入器。或者,可以用其安全的“駐留”方式來熟悉 GRUB。那麼,讓我們立即開始吧。
第三章 安裝 GRUB
下載 GRUB
要開始探究 GRUB 的精妙之處,首先需要下載、編譯和安裝它。但不要害怕 -- 根本不會修改您的引導記錄 -- 我們只是要編譯和安裝 GRUB,就像其它程序一樣,在此過程中我們可以創建 GRUB 引導盤。請不要擔心;在修改引導過程之前,我會告訴您。
現在開始。訪問 FTP://alpha.gnu.org/gnu/grub/ 並下載可以找到的最新版本的 GRUB tar 壓縮包。我編寫本教程時,最新的 tar 壓縮包是 grub-0.5.96.1.tar.gz。下載了最新版本後,就可以安裝了。
安裝步驟
這裡是從 tar 壓縮包安裝 GRUB 所需輸入的命令。我將在 /tmp 中編譯源文件,並將所有部分都安裝到硬盤的 /usr 目錄下。從 root 用戶,輸入以下命令:
# cd /tmp
# tar xzvf /path/to/archive/here/grub-0.5.96.1.tar.gz
# cd grub-0.5.96.1
# ./configure --prefix=/usr
# make
# make install
現在已經安裝了 GRUB,准備開始使用它。
制作引導盤
要制作引導盤,需執行一些簡單的步驟。首先,在新的軟盤上創建 ext2 文件系統。然後,將其安裝,並將一些 GRUB 文件復制到該文件系統,最後運行 "grub" 程序,它將負責設置軟盤的引導扇區。准備好了嗎?
制作引導盤,第二部分
好,將一張空盤插入 1.44MB 軟驅,輸入:
# mke2fs /dev/fd0
創建了 ext2 文件系統後,需要安裝該文件系統:
# mount /dev/fd0 /mnt/floppy
現在,需要創建一些目錄,並將一些關鍵文件(原先安裝 GRUB 時已安裝了這些文件)復制到軟盤:
# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /usr/share/grub/i386-pc/stage1 /mnt/floppy/boot/grub
# cp /usr/share/grub/i386-pc/stage2 /mnt/floppy/boot/grub
只需要再有一個步驟,就能得到可用的引導盤。
制作引導盤,第三部分
解壓、編譯和安裝 GRUB 源 tar壓縮包時,會將程序 grub 放到 /usr/sbin 中。該程序非常有趣並值得注意,因為它實際上是 GRUB 引導裝入器的半功能性版本。是的,盡管 Linux 已經啟動並正在運行,您仍可以運行 GRUB 並執行某些任務,而且其界面與使用 GRUB 引導盤或將 GRUB 安裝到硬盤 MBR 時看到的界面完全相同。
這是有趣的設計策略,現在該使用駐留版本的 GRUB 來設置引導盤的引導扇區了。從 root 用戶,輸入 "grub"。GRUB 控制台將啟動,顯示如下:
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first Word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
歡迎使用 GRUB 控制台。現在,研究命令。
制作引導盤,第四部分
在 grub> 提示符處,輸入:
grub> root (fd0)
grub> setup (fd0)
grub> quit
現在,引導盤完成了。在繼續下一步驟之前,在看一下剛才輸入的命令。第一個 "root" 命令告訴 GRUB 到哪裡查找輔助文件 stage1 和 stage2。缺省情況下,GRUB 會在指定的分區或磁盤上的 /boot/grub 目錄中進行查找。在安裝引導盤時,也就是幾分鐘以前,我們已將這些文件復制到正確的位置。接著,輸入了 setup 命令,它告訴 GRUB 將引導裝入器安裝到軟盤的引導記錄上;我們將在以後詳細討論這一過程。然後退出。現在,已經制作好引導盤,可以開始使用 GRUB 了。
第四章 使用 GRUB
准備
使用 GRUB 引導系統之前,需要知道一些信息。首先,應知道哪個分區保存了 Linux 內核,以及 root 文件系統的分區名稱。然後,應查看現有 LILO 配置來尋找需要傳遞給內核的變量,如 "mem=128M"。一旦獲取了這些信息,就可以開始了。
啟動 GRUB
要啟動 GRUB,需要關閉系統並退出引導盤。如果由於某些原因而不能立即關閉系統(比如上班時在部門的服務器上測試 GRUB),那麼只要在提示中輸入 "grub" 並繼續操作。所有程序的運行情況都不會改變,只是您不能執行引導(因為 Linux 正在運行)。
首次接觸
裝入引導盤時,在屏幕頂部將出現一條消息,告訴您正在裝入第一階段和第二階段。幾秒後,將會出現一個熟悉的屏幕,顯示如下:
GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
可以看到,這些內容與在 Linux 中以駐留方式運行 GRUB 時出現的消息完全相同 -- 只不過現在我們是使用 GRUB 來引導 Linux。
"root"
在 Linux 中,當談到 "root" 文件系統時,通常是指主 Linux 分區。但是,GRUB 有它自己的 root 分區定義。GRUB 的 root 分區是保存 Linux 內核的分區。這可能是您的正式 root 文件系統,也可能不是。例如,在 Gentoo Linux 中,有一個單獨的小分區專用於保存 Linux 內核與引導信息。大多數情況下,我們不安裝這個分區,這樣在系統意外崩潰或重新引導時,就不會把它弄亂。
"root",第二部分
這些,我們討論的是 GRUB,需要指定 GRUB 的 root 分區。進入 root 分區時,GRUB 將把這個分區安裝成只讀型,這樣就可以從該分區中裝入 Linux 內核。GRUB 的一個很“酷”的功能是它可以讀取本機的 FAT、FFS、minix、ext2 和 ReiserFS 分區,我們很快就會討論這個功能。但現在,讓我們輸入 root 分區。在提示中輸入 root,但不要按 Enter 鍵:
grub> root (
現在,按一次 Tab 鍵。如果系統中有多個硬盤,GRUB 將顯示可能完成的列表,從 "hd0" 開始。如果只有一個硬盤,GRUB 將插入 "hd0,"。如果有多個硬盤,繼續進行,在 ("hd2") 中輸入名稱並在名稱後緊跟著輸入逗號,但不要按 Enter 鍵。部分完成的 root 命令看起來如下:
grub> root (hd0,
"root",第三部分
現在,繼續操作,再按一次 Tab 鍵。GRUB 將顯示特定硬盤上所有分區的列表,以及它們的文件系統類型。在我的系統中,按 Tab 鍵時得到以下列表:
grub> root (hd0, (tab)
Possible partitions are:
Partition num: 0, Filesystem type is ext2fs, partition type 0x83
Partition num: 1, Filesystem type unknown, partition type 0x82
Partition num: 2, Filesystem type unknown, partition type 0x7
Partition num: 4, Filesystem type is reiserfs, partition type 0x83
Partition num: 5, Filesystem type is reiserfs, partition type 0x83
如您所見,GRUB 的交互式硬盤和分區名稱實現功能非常有條理。這些,只需要好好理解 GRUB 新奇的硬盤和分區命名語法,然後就可以繼續操作了。
GRUB 命名約定
到目前為止,您可能會感到一點困惑,因為 GRUB 所使用的硬盤/分區命名約定與 Linux 使用的命名約定不同。在 Linux 中,第一個硬盤的第五個分區稱作 "hda5"。而 GRUB 把這個分區稱作 "(hd0,4)"。GRUB 對硬盤和分區的編號都是從 0 開始計算。另外,硬盤和分區都用逗號分隔,整個表達式用括號括起。現在,回來看一下 GRUB 提示,可以發現如果要引導 Linux 硬盤 hda5,應輸入 "root (hd0,4)"。如果已經明白了 GRUB 硬盤/分區命名,您也許要調整當前 root 命令行,以使它指向保存 Linux 內核的分區。按以下格式輸完命令,然後按 Enter 鍵:
grub> root (hd0,4) (hit enter)
Filesystem type is reiserfs, partition type 0x83
裝入內核
現在已安裝了 root 文件系統,到裝入內核的時候了。在 GRUB 提示中,依次輸入 "kernel"、空格、到內核的路徑、空格、內核參數,如 root 參數(GRUB 將自動插入適當的 "mem=" 參數)。我在我的系統中輸入:
grub> kernel /boot/vmlinux vga=0x314 root=/dev/hda5
[Linux-bzImage, setup=0x1200, size=0xe1a30]
請留意 "root=" 內核參數,它非常重要。它應該指向保存 root 文件系統的 Linux 分區。您也許要寫下到目前為止輸入的命令,這樣在教程後面講述如何創建 GRUB 引導菜單時,就可以迅速找到它們。
Root,內核,引導!
您已經安裝了 root 文件系統並裝入了內核。現在,可以引導了。只要輸入 "boot",Linux 引導過程就將開始。
第五章 GRUB 內幕
重新調查引導軟盤
如果一切正常,就可以使用使用 GRUB 引導盤來引導當前 Linux 發行版。如您所見,GRUB 是功能非常強大的引導裝入器,它讓您可以隨意動態配置以進行引導。我將向您介紹如何創建 GRUB 引導菜單,這樣就可以從菜單中進行 OS 選擇,而不是輸入三行命令來引導 Linux。但在動手之前,現在是深入了解 GRUB 幕後是如何工作的好時機。我將說明引導盤引導過程的工作原理,這樣您就可以對 GRUB 有一個更好的評價和了解。
兩階段過程
要制作引導軟盤,需要做兩件事 -- 將文件復制到軟盤的 ext2 文件系統的 /boot/grub 目錄中,運行 GRUB 的安裝程序。運行 GRUB 安裝程序時,GRUB 將 "stage 1" 裝入器安裝到軟盤的引導記錄中。它還將 stage 1 裝入器配置成從 ext2 文件系統直接裝入 stage2。通常,GRUB 通過在包含 stage2 數據的軟盤上創建一列塊來完成此操作,這樣 stage1 裝入 stage2 時不必知道 ext2 文件系統的任何情況。
但是,大多數情況下,GRUB 在安裝完 stage1 之後,會立即將 stage1.5 裝入器安裝到引導記錄中。這個特殊的 stage1.5 允許無需使用原始塊列表就能從 ext2 文件系統裝入 stage2,卻要更靈活的標准基於路徑的方法。GRUB 理解文件系統結構的這一能力使 GRUB 比 LILO 更強壯。例如,如果正好在整理引導盤文件系統的碎片,stage1 就可以找到 stage2(歸功於 ext2 stage1.5)。而 LILO 就不能完成此項操作。因為 LILO 只能依賴於映射文件,每次更新內核或在磁盤上物理移動數據時,即使不更改路徑,也需要重新運行它。
階段 1、1.5 和 2
您也許會想知道:如果使用 FAT 而不是 ext2 文件系統創建引導盤,GRUB 是否可以工作。是的,它可以工作,因為在輸入 "setup (fd0)" 時,GRUB 會安裝與 root 文件系統類型匹配的 stage1.5。即使沒有沒有空間可以安裝 stage1.5,GRUB 仍可以通過追溯到更原始的塊列表,來裝入 stage2。
搜索和恢復
在繼續討論之前,先研究一個與引導軟盤相關的實用提示。由於 GRUB 的交互式性質,它為恢復軟盤生成了一個很好的引導裝入器。但是,如果將好的內核復制到引導盤上,那它就更好了。那樣,即使硬盤上的內核壞了或者被意外刪除了,也可以追溯到引導盤內核,並啟動和運行系統。要將備用內核復制到引導盤,執行以下操作:
# mount /dev/fd0 /mnt/floppy
# cp /path/to/bzImage /mnt/floppy/boot
# umount /dev/fd0
現在,軟盤已包含備用內核,可以在 GRUB 中使用它來引導 Linux 發行版,操作如下:
grub> root (fd0)
grub> kernel /boot/bzImage root=/dev/hda5 (將 /dev/hda5 更改成想要引導的分區名稱)
grub> boot
硬盤引導
好,現在如何將 GRUB 安裝到硬盤上?這個過程幾乎與引導盤安裝過程一樣。首先,需要決定哪個硬盤分區將成為 root GRUB 分區。在這個分區上,創建 /boot/grub 目錄,並將 stage1 和 stage2 文件從 /usr/share/grub/i386-pc 復制到該目錄中。可以通過重新引導系統並使用引導盤,或者使用駐留版本的 GRUB 來執行後一步操作。在這兩種情況下,啟動 GRUB,並用 root 命令指定 root 分區。例如,如果將 stage1 和 stage2 文件復制到 hda5 的 /boot/grub 目錄中,應輸入 "root (hd0,4)"。現在,只差一步。
硬盤引導,續
接著,決定在哪裡安裝 GRUB -- 在硬盤的 MBR,或者如果與 GRUB 一起使用另一個“主”引導裝入器,則安裝在特定分區的引導記錄中。如果安裝到 MBR,則可以指定整個磁盤而不必指定分區,如下(對於 hda):
grub> setup (hd0)
如果要將 GRUB 安裝到 /dev/hda5 的引導記錄中,應輸入:
grub> setup (hd0,4)
現在,已安裝 GRUB。引導系統時,應該立即以 GRUB 的控制台方式結束(如果安裝到 MBR)。現在,應創建引導菜單,這樣就不必在每次引導系統時都輸入那些命令。
引導菜單
要創建菜單,只需在 /boot/grub 中創建一個簡單的文本文件 menu.lst。如果將它放在正確位置,它將在 root GRUB 驅動器的 stage1 和 stage2 文件的旁邊。這裡是一個樣本 menu.lst 文件,可以將它作為一個您的菜單的基礎:
default 0
timeout 30
color white/blue blue/green
title=Boot Linux
root (hd0,4)
kernel /boot/bzImage root=/dev/hda5
title=Boot Linux using initrd
root (hd0,5)
kernel /boot/bzImage root=/dev/loop0 init=/initdisk.gz
initrd /initdisk.gz
title=Windows NT
root (hd0,3)
chainloader +1
我將在以下的屏面中說明 menu.lst 格式。
理解引導菜單
引導菜單很容易理解。前三行設置缺省菜單項(項目號 0,第一個)、設置超時值(30 秒),並選擇整個菜單的一些顏色。
接著的三行配置 "Boot Linux" 菜單項。要創建手工引導命令系列之外的菜單項,只要添加一行 "title=" 作為第一行,並從最後一行中除去 "boot" 命令(GRUB 會自動添加這個命令)。
接著的四行顯示了如何使用 GRUB 來引導 initrd(初始 root 磁盤),如果您願意的話。現在,討論最後三行……
鏈式裝入器
這裡是示例 menu.lst 的最後三行……
title=Windows NT
root (hd0,3)
chainloader +1
這裡,我添加了一項來引導 Windows NT。要完成此操作,GRUB 使用了“鏈式裝入器”。鏈式裝入器從分區 (hd0,3) 的引導記錄中裝入 NT 自己的引導裝入器,然後引導它。這就是這種技術叫做鏈式裝入的原因 -- 它創建了一個從引導裝入器到另一個的鏈。這種鏈式裝入技術可以用於引導任何版本的 DOS 或 Windows。
第六章 總結
GRUB 的彈性
GRUB 最好的優點之一就是其強健的設計 -- 在不斷使用它時請別忘了這點。如果更新內核或更改它在磁盤上的位置,不必重新安裝 GRUB。事實上,如有必要,只要更新 menu.lst 文件即可,一切將保持正常。
只有少數情況下,才需要將 GRUB 引導裝入器重新安裝到引導記錄。首先,如果更改 GRUB root 分區的分區類型(例如,從 ext2 改成 ReiserFS),則需要重新安裝。或者,如果更新 /boot/grub 中的 stage1 和 stage2 文件,由於它們來自更新版本的 GRUB,很有可能要重新安裝引導裝入器。其它情況下,可以不必理睬!
優秀的 GRUB 參考資料
我們在這裡只是介紹了 GRUB 的一部分。例如,可以使用 GRUB 來執行網絡引導,引導 BSD 文件系統,或更多操作。另外,GRUB 有許多配置和安全性命令也很有用。如需所有 GRUB 功能的完整描述,請閱讀 GRUB 出色的 GNU 文檔。只要在 bash 提示中輸入 "info grub" 就可以閱讀該文檔。
希望您喜歡本教程,喜歡 GRUB (Grand Unified Boot Loader) 的強大功能和靈活性!
title=Windows NT
root (hd0,3)
chainloader +1
我將在以下的屏面中說明 menu.lst 格式。
理解引導菜單
引導菜單很容易理解。前三行設置缺省菜單項(項目號 0,第一個)、設置超時值(30 秒),並選擇整個菜單的一些顏色。
接著的三行配置 "Boot Linux" 菜單項。要創建手工引導命令系列之外的菜單項,只要添加一行 "title=" 作為第一行,並從最後一行中除去 "boot" 命令(GRUB 會自動添加這個命令)。
接著的四行顯示了如何使用 GRUB 來引導 initrd(初始 root 磁盤),如果您願意的話。現在,討論最後三行……
鏈式裝入器
這裡是示例 menu.lst 的最後三行……
title=Windows NT
root (hd0,3)
chainloader +1
這裡,我添加了一項來引導 Windows NT。要完成此操作,GRUB 使用了“鏈式裝入器”。鏈式裝入器從分區 (hd0,3) 的引導記錄中裝入 NT 自己的引導裝入器,然後引導它。這就是這種技術叫做鏈式裝入的原因 -- 它創建了一個從引導裝入器到另一個的鏈。這種鏈式裝入技術可以用於引導任何版本的 DOS 或 Windows。
第六章 總結
GRUB 的彈性
GRUB 最好的優點之一就是其強健的設計 -- 在不斷使用它時請別忘了這點。如果更新內核或更改它在磁盤上的位置,不必重新安裝 GRUB。事實上,如有必要,只要更新 menu.lst 文件即可,一切將保持正常。
只有少數情況下,才需要將 GRUB 引導裝入器重新安裝到引導記錄。首先,如果更改 GRUB root 分區的分區類型(例如,從 ext2 改成 ReiserFS),則需要重新安裝。或者,如果更新 /boot/grub 中的 stage1 和 stage2 文件,由於它們來自更新版本的 GRUB,很有可能要重新安裝引導裝入器。其它情況下,可以不必理睬!
優秀的 GRUB 參考資料
我們在這裡只是介紹了 GRUB 的一部分。例如,可以使用 GRUB 來執行網絡引導,引導 BSD 文件系統,或更多操作。另外,GRUB 有許多配置和安全性命令也很有用。如需所有 GRUB 功能的完整描述,請閱讀 GRUB 出色的 GNU 文檔。只要在 bash 提示中輸入 "info grub" 就可以閱讀該文檔。
希望您喜歡本教程,喜歡 GRUB (Grand Unified Boot Loader) 的強大功能和靈活性!
接著的三行配置 "Boot Linux" 菜單項。要創建手工引導命令系列之外的菜單項,只要添加一行 "title=" 作為第一行,並從最後一行中除去 "boot" 命令(GRUB 會自動添加這個命令)。
接著的四行顯示了如何使用 GRUB 來引導 initrd(初始 root 磁盤),如果您願意的話。現在,討論最後三行……
鏈式裝入器
這裡是示例 menu.lst 的最後三行……
title=Windows NT
root (hd0,3)
chainloader +1
這裡,我添加了一項來引導 Windows NT。要完成此操作,GRUB 使用了“鏈式裝入器”。鏈式裝入器從分區 (hd0,3) 的引導記錄中裝入 NT 自己的引導裝入器,然後引導它。這就是這種技術叫做鏈式裝入的原因 -- 它創建了一個從引導裝入器到另一個的鏈。這種鏈式裝入技術可以用於引導任何版本的 DOS 或 Windows。
第六章 總結
GRUB 的彈性
GRUB 最好的優點之一就是其強健的設計 -- 在不斷使用它時請別忘了這點。如果更新內核或更改它在磁盤上的位置,不必重新安裝 GRUB。事實上,如有必要,只要更新 menu.lst 文件即可,一切將保持正常。
只有少數情況下,才需要將 GRUB 引導裝入器重新安裝到引導記錄。首先,如果更改 GRUB root 分區的分區類型(例如,從 ext2 改成 ReiserFS),則需要重新安裝。或者,如果更新 /boot/grub 中的 stage1 和 stage2 文件,由於它們來自更新版本的 GRUB,很有可能要重新安裝引導裝入器。其它情況下,可以不必理睬!
優秀的 GRUB 參考資料
我們在這裡只是介紹了 GRUB 的一部分。例如,可以使用 GRUB 來執行網絡引導,引導 BSD 文件系統,或更多操作。另外,GRUB 有許多配置和安全性命令也很有用。如需所有 GRUB 功能的完整描述,請閱讀 GRUB 出色的 GNU 文檔。只要在 bash 提示中輸入 "info grub" 就可以閱讀該文檔。
希望您喜歡本教程,喜歡 GRUB (Grand Unified Boot Loader) 的強大功能和靈活性!