您好,登錄后才能下訂單哦!
這篇文章主要介紹了linux中怎么配置并排除GNU引導加載程序故障,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
GRUB 引導裝載程序介紹
在現代系統中,你會發現有兩種主要的 GRUB 版本(一種是有時被稱為 GRUB Legacy 的 v1 版本,另一種則是 v2 版本),雖說多數***版本的發行版系統都默認使用了 v2 版本。如今,只有 紅帽企業版 Linux 6 及其衍生系統仍在使用 v1 版本。
因此,在本指南中,我們將著重關注 v2 版本的功能。
不管 GRUB 的版本是什么,一個引導加載程序都允許用戶:
通過指定使用不同的內核來修改系統的行為;
從多個操作系統中選擇一個啟動;
添加或編輯配置區塊來改變啟動選項等。
如今,GNU 項目負責維護 GRUB,并在它們的網站上提供了豐富的文檔。當你在閱讀這篇指南時,我們強烈建議你看下 GNU 官方文檔。
當系統引導時,你會在主控制臺看到如下的 GRUB 畫面。最開始,你可以根據提示在多個內核版本中選擇一個內核(默認情況下,系統將會使用***的內核啟動),并且可以進入 GRUB 命令行模式(使用 c 鍵),或者編輯啟動項(按下 e 鍵)。
GRUB 啟動畫面
你會考慮使用一個舊版內核啟動的原因之一是之前工作正常的某個硬件設備在一次升級后出現了“怪毛病(acting up)”(例如,你可以參考 AskUbuntu 論壇中的這條鏈接)。
在啟動時會從 /boot/grub/grub.cfg 或 /boot/grub2/grub.cfg 文件中讀取GRUB v2 的配置文件,而 GRUB v1 使用的配置文件則來自 /boot/grub/grub.conf 或 /boot/grub/menu.lst。這些文件不應該直接手動編輯,而應通過 /etc/default/grub 的內容和 /etc/grub.d 目錄中的文件來更新。
在 CentOS 7 上,當系統最初完成安裝后,會生成如下的配置文件:
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="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet" GRUB_DISABLE_RECOVERY="true"
除了在線文檔外,你也可以使用下面的命令查閱 GNU GRUB 手冊:
# info grub
如果你對 /etc/default/grub 文件中的可用選項特別感興趣的話,你可以直接查閱配置一節的幫助文檔:
# info -f grub -n 'Simple configuration'
使用上述命令,你會發現 GRUB_TIMEOUT 用于設置啟動畫面出現和系統自動開始啟動(除非被用戶中斷)之間的時間。當該變量值為 -1 時,除非用戶主動做出選擇,否則不會開始啟動。
當同一臺機器上安裝了多個操作系統或內核后,GRUB_DEFAULT 就需要用一個整數來指定 GRUB 啟動畫面默認選擇啟動的操作系統或內核條目。我們既可以通過上述啟動畫面查看啟動條目列表,也可以使用下面的命令:
在 CentOS 和 openSUSE 系統上
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg
在 Ubuntu 系統上
# awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg
如下圖所示的例子中,如果我們想要使用版本為 3.10.0-123.el7.x86_64 的內核(第四個條目),我們需要將 GRUB_DEFAULT 設置為 3(條目從零開始編號),如下所示:
GRUB_DEFAULT=3
使用舊版內核啟動系統
***一個需要特別關注的 GRUB 配置變量是 GRUB_CMDLINE_LINUX,它是用來給內核傳遞選項的。我們可以在 內核變量文件 和 man 7 bootparam 中找到能夠通過 GRUB 傳遞給內核的選項的詳細文檔。
我的 CentOS 7 服務器上當前的選項是:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
為什么你希望修改默認的內核參數或者傳遞額外的選項呢?簡單來說,在很多情況下,你需要告訴內核某些由內核自身無法判斷的硬件參數,或者是覆蓋一些內核檢測的值。
不久之前,就在我身上發生過這樣的事情,當時我在自己已用了 10 年的老筆記本上嘗試了衍生自 Slackware 的 Vector Linux。完成安裝后,內核并沒有檢測出我的顯卡的正確配置,所以我不得不通過 GRUB 傳遞修改過的內核選項來讓它工作。
另外一個例子是當你需要將系統切換到單用戶模式以執行維護工作時。為此,你可以直接在 GRUB_CMDLINE_LINUX 變量中直接追加 single 并重啟即可:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"
編輯完 /etc/default/grub 之后,你需要運行 update-grub (在 Ubuntu 上)或者 grub2-mkconfig -o /boot/grub2/grub.cfg (在 CentOS 和 openSUSE 上)命令來更新 grub.cfg 文件(否則,改動會在系統啟動時丟失)。
這條命令會處理早先提到的那些啟動配置文件來更新 grub.cfg 文件。這種方法可以確保改動持久化,而在啟動時刻通過 GRUB 傳遞的選項僅在當前會話期間有效。
修復 Linux GRUB 問題
如果你安裝了第二個操作系統,或者由于人為失誤而導致你的 GRUB 配置文件損壞了,依然有一些方法可以讓你恢復并能夠再次啟動系統。
在啟動畫面中按下 c 鍵進入 GRUB 命令行模式(記住,你也可以按下 e 鍵編輯默認啟動選項),并可以在 GRUB 提示中輸入 help 命令獲得可用命令:
修復 Linux 的 Grub 配置問題
我們將會著重關注 ls 命令,它會列出已安裝的設備和文件系統,并且我們將會看看它查找到的東西。在下面的圖片中,我們可以看到有 4 塊硬盤(hd0 到 hd3)。
貌似只有 hd0 已經分區了(msdos1 和 msdos2 可以證明,這里的 1 和 2 是分區號,msdos 則是分區方案)。
現在我們來看看能否在***個分區 hd0(msdos1)上找到 GRUB。這種方法允許我們啟動 Linux,并且使用高級工具修復配置文件,或者如果有必要的話,干脆重新安裝 GRUB:
# ls (hd0,msdos1)/
從高亮區域可以發現,grub2 目錄就在這個分區:
查找 Grub 配置
一旦我們確信了 GRUB 位于 (hd0, msdos1),那就讓我們告訴 GRUB 該去哪兒查找它的配置文件并指示它去嘗試啟動它的菜單:
set prefix=(hd0,msdos1)/grub2 set root=(hd0,msdos1) insmod normal normal
查找并啟動 Grub 菜單
然后,在 GRUB 菜單中,選擇一個條目并按下回車鍵以使用它啟動。一旦系統成功啟動后,你就可以運行 grub2-install /dev/sdX 命令修復問題了(將 sdX 改成你想要安裝 GRUB 的設備)。然后啟動信息將會更新,并且所有相關文件都會得到恢復。
# grub2-install /dev/sdX
其它更加復雜的情景及其修復建議都記錄在 Ubuntu GRUB2 故障排除指南 中。該指南中闡述的概念對于其它發行版也是有效的。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“linux中怎么配置并排除GNU引導加載程序故障”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。