什麼是 GRUB:GNU 啟動管理器完整指南

最後更新: 十月14 2025
  • GRUB 是選擇和載入作業系統的 GNU 啟動管理器,支援 BIOS/UEFI 和多重啟動。
  • GRUB 2 增加了模組、改進的檔案系統支援、UUID 搜尋和圖形選單/終端。
  • 配置透過 /etc/default/grub 和 40_custom 進行管理,並使用 update-grub 或 grub2-mkconfig 重新產生。
  • 安全性:使用密碼保護 GRUB,使用 LUKS 加密,並具有強大的密碼策略。

關於 GRUB 的一般說明

如果你在電腦上安裝了 GNU/Linux 系統,或使用多個作業系統,那麼你很可能聽過 GRUB。它是一個小巧但功能強大的程序,會在系統啟動前顯示,讓你可以選擇要載入的元件。雖然它常常被忽略,但它對於啟動作業系統以及將控制權順利移交給核心至關重要。

在PC啟動領域,GRUB憑藉其強大的功能和靈活性已成為事實上的標準。它誕生於GNU項目,如今已成為GNU/Linux系統中應用最廣泛的啟動管理器,兼容多種架構和文件系統,對新手友好易用,同時也是那些追求啟動過程細節精細化的用戶的瑞士軍刀。

GNU GRUB 是什麼以及它有什麼用途?

GNU GRUB(GNU GRand Unified Bootloader,GNU GRand Unified Bootloader,GNU GRUB)是一個多啟動管理器:當電腦開機時,韌體(BIOS 或 UEFI)會運行該軟體來選擇和載入作業系統。它允許用戶選擇選單項目、向核心傳遞參數、從網路啟動,甚至可以與控制台互動以排查特定問題。

它主要用於 GNU/Linux 發行版,但也曾被其他系統使用,例如 x86 架構的 Solaris。在現代UEFI系統中,韌體會直接載入位於 EFI 系統分割區 (ESP) 中的 GRUB 可執行檔(前提是該檔案已在 NVRAM 中註冊);在 BIOS/MBR 系統中,GRUB 會佔用磁碟的初始磁區並從那裡繼續載入。

除了典型的選單之外,GRUB 還符合多重啟動規範,這意味著它可以無縫啟動相容的核心。一旦核心載入到記憶體中,GRUB 就會交出控制權,它的任務就完成了,這絕非易事。

GRUB 啟動選項畫面

技術表和項目數據

GRUB 是 GNU 生態系統的一部分,並以 GNU GPL v3 或更高版本授權發布,屬於自由軟體。它的開發是開源的,擁有官方程式碼庫、錯誤追蹤系統和網站,以及一個非常活躍的社群。

它主要用 C 語言和彙編語言編寫,可在多個平台上運行: IA-32、x86-64 和 PowerPC等等。目前分支是 GRUB 2(歷史悠久的“GRUB Legacy”的重新實現)。最新發布的穩定版本是 2.12 (2023 年 12 月 20 日)。如果您想檢查本地版本,可以運行: grub-install --version 你就會看到相應的鏈。

一些歷史和演變

GRUB 最初是Erich Stefan Boleyn在 GNU Hurd 和 Mach 微內核框架下提出的專案。為了解決啟動方式的差異,創建了多重啟動規範 (Multiboot Specification),該規範旨在使引導程式和核心「使用同一種語言」。 1999 年, Gordon Matzigkeit 和 Yoshinori Okuji牽頭將其納入 GNU 專案的官方軟體包。

大約在2002年,一群日本研究人員啟動了PUPA(Preliminary Universal Programming Architecture,初步通用程式架構)項目,旨在重寫GRUB,使其更加健壯和模組化。這項工作最終催生了GRUB 2,而先前的版本則被稱為「GRUB Legacy」(其0.97版本最後一次更新是在2005年)。從2007年開始,一些發行版遷移到了GRUB 2,到2009年底,絕大多數發行版都預設包含了GRUB 2 。

GRUB啟動流程圖

如何使用 GRUB(BIOS 和 UEFI)啟動計算機

當你開啟電腦時,韌體會執行檢查(RAM、時脈、裝置、啟動順序)並尋找開機載入程式。在具有 BIOS/MBR 的系統上,控制權會轉移到 主開機記錄 (MBR),磁碟的初始 512 位元組GRUB 分為幾個階段:階段 1(MBR 中的最小程式碼)、階段 1.5(位於後續磁區,用於理解檔案系統)和階段 2(選單和進階功能)。在 GRUB 2 中,「1.5」不再存在;現在有具體的映像,例如 boot.img, core.img 以及根據安裝組合的模組(*.mod)。

  如何逐步設定電腦的 BIOS 或 UEFI

