Grand_Unified_Bootloader

**GNU GRUB**（簡稱「GRUB」）是一個來自 GNU 專案的啟動載入程式。GRUB 是多啟動規範的實現，它允許使用者可以在電腦內同時擁有多個作業系統，並在電腦啟動時選擇希望執行的作業系統。GRUB 可用於選擇作業系統分割區上的不同核心，也可用於向這些核心傳遞啟動參數。

GNU GRUB 的前身為 **Grand Unified Bootloader**。它主要用於類 Unix 系統；同大多 Linux 發行版一樣，GNU 系統也採用 GNU GRUB 作為它的啟動器。Solaris 從 10 1/06 版開始在 x86 系統上也採用 GNU GRUB 作為啟動器。

## 特性

GRUB 可動態組態；它在啟動時載入組態資訊，並允許在啟動時修改，如選擇不同的核心和 initrd。為此目的，GRUB 提供了一個簡單的類似 Bash 的命令列介面，它允許使用者編寫新的啟動順序。

GRUB 非常輕便。它支援多種可執行格式；它除了可適用於支援多啟動的作業系統外，還通過鏈式啟動功能支援諸如 Windows 和 OS/2 之類的作業系統。GRUB 支援大部分的 Unix 檔案系統，也支援 Windows 適用的 FAT 和 NTFS 檔案系統，還支援 LBA 模式。GRUB 允許使用者檢視它支援的檔案系統裡檔案的內容。

GRUB 具有多種使用者介面。多數 Linux 發行版利用 GRUB 對圖形介面的支援，提供了客製化的帶有背景圖案的啟動選單，有時也支援滑鼠。GRUB 可通過 GFX 支援更美觀的啟動畫面和啟動選單。通過對 GRUB 的文字介面的設定，可以通過序列埠實現遠端終端啟動。

GRUB 可以從網路上下載作業系統鏡像，因此可以支援無盤系統。GRUB 支援在啟動作業系統前解壓它的鏡像。

與其它啟動器不同，GRUB 可以通過 GRUB 提示符直接與使用者進行互動。載入作業系統前，在 GRUB 文字模式螢幕下鍵入 c 鍵可以進入 GRUB 命令列。在沒有作業系統或者有作業系統而沒有 "menu.lst"（或 grub.cfg）設定檔的系統上，同樣可以進入 GRUB 提示符。通過類似 bash 的命令，GRUB 提示符允許使用者手工啟動任何作業系統。把合適的命令記錄在 "menu.lst"（或 grub.cfg）檔案里，可以自動啟動一個作業系統。

GRUB 擁有豐富的終端命令，在命令列下使用這些命令，使用者可以檢視硬碟分割區的細節，修改分割區設定，臨時重新對映磁碟順序，從任何使用者定義的設定檔啟動，以及檢視 GRUB 所支援的檔案系統上的其它啟動器的組態。因此，即便不知道一台電腦上安裝了什麼，也可以從外部裝置啟動一個作業系統。

GRUB 採用捲動螢幕選擇想要啟動的作業系統。通過向 "menu.lst"（或 grub.cfg）檔案中添加相關資訊，GRUB 可以控制 150 或者更多的啟動選項，在啟動時用方向鍵進行選擇。

通過鏈式啟動，一個啟動器可以啟動另一個啟動器。GRUB 通過 2 到 3 行的命令就可以從 DOS、Windows、Linux、BSD 和 Solaris 系統啟動。

儘管 GRUB 為類 Unix 系統進行了編譯和打包，但也有供 DOS 和 Windows 使用的變種 GRUB4DOS 等。GRUB 也可以不附帶任何作業系統而作為孤立系統安裝。從 CD 上啟動時運用 GRUB 需要 1 個檔案，而從軟碟、硬碟和 USB 裝置上啟動時需要 2 個檔案。這些檔案可以在任何支援 GRUB 的 Linux CD 上找到，使用者可以很容易的找到它們。

新的 GRUB2（GRUB 第二版）為 GRUB 的重寫版本，它是 GRUB 的大革新。GRUB2 對 Linux 系統做了更多的優化，支援更多的功能，如動態的載入模組（而在之前的 GRUB 中，新增或刪除模組要重新編譯 GRUB）等。GRUB2 的版本號為 0.98 或更高；舊的 GRUB 的版本號則為 0.97 或更低，也被稱為「GRUB Legacy」或「GRUB1」等。GRUB2 的組態、命令等較 GRUB Legacy 有一定的不同。

