GRUB入門教程(轉)

post0發表於2007-08-11
GRUB入門教程(轉)[@more@]

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) 的強大功能和靈活性

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-945131/,如需轉載,請註明出處,否則將追究法律責任。