在 UEFI 中,這個過程更直接:韌體會從 EFI 分割區執行 GRUB EFI 二進位(前提是 GRUB EFI 已正確安裝和註冊)。無論哪種情況,GRUB 都會顯示一個選單或控制台,載入選定的內核,然後將執行權限移交給該內核。

多重引導規格和相容性

GRUB 實現了多重啟動,允許無需特殊「技巧」即可啟動相容的核心。此外,對於不支援多重啟動的系統(例如Windows 或 DOS),它提供了鍊式加載,目標指向其引導程式所在的分割區的第一個磁區。

它的檔案系統相容性非常廣泛:包括Btrfs、ext2/3/4、FAT12/16/32、exFAT、HFS/HFS+、ISO9660、Nilfs2、NTFS、ReiserFS、ZFS、ROMFS、JFS 和 XFS等。它還可以讀取 LVM 捲和 RAID 陣列中的數據,這在儲存結構複雜時是一個顯著的優勢。

特色和功能

  • 選單介面 可配置且高度靈活的互動終端,具有 Tab 自動完成功能和 Bash 風格的快捷方式。
  • 支持 LBA(邏輯區塊尋址) 克服經典 BIOS 限制並讀取超過 1024 個柱面。
  • 能力 網路啟動 (PXE/TFTP)和遠端終端,在集中管理場景中很有用。
  • 自動解壓縮和識別多種可執行格式。
  • 持久性儲存變數 儲存環境/載入環境 y grub-editenv (當平台允許時)。
  • 所有 RAM 檢測、磁碟幾何獨立性以及 透過標籤和 UUID 進行搜尋的機制.
  • 選單和背景的圖形支持,以及維護的模組化設計 核心映像 很小,並根據需要加載模組。

關鍵術語:設備、分割區和路徑

GRUB 以自己的方式命名磁碟和分割區。第一個磁碟通常是 (hd0),第一個分區 (hd0,1) 在 GRUB 2 中(記住:在 GRUB 2 中,編號從 1 開始;在 Legacy 中,編號從 0 開始)。若要指整個磁碟,請省略分割區: (hd0).

為了指示文件,設備與路徑結合: (hd0,1)/ruta/al/archivo。它還支援 屏蔽名單 (封鎖清單)當需要指示檔案系統中不可見的檔案在磁碟上的確切位置時,例如 (hd0,1)+1 對於分區的第一個扇區,有用 chainloader +1.

GRUB 中的「根檔案系統」與 Linux 中的「/」並不相同。它只是GRUB 讀取檔案的根分割區;一旦 Linux 核心取得控制權,它就會定義自己的實際根目錄,GRUB 中的其他一切都會變得無關緊要。

GRUB 介面

GRUB 提供三種主要視圖。最熟悉的是選單,其中包含預先配置的條目;您可以使用箭頭鍵導航,按 Enter 鍵啟動,按「e」鍵編輯條目,或按「c」鍵開啟控制台。

輸入編輯器允許您即時修改行(使用“o/O”添加,使用“e”編輯,使用“d”刪除),如果一切正常,則使用“b”啟動。它非常適合在不修改文件的情況下測試內核參數。

控制台模式功能最強大:它支援上下文自動補全、編輯快捷鍵,以及GRUB所有用於定位磁碟、載入核心/initrd 或鍊式載入的內部命令。如果設定檔遺失或損壞,GRUB 會將您引導至此模式,以便您手動解決問題。

常見錯誤訊息