## 啟動過程

電腦啟動後，BIOS 將尋找第一個可啟動的裝置（通常為硬碟），而後從 MBR 中載入啟動程式，然後把控制交給這段代碼。MBR 位於硬碟的前 512 位元組內。

### GRUB 第一版本

GRUB 的步驟 1 包含在 MBR 中。由於受 MBR 的大小限制，步驟一所做的幾乎只是裝載 GRUB 的下一步驟（存放在硬碟的其它位置）。步驟 1 既可以直接裝載步驟 2，也可以裝載步驟 1.5：GRUB 的步驟 1.5 包含在 MBR 後面的 30 千位元組中。步驟 1.5 載入步驟 2。

當步驟 2 啟動後，它將呈現一個介面來讓使用者選擇啟動的作業系統。這步通常採用的是圖形選單的形式，如果圖形方式不可用或者使用者需要更進階的控制，可以使用 GRUB 的命令列提示，通過它，使用者可以手工指定啟動參數。GRUB 還可以設定逾時後自動從某一個核心啟動。

### GRUB 第二版本

與 GRUB 第一版相似的是，_boot.img_ 像步驟 1 一樣在 MBR 或在啟動分割區中，但是，它可以從任何 LBA48 位址的一個磁區中讀取，它（_boot.img_）將讀取 _core.img_（產生於 _diskboot.img_）的第一個磁區以用來後面讀取 _core.img_ 的剩餘部分。_core.img_ 正常情況下跟步驟 1.5 儲存在同一地方並且有著同樣的問題，可是，當他被移動到一個檔案系統或一個純粹的分割區時會比在步驟 1.5 移動或刪除引起更少的麻煩。一旦完成讀取，_core.img_ 會讀取預設的設定檔和其他需要的模組。

### 當 GRUB 啟動後

一旦選擇了啟動選項，GRUB 把選擇的核心載入記憶體並把控制交給核心。在此步驟中，對於 Windows 之類不支援多啟動標準的作業系統，GRUB 也可以通過鏈式啟動把控制傳給其它啟動器。在這種情況下，其它作業系統的啟動程式被 GRUB 儲存了下來；與核心不同，其它作業系統如同直接自 MBR 啟動。類似 Windows 的啟動選單，也許是另一個啟動管理器，它允許在多個不支援多啟動的作業系統中做進一步的選擇。（在已有 Windows 的系統上面，或者包含多個 Windows 版本的系統上安裝現代的 Linux 而不修改原作業系統，即屬於這類情況。）

## 安裝

GRUB 的一個重要的特性是安裝它不需依附一個作業系統；但是，這種安裝需要一個 Linux/Windows 副本。由於單獨工作，GRUB 實質上是一個微型系統，通過鏈式啟動的方式，它可以啟動所有安裝的主流作業系統。

與 LILO 不同，修改 GRUB 的設定檔後，不必把 GRUB 重新安裝到 MBR 或者某個分割區中。

在 Linux 中，「grub-install」命令是用來把 GRUB 的步驟 1 安裝到 MBR 或者分割區中的。GRUB 的設定檔、步驟 2 以及其它檔案必須安裝到某個可用的分割區中。如果這些檔案或者分割區不可用，步驟 1 將把使用者留在命令列介面。

GRUB Legacy 的設定檔為 `/boot/grub/menu.lst` 或 `/boot/grub/grub.conf`。GRUB 2 的設定檔為 `/boot/grub/grub.conf`。

除了硬碟外，GRUB 也可安裝到光碟、軟碟和隨身碟等移動媒介中，這樣就可以啟動一台無法從硬碟啟動的系統。

## 參見

* Windows Boot Manager
* NTLDR
* LILO
* UEFI
* BIOS

## 參考資料

* Brady, Pádraig. Details of GRUB on the PC. pixelbeat.org. [2006-11-22]. （原始內容存檔於 2006-11-27）.
* Okuji, Yoshinori. GNU GRUB. gnu.org. [2007-11-29]. （原始內容存檔於 2007-11-26）.

## 外部連結

* GNU GRUB 首頁（頁面存檔備份，存於網際網路檔案館）（英文）
* GNU GRUB 官方手冊（頁面存檔備份，存於網際網路檔案館）（英文）
* GRUB 2 中文指南（頁面存檔備份，存於網際網路檔案館）（繁體中文）