Linux 黑話解釋:Linux 中的 GRUB 是什么?
如果你曾經(jīng)使用過 Linux 桌面,你一定見過這個屏幕。這就是所謂的 GRUB 屏幕。是的,它的字母全部都是大寫的。
Remember this screen? This is GRUB
在 “Linux 黑話解釋Linux Jargon Buster”系列的這一個章節(jié)中,我將告訴你 GRUB 是什么,以及它有什么用處。此外,我還會簡要地介紹一下配置和定制的部分。
GRUB 是什么?
GRUB 是一個用于加載和管理系統(tǒng)啟動的完整程序。它是 Linux 發(fā)行版中最常見的引導(dǎo)程序bootloader。引導(dǎo)程序是計算機啟動時運行的第一個軟件。它加載 操作系統(tǒng)的內(nèi)核,然后再由內(nèi)核初始化操作系統(tǒng)的其他部分(包括 Shell、顯示管理器、桌面環(huán)境 等等)。
引導(dǎo)程序和引導(dǎo)管理器
我不想現(xiàn)在就把你搞糊涂,但是我認(rèn)為這個話題是不可避免的。引導(dǎo)程序boot loader和引導(dǎo)管理器boot manager之間有著一條模糊的界限。
你已經(jīng)知道了引導(dǎo)程序是什么。它會首先啟動,然后將內(nèi)核加載到內(nèi)存中并執(zhí)行它。引導(dǎo)管理器則允許你在不同的操作系統(tǒng)之間進行選擇(如果你的電腦上不止一個操作系統(tǒng)的話)。引導(dǎo)管理器并不會直接加載系統(tǒng)。
隨著 Linux 內(nèi)核 3.3 版本的推出,Linux 內(nèi)核包括了一個內(nèi)置的 EFI 引導(dǎo)程序。事實上,任何一個支持 EFI 的系統(tǒng)都包括一個 EFI 引導(dǎo)程序。在支持 EFI 的系統(tǒng)中,固件會讀取 EFI 系統(tǒng)分區(qū)EFI System Partition(ESP)中的 EFI 文件,從而獲得啟動信息。
這里插入一張圖片,圖中顯示了帶有 ESP 分區(qū)的分區(qū)表:
GRUB 既是一個引導(dǎo)程序,也是一個引導(dǎo)管理器。一會兒我再來談 GRUB。讓我們先看看其他類似 GRUB 的程序。
小知識:GRUB 是 GRand Unified Bootloader(大一統(tǒng)引導(dǎo)程序) 的首字母縮寫。
GRUB 屏幕上的那些行是什么意思?
你會在 GRUB 屏幕上看到幾行字。這些行對于不同的設(shè)置、不同的發(fā)行版會有所不同。
通常情況下,第一行是你的 Linux 發(fā)行版。如果你看到類似高級選項的東西,你可以進入其中,找到一些以 “l(fā)inux-generic-x-y-z” 等開頭的行。
當(dāng)你的 Linux 發(fā)行版更新內(nèi)核版本時,它至少會保留一個舊版本。你可以選擇啟動到舊的 Linux 內(nèi)核,以防你的系統(tǒng)遇到新更新的 Linux 內(nèi)核的任何問題。
在基于 Ubuntu 的發(fā)行版中,你也可以看到一個恢復(fù)選項。
在高級選項下,通常有一個舊的內(nèi)核版本和恢復(fù)選項
在最后,你可能會看到一個條目,如系統(tǒng)設(shè)置或 UEFI 設(shè)置,以訪問系統(tǒng)的 BIOS 設(shè)置。
還有哪些類似 GRUB 的引導(dǎo)管理器?
GRUB 是 Linux 中最流行的引導(dǎo)管理器。但它并不是唯一的一個。有一個高度可定制的引導(dǎo)管理器,名字叫做 rEFInd 引導(dǎo)管理器,它同樣受到了一些 Linux 用戶的喜愛。
定制化的 rEFInd 引導(dǎo)管理器屏幕 | 圖片來源:kofler.info/pop_os
還有一個基于文本的引導(dǎo)管理器,名字叫做 systemd-boot。你可以猜到這是專為基于 systemd 的 Linux 發(fā)行版準(zhǔn)備的。有一些發(fā)行版正在使用 systemd-boot,比如 Pop OS。
Pop OS 中的 systemd-boot | 圖片來源:kofler.info/pop_os
訪問或編輯 GRUB
通常你看到的 GRUB 屏幕是它的菜單界面。如果你安裝了一個以上的操作系統(tǒng),它會允許你在其中選擇一個來啟動。如果你的 Linux 發(fā)行版安裝了不止一個內(nèi)核,你也可以選擇加載不同的內(nèi)核。
根據(jù)不同的 Linux 發(fā)行版的配置,你的 GRUB 菜單上可能會有一些其他選項。
你可以在 GRUB 菜單界面按 e 鍵來編輯菜單項。這樣你就可以在內(nèi)核加載前修改它的參數(shù)。例如,在某些情況下,禁用內(nèi)核提供的圖形驅(qū)動可以幫助你解決 Linux 系統(tǒng)在啟動時卡住的問題。
你也可以在 GRUB 菜單界面上按 c 鍵來進入 GRUB 的命令行菜單。
GRUB 配置文件
你在菜單界面里對 GRUB 所做的任何改變都是暫時的。如果你想對 GRUB 做一些永久性的改變,比如改變默認(rèn)的超時時間,你可以在 Linux 系統(tǒng)啟動后修改 GRUB 配置文件。
默認(rèn)的 GRUB 配置文件是 /etc/default/grub。還有一個 /etc/default/grub.d 目錄,里面也存放一些配置。你可以直接編輯 /etc/default/grub 文件,但是我還是建議通過在這個目錄中添加配置文件(.cfg 文件)進行額外的修改。
默認(rèn)的 GRUB 配置文件
你必須 更新 GRUB 才能使這些修改生效。
使用 GRUB 定制器來定制 GRUB
如果你不太習(xí)慣 在終端里使用文本編輯器編輯文件,你可以 使用一個叫做 GRUB 定制器的圖形工具。
它允許你改變啟動順序、默認(rèn)超時時間等等。你還可以用它來把 GRUB 的背景設(shè)置成一張自定義的墻紙。
GRUB 定制器可以在 Ubuntu 20.04 中從 Universe 倉庫安裝,在 Ubuntu 18.04 中 通過 PPA 安裝。它可以 通過 AUR 在基于 Arch Linux 的發(fā)行版中使用。
總結(jié)
至此,本文幾乎涉及到了所有與 GRUB 相關(guān)的簡單內(nèi)容。至于 EFI、引導(dǎo)加載和 GRUB 本身,它們都是詳細(xì)而復(fù)雜的話題,因此不在本文的討論范圍之內(nèi)。這篇文章旨在給你一個關(guān)于 GRUB 引導(dǎo)程序的總體概述。
或許我以后會寫一篇關(guān)于 GRUB 的詳細(xì)指南,解釋它底層的一些細(xì)節(jié)。目前,如果你想了解更多關(guān)于 GRUB 的信息,你可以在你的 Linux 終端里使用 info grub 命令訪問到 GRUB 文檔。
你可以在終端中訪問 GRUB 手冊
我希望你現(xiàn)在對什么是 GRUB 有了一點點的了解。這里有一個 GIF 動圖供你一樂。
什么是 GRUB? UEFI 再也傷害不到我了 :)