錯誤可能出現在初始階段(較為有限)或載入功能表和模組時(描述更為詳細)。以下是 GRUB 可能顯示的一些典型錯誤代碼,為了清晰起見,已進行改寫

  • 1:無效或非絕對路徑;2:無效檔案類型(不是常規檔案);3–4:解壓縮過程中資料/標頭損壞;5: 分區表損壞 或無效。
  • 6:Stage1/Stage2 不相容;7:不支援載入 1 MB 以下的內容;8:嘗試在未載入核心的情況下啟動;9:未知啟動失敗。
  • 10:不支援多重引導功能;11:無法辨識設備;12:無效設備;13:不支援的可執行格式。
  • 14:檔案系統阻止讀取整個檔案;15: 文件未找到;16:文件系統結構不一致。
  • 17:無法掛載所選分割區;18:柱面超出 BIOS 支援的範圍(舊磁碟機上常見);19:Initrd 先於核心。
  • 20:多重開機核心之前的模組;21:選定的磁碟不存在;22:不存在的分割區;23:解釋數字時出錯。
  • 24:存取分割區外的區塊;25:磁碟讀取錯誤;26:符號連結過多;27:未知指令。
  • 28:專案不適合記憶體;29:磁碟寫入錯誤;30:無效參數;31:檔案未按磁區對齊(ReiserFS,使用 無尾).
  • 32:需要身份驗證;33:未配置串行設備;34:MBR 後沒有用於階段 1.5 的空閒扇區(與 EZ-BIOS 衝突或分區啟動過早)。
  如何啟用和配置隱藏的 Windows 11 設定

基本 GRUB 指令

在控制台中,你可以執行非常有用的互動式命令。例如: boot 啟動最後載入的程式(核心或鍊式載入程式),並且 chainloader <archivo> 從鏈中載入磁區或檔案;Windows 的典型捷徑是 chainloader +1.

displaymem 根據 BIOS 顯示記憶體使用情況,如果您不確定偵測到的 RAM,此功能非常方便。使用 initrd <archivo> 您指定核心所需的初始 RAM 磁碟映像。

要從 GRUB Legacy 控制台安裝到 MBR,您使用了 install 前往 階段1, 階段2 以及可選的設定檔。目前在 GRUB 2 中,從系統中使用 grub-install 並使用 update-grub/grub2-mkconfig.

命令 kernel 指定內核二進位檔案及其參數,例如: kernel /vmlinuz root=/dev/sda5通常先於 root (hdX,Y) o rootnoverify 設定 GRUB 將從中讀取的分割區。

設定檔和指令

在 GRUB Legacy 中,選單位於 /boot/grub/menu.lst o grub.conf,指令如下 color, default, fallback, hiddenmenu, password, timeout, splashimage 和方塊 title 每個系統的訂單。

一個典型的例子(解釋如下)包括 Linux 部分 root (hd0,2), kernel根參數=/…,而 boot;另一個適用於 Windows rootnoverify (hd0,1) y chainloader +1.

在 GRUB 2 中,自動產生的檔案是 /boot/grub/grub.cfg。不建議手動編輯;而是調整 /etc/default/grub (例如 GRUB_TIMEOUT, GRUB_DEFAULT等)並新增自訂條目 /etc/grub.d/40_custom.然後執行 update-grub o grub2-mkconfig 重新產生選單。

GRUB Legacy 和 GRUB 2 之間的主要區別

  • 設定檔來自 menu.lst/grub.conf a grub.cfg,使用更新的語法和命令並透過自動生成 grub-mkconfig.
  • 分割區編號 始於1 在 GRUB 2 中(在 Legacy 中它從 0 開始)。
  • 變數的持久性 save_env/load_env 在某些配置中。
  • 更好的路線檢測和 透過 UUID/標籤搜尋;支援更多檔案系統。
  • 直接讀取 LVM 和 RAID.
  • 終端和選單圖形以及重新組織的圖像:Stage 1.5 已經消失; boot.img, core.img 和動態模組(*.mod)。

使用 GRUB 進行安全性和強化

安全性差的引導管理器就像一個篩子。如果有人擁有實體存取權限,就能編輯核心參數或啟動不同的啟動項,那麼你的安全措施就形同虛設。因此,建議使用密碼保護 GRUB,並實施最佳實務。

設置一個 強密碼 限制條目修改或控制台存取。在 GRUB 2 中,使用使用者名稱和密碼 grub-mkpasswd-pbkdf2 並在腳本中配置相應的規則 /etc/grub.d/.

它還包含使用 LUKS 的磁碟加密,即使有人竊取了計算機,也無法讀取資料。此外,它還確保系統密碼策略嚴格,以減少暴力破解攻擊。

明智地管理您的日誌歷史記錄:那些會給攻擊者線索的日誌應該盡量減少或集中管理,並輔以訪問控制;那些有助於審計惡意嘗試的日誌應該匯總並在安全的位置進行分析。

若要偵測其他已安裝的系統並自動產生條目,請安裝 os-prober它將節省您的時間並防止重新建立選單時發生錯誤。

  掌握 Linux 中的 tar gz 指令

