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也可安裝到光碟軟碟USB手指移動媒介中,這樣就可以啟動一台無法從硬碟啟動的系統。

參見

參考資料

外部連結