GNU GRUB

引導加載程序包

GNU GRUB(簡稱「GRUB」)是一個來自GNU項目啟動引導程序。GRUB是多啟動規範的實現,它允許用戶可以在計算機內同時擁有多個操作系統,並在計算機啟動時選擇希望運行的操作系統。GRUB可用於選擇操作系統分區上的不同內核,也可用於向這些內核傳遞啟動參數。

GNU GRUB
通過GRUB在文本模式下啟動Debian GNU/Linux
通過GRUB在文本模式下啟動Debian GNU/Linux
開發者GNU項目
當前版本2.06(2021年6月8日,​3年前​(2021-06-08
源代碼庫 編輯維基數據鏈接
類型多重操作系統啟動管理器
許可協議GNU通用公共許可證
網站www.gnu.org/software/grub
GNU GRUB在MBR分區表的硬盤上
GNU GRUB在GPT分區表的硬盤上
boot.img嚴格占有446字節的大小,並被寫入MBR(0扇區)。如果可行(出於向後兼容的原因第一個分區起始於63扇區而非1扇區,但這不是強制的),core.img被寫入介於MBR和第一分區之間的空扇區之中。/boot/grub目錄可以放在單獨的分區中,也可以放在根分區中。

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

特性

GRUB可動態配置;它在啟動時加載配置信息,並允許在啟動時修改,如選擇不同的內核和initrd。為此目的,GRUB提供了一個簡單的類似Bash命令行界面,它允許用戶編寫新的啟動順序。

GRUB非常輕便。它支持多種可執行格式;它除了可適用於支持多啟動的操作系統外,還通過鏈式啟動功能支持諸如WindowsOS/2之類的操作系統。GRUB支持大部分的Unix文件系統,也支持Windows適用的FATNTFS檔案系統,還支持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行的命令就可以從DOSWindowsLinuxBSDSolaris系統啟動。

儘管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也可安裝到光盤軟盤閃存盤移動介質中,這樣就可以啟動一台無法從硬盤啟動的系統。

參見

參考資料

外部連結