安裝與維護

如果你在安裝發行版時沒有安裝 GRUB,可以稍後再安裝。在 GRUB 2 系統中,運行 sudo grub-install /dev/sdX (用你的磁碟替換)然後 sudo update-grub o sudo grub2-mkconfig -o /boot/grub/grub.cfg您將在下次啟動時看到選單。

從 GRUB Legacy 控制台,經典過程是指示根並運行安裝: root (hd1,0) 接下來 setup (hd1,0) 對於第二個磁碟的第一個分割區,或者 setup (hd1) 如果您指向第二個磁碟的 MBR。

直接編輯 /boot/grub/grub.cfg 即使從技術上講這是可行的,但這在 GRUB 2 中並不是一個好主意。 推薦路線 就是要改變 /etc/default/grub, 採用 /etc/grub.d/40_custom 為了自己的內容和再生。

實際問題和有用的捷徑

如何知道 /dev/sda 上的哪一個是啟動分割區? 在 BIOS/MBR 系統上: sudo fdisk -l /dev/sda (參見“Boot”的星號)。在 GPT/UEFI 中: lsblk -o NAME,FSTYPE,PARTTYPE,PARTFLAGS,MOUNTPOINT 並尋找 EFI 分割區(FAT32,類型為 EF00/flags esp)。另外 sudo efibootmgr -v 顯示記錄的啟動條目。

如何取得分割區的 UUID?blkid o lsblk -f。 例如: sudo blkid /dev/sda2 返回其 UUID 和其他元數據。

如何讓 GRUB 2 等待 10 秒再進入預設條目? 調整 /etc/default/grubGRUB_TIMEOUT=10 (並且,如果適用, GRUB_TIMEOUT_STYLE=menu)並執行 sudo update-grub o grub2-mkconfig.

GRUB Legacy 指令安裝在第二個磁碟的第一個分割區上嗎? 打開控制台並運行: root (hd1,0) 進而 setup (hd1,0)。如果您想要 MBR,那麼 setup (hd1).

更改 GRUB 2 配置的步驟? 1)編輯 /etc/default/grub (例如。, GRUB_DEFAULT, GRUB_TIMEOUT), 2) 新增條目 /etc/grub.d/40_custom 如果你需要它們,3)再生 update-grub/grub2-mkconfig,4)重啟並測試。

在 GRUB 2 中將自訂選單放在哪裡? En /etc/grub.d/40_custom (或自己的文件 /etc/grub.d/ 獲得適當的權限)。切勿手動編輯 /boot/grub/grub.cfg 除非緊急情況。

GRUB Legacy 中的條目儲存在哪裡? En /boot/grub/menu.lst o grub.conf,根據分佈。

如何從選單存取 GRUB 控制台?在 GRUB 2 或 Legacy 中,按下「c」鍵。若要編輯特定條目,請按“e”鍵。這兩個快捷鍵在需要快速診斷問題時非常有用。

常見選項範例

預設啟動選擇: GRUB_DEFAULT=0 第一局開始; GRUB_DEFAULT=saved 記住上次使用的配置。更改後,重新產生配置。

等待時間: GRUB_TIMEOUT=4 調整選單延遲; 0 無需暫停即可開始;在某些情況下,您可以使用 GRUB_TIMEOUT_STYLE=hidden 為了更乾淨的開始。

選單更新:在 Debian/Ubuntu 及其衍生產品上, sudo update-grub;在其他情況下, sudo grub2-mkconfig -o /boot/grub/grub.cfg。 確保你有 os-prober 如果您想自動偵測其他系統,請安裝。

雖然 GRUB 也出現在 GNU/Linux 以外的系統中,但請記住它並非技術支援服務。如果你的問題與 Windows 系統相關,最實際的做法是前往專門討論 Windows 系統的論壇尋求協助。

GRUB 已從一個簡單的啟動選單發展成為一個真正的預系統環境,能夠啟動多個作業系統、管理複雜的磁碟,並只需幾個命令即可幫助您復原系統。透過適當的配置和一些強化措施(例如 GRUB 密碼、LUKS 加密、完善的金鑰策略和日誌管理),您將擁有一個強大、靈活且最重要的是可控的啟動過程。

UEFI 啟動套件
相關文章:
UEFI Bootkit:Linux 上的 Bootkitty 和 BlackLotus 的遺產