《LINUX學習:Linux GRUB2 配置入門指南》要點:
本文介紹了LINUX學習:Linux GRUB2 配置入門指南,希望對您有用。如果有疑問,可以聯系我們。
學習 GRUB 引導加載法式是如何預備你的系統并啟動操作系統內核的.
自從上個月為我的文章《Linux 引導和啟動過程簡介》做研究開始,我對更深入了解 GRUB2 發生了興趣.這篇文章提供了配置 GRUB2 的簡要介紹.為了簡便起見,我大多數情況下會使用 GRUB 指代 GRUB2.
?
GRUB 來自 GRand Unified Bootloader 的縮寫.它的功能是在啟動時從 BIOS 接管掌控、加載自身、加載 Linux 內核到內存,然后再把執行權交給內核.一旦內核開始掌控,GRUB 就完成了它的任務,也就不再必要了.
GRUB 支持多種 Linux 內核,并允許用戶在啟動時通過菜單在其中選擇.我發現這是一種非常有用的工具,因為我有很多次遇到一個應用程序或者系統服務在特定內核版本下失敗的問題.有好幾次,引導到一個較舊的內核時就可以避免類似的問題.默認情況下,使用 yum
?或?dnf
進行更新時會保存三個內核 - 最新的以及兩個比較舊的.在被擔保理器刪除之前所保留的內核數目可以在 /etc/dnf/dnf.conf
?或?/etc/yum.conf
?文件中配置.我通常把 installonly_limit
的值修改為 9 以便保留 9 個內核.當我不得不恢復到低幾個版本的內核時這非常有用.
?
GRUB 菜單的功效是當默認的內核不是想要的時,允許用戶從已經安裝的內核中選擇一個進行引導.通過上下箭頭鍵允許你選中想要的內核,敲擊回車鍵會使用選中的內核繼續引導進程.
GRUB 菜單也提供了超時機制,因此如果用戶沒有做任何選擇,GRUB 就會在沒有用戶干涉的情況下使用默認內核繼續引導.敲擊鍵盤上除了回車鍵之外的任何鍵會停止終端上顯示的倒數計時器.立即敲擊回車鍵會使用默認內核或者選中的內核繼續引導進程.
GRUB 菜單提供了一個 “救援rescue” 內核,用于故障排除或者由于某些原因導致的常規內核不克不及完成啟動過程.不幸的是,這個救援內核不會引導到救援模式.文章后面會更詳細介紹這方面的東西.
?
grub.cfg
?文件是 GRUB 配置文件.它由 grub2-mkconfig
法式根據用戶的配置使用一組主配置文件以及 grub 默認文件而生成./boot/grub2/grub.cfg
文件在 Linux 安裝時會初次生成,安裝新內核時又會重新生成.
grub.cfg
文件包括了類似 Bash 腳本的代碼以及一個依照安裝順序排序的已安裝內核列表.例如,如果你有 4 個已安裝內核,最新的內核索引是 0,前一個內核索引是 1,最舊的內核索引是 3.如果你能訪問 grub.cfg
文件,你應該去看看感受一下它看起來是什么樣.grub.cfg
太大也就沒有包含在這篇文章中.
?
grub.cfg
的主要配置文件都在?/etc/grub.d
目錄.該目錄中的每個文件都包括了最終會整合到 grub.cfg
文件中的 GRUB 代碼.這些配置文件的命名模式以排序方式設計,這使得最終的?grub.cfg
?文件可以按正確的順序整合而成.每個文件都有注釋表明該部分的開始和結束,這些注釋也是最終的 grub.cfg
文件的一部分,從而可以看出每個部分是由哪個文件生成.分隔注釋看起來像這樣:
### BEGIN /etc/grub.d/10_linux ###
### END /etc/grub.d/10_linux ###
不要修改這些文件,除非你是一個 GRUB 專家并明白更改會發生什么.無論如何,修改 grub.cfg
文件時你也總應該保留一個原始文件的備份.?40_custom
?和?41_custom
?這兩個特別的文件用于生成用戶對 GRUB 配置的修改.你仍然要注意對這些文件的更改的后果,并保留一份原始?grub.cfg
文件的備份.
你也可以把你本身的文件添加到 /etc/grub.d
目錄.這樣做的一個可能的原因是為非 Linux 操作系統添加菜單行.要注意遵循命名規則,確保配置文件中額外的菜單選項剛好在 10_linux
條目之前或之后.
?
老版本 GRUB 的配置非常簡單而明了,我只需要修改 /boot/grub/grub.conf
就可以了.對于新版本的 GRUB2,我雖然還可以通過更改?/boot/grub2/grub.cfg
來修改,但和老版本的 GRUB 相比,新版原形對更加復雜.另外,安裝一個新內核時?grub.cfg
?可能會被重寫,因此任何修改都可能消失.當然,GNU.org 的 GRUB 手冊確實有過直接創建和修改 /boot/grub2/grub.cfg
的討論.
一旦你明白了如何做,更改 GRUB2 配置就會變得非常簡單.我為之前的文章研究 GRUB2 的時候才明白這個.秘方就在 /etc/default
目錄里面,一個自然而然稱為 grub
的文件,它可以通過簡單的終端命令操作./etc/default
?目錄包含了一些類似 Google Chrome、 useradd、 和 grub 程序的配置文件.
/etc/default/grub
?文件非常簡單.這個 grub
默認文件已經列出了一些有效的鍵值對.你可以簡單地變動現有鍵值或者添加其它文件中還沒有的鍵.下面的列表 1 顯示了一個沒有變動過的 /etc/default/grub
文件.
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g'
/etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=Fedora_fedora25vm/root
rd.lvm.lv=fedora_fedora25vm/swap
rd.lvm.lv=fedora_fedora25vm/usr rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
列表 1:Fedora 25 一個原始 grub 默認文件.
GRUB 手冊 5.1 章節包含了所有可以添加到該 grub
文件的鍵的信息.我只需要修改 grub
默認文件已經有的一些鍵值就夠了.讓我們看看這些鍵值以及一些在 grub 默認文件中沒有出現的每個鍵的意義.
GRUB_TIMEOUT
這個鍵的值決定了顯示 GRUB 選擇菜單的時間長度.GRUB 提供了同時保存多個安裝內核并在啟動時使用 GRUB 菜單在其中選擇的功能.這個鍵的默認值是 5 秒,但我通常修改為 10 秒使得有更多時間查看選項并作出選擇.GRUB_DISTRIBUTOR
這個鍵定義了一個從 /etc/system-release
文件中提取發行版本的 sed 表達式.這個信息用于生成出現在 GRUB 菜單中的每個內核發布版的文本名稱,例如 “Fedora” 等.由于不同發行版之間 system-release
文件結構的差異,在你的系統中這個 sed 表達式可能有些不同.GRUB_DEFAULT
決定默認引導哪個內核.如果是 saved
,這代表最新內核.這里的其它選項如果是數字則代表了 grub.cfg
中列表的索引.使用索引號 3,就會總是加載列表中的第四個內核,即使安裝了一個新內核之后也是.因此使用索引數字的話,在安裝一個新內核后會加載不同的內核.要確保引導特定內核版本的唯一辦法是設置 GRUB_DEFAULT
的值為想要內核的名稱,例如 4.8.13-300.fc25.x86_64
.GRUB_SAVEDEFAULT
通常,grub 默認文件中不會指定這個選項.當選擇不同內核進行引導時,正常操作下該內核只會啟動一次.默認內核不會改變.當其設置為 true
并和 GRUB_DEFAULT=saved
一起使用時,這個選項會保存一個不同內核作為默認值.當選擇不同內核進行引導時會發生這種情況.GRUB_DISABLE_SUBMENU
一些人可能會希望為 GRUB 菜單創建一個內核的層級菜單結構.這個鍵和 grub.cfg
中一些額外內核配置允許創建這樣的層級結構.例如,主菜單中可能有 production
和 test
子菜單,每個子菜單中包括了一些合適的內核.設置它為 false
可以啟用子菜單.GRUB_TERMINAL_OUTPUT
一些環境下可能需要或者必要將輸出重定向到一個不同的顯示控制臺或者終端.默認情況下是把輸出發送到默認終端,通常 console
等價于 Intel 系列個人電腦的標準輸出.另一個有用的選擇是在使用串行終端或者 Integrated Lights Out (ILO) 終端連接的數據中心或者實驗室環境中指定 serial
.GRUB_TERMINAL_INPUT
和?GRUB_TERMINAL_OUTPUT
類似,可能需要或者必要重定向輸入為串行終端或者 ILO 設備、而不是標準鍵盤輸入.GRUB_CMDLINE_LINUX
這個鍵包括了在啟動時會傳遞給內核的命令行參數.注意這些參數會被添加到 grub.cfg
所有已安裝內核的內核行.這意味著所有已安裝的內核在啟動時都會有相同的參數.我通常刪除 rhgb
和 quiet
參數以便我可以看到引導和啟動時內核和 systemd 輸出的所有內核信息消息.GRUB_DISABLE_RECOVERY
???這個鍵的值被設置為 false
,GRUB 菜單中就會為每個已安裝的內核創建一個恢復條目.當設置為 true
時就不會創建任何恢復條目.但不管這個設置怎樣,最后的內核條目總是一個 rescue
選項.不過在 rescue 選項中我遇到了一個問題,下面我會詳細介紹.還有一些你可能覺得有用但我沒有在這里介紹的鍵.它們的描述可以在 GRUB 手冊 2 的 5.1 章節找到.
?
完成所需的配置之后,就必要生成 /boot/grub2/grub.cfg
?文件.這通過下面的命令完成.
grub2-mkconfig >/boot/grub2/grub.cfg
這個命令依照順序使用位于 /etc/grub.d
的配置文件構建 grub.cfg
?文件,然后使用 grub 默認文件的內容修改輸出以便獲得最終所需的配置.grub2-mkconfig
命令會嘗試定位所有已安裝的內核并在 grub.cfg
文件的 10_Linux
?部分新建條目.它還創建一個 rescue
條目提供一個用于從 Linux 不能啟動的嚴重問題中恢復的方法.
強烈建議你不要手動編纂?grub.cfg
?文件,因為任何對該文件的直接修改都會在下一次安裝新內核或者手動運行 grub2-mkconfig
時被重寫.
?
我遇到一個如果沒有意識到就可能導致嚴重后果的 GRUB2 問題.這個救援內核沒有啟動,反而啟動了另外一個內核.我發現那是列表中索引為 1 的內核,也便是列表中的第二個內核.額外的測試發現不管使用原始的還是我生成的 grub.cfg
?配置文件都會發生這個問題.我在虛擬機和真實硬件上都嘗試過而且都發生了這個問題.我只測試了 Fedora 25,因此其它 Fedora 發行版本可能沒有這個問題.
注意,從救援內核生成的 “recovery” 內核條目不克不及引導到維護模式.
我推薦將 grub 默認文件中 GRUB_DISABLE_RECOVERY
?的值更改為 “false”,然后生成你自己的 grub.cfg
.這會在 GRUB 菜單中為每個已安裝的內核生成可用的恢復條目.這些恢復配置能像期望那樣工作,從而從那些需要輸入暗碼登錄的內核條目中引導到運行級別 1,也就是進入(不需要暗碼的)單用戶維護模式.你也可以按 Ctrl-D
繼續正常的引導進入默認運行級別.
?
GRUB 是引導 Linux 計算機到可用狀態過程的一系列變亂中,發生在 BIOS 之后的第一步.理解如何配置 GRUB 對于恢復或者處理多種類型的問題非常重要.
這么多年來我多次不得不引導到恢復或者救援模式以便辦理多種類型的問題.其中的一些問題確實是類似 /etc/fstab
或其它配置文件中不恰當條目導致的引導問題,也有一些是由于應用程序或者系統軟件和最新的內核不兼容的問題.硬件兼容性問題也可能妨礙特定的內核啟動.
我希望這些信息能對你開啟 GRUB 配置之旅有所贊助.
( 題圖 :?Internet Archive?Book?Images. Opensource.com 改動. CC BY-SA 4.0)
作者簡介:
David Both - David Both 是一個居住在 Raleigh,北卡羅來納州的 Linux 和開源提倡者.他在 IT 界已經有超過 40 年,并在他工作的 IBM 執教 OS/2 20 多年.在 IBM 的時候,他在 1981 年開設了第一個最初 IBM 個人電腦的培訓課程.他在紅帽教授過 RHCE 課程并在 MCI Worldcom、 Cisco、 和北卡羅來納州工作過.他已經在 Linux 和開源軟件方面工作將近 20 年.
via: https://opensource.com/article/17/3/introduction-grub2-configuration-linux
作者:David Both 譯者:ictlyh 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
本文永遠更新鏈接地址:
維易PHP培訓學院每天發布《LINUX學習:Linux GRUB2 配置入門指南》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。