GNU GRUB(簡稱「GRUB」)是一個來自GNU專案的啟動載入程式。GRUB是多啟動規範的實現,它允許使用者可以在電腦內同時擁有多個作業系統,並在電腦啟動時選擇希望執行的作業系統。GRUB可用於選擇作業系統分割區上的不同核心,也可用於向這些核心傳遞啟動參數。
此條目翻譯品質不佳。 (2023年10月15日) |
![]() ![]() | |
![]() 通過GRUB在文字模式下啟動Debian GNU/Linux | |
開發者 | GNU專案 |
---|---|
目前版本 | |
原始碼庫 | |
類型 | 多重作業系統啟動管理器 |
授權條款 | GNU通用公眾授權條款 |
網站 | www.gnu.org/software/grub |
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/18/GNU_GRUB_on_MBR_partitioned_hard_disk_drives.svg/640px-GNU_GRUB_on_MBR_partitioned_hard_disk_drives.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/GNU_GRUB_on_GPT_partitioned_hard_disk_drives.svg/640px-GNU_GRUB_on_GPT_partitioned_hard_disk_drives.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/45/GNU_GRUB_components.svg/640px-GNU_GRUB_components.svg.png)
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非常輕便。它支援多種可執行格式;它除了可適用於支援多啟動的作業系統外,還通過鏈式啟動功能支援諸如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的步驟1包含在MBR中。由於受MBR的大小限制,步驟一所做的幾乎只是裝載GRUB的下一步驟(存放在硬碟的其它位置)。步驟1既可以直接裝載步驟2,也可以裝載步驟1.5:GRUB的步驟1.5包含在MBR後面的30千位元組中。步驟1.5載入步驟2。
當步驟2啟動後,它將呈現一個介面來讓使用者選擇啟動的作業系統。這步通常採用的是圖形選單的形式,如果圖形方式不可用或者使用者需要更進階的控制,可以使用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把選擇的核心載入主記憶體並把控制交給核心。在此步驟中,對於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
。
參見
參考資料
- 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).