LFCS:如何配置和故障排除統一啟動引導程序(GRUB) – 第13部分

因為自從2016年2月2日起,LFCS 認證考試目標最近發生了變化,我們在此添加所需的主題到此處發布的LFCS 系列。為了準備這次考試,我們強烈建議您也跟隨LFCE 系列

LFCS: Configure and Troubleshoot Grub Boot Loader – Part 13

在本文中,我們將向您介紹 GRUB 並解釋為什麼引導加載程序是必要的,以及它如何增加系統的靈活性。

從您按下計算機的電源按鈕開始,到您獲得完全功能的系統為止,Linux 引導過程遵循此高級序列:

  1. 1.一個被稱為POST上電自檢)的過程對您計算機的硬件組件進行總體檢查。
  2. 2.POST完成後,它將控制權交給引導加載程序,後者將 Linux 內核(連同initramfs)加載到內存中並執行它。在 Linux 中最常用的引導加載程序是GRand Unified Boot loader,簡稱GRUB
  3. 3. 核心檢查並訪問硬件,然後運行初始進程(通常以通用名稱“init”而聞名),該進程通過啟動服務完成系統啟動。

在本系列的第7部分(“SysVinit、Upstart 和 Systemd”)中,我們介紹了現代Linux發行版使用的服務管理系統和工具。在繼續之前,您可能需要查看該文章。

介紹GRUB引導加載程序

現代系統中可以找到兩個主要的GRUB版本(有時稱為GRUB Legacyv2v1)。儘管大多數發行版在其最新版本中默認使用v2,但只有Red Hat Enterprise Linux 6及其衍生版本今天仍在使用v1

因此,在本指南中,我們將主要關注v2的功能。

無論是哪個GRUB版本,引導加載程序都允許用戶:

  1. 1).通過指定要使用的不同內核來修改系統的行為,
  2. 2).選擇要啟動的替代操作系統,以及
  3. 3).添加或編輯配置段以更改啟動選項,等等。

今天,GRUBGNU项目维护,并在他们的网站上有很好的文档。在阅读本指南时,建议您使用GNU官方文档

当系统启动时,您会在主控制台上看到以下GRUB屏幕。最初,您将被提示选择备用内核(默认情况下,系统将使用最新内核启动),并允许输入GRUB命令行(使用c)或编辑引导选项(按e键)。

GRUB Boot Screen

您考虑使用旧内核引导的原因之一是硬件设备在升级后开始出现问题(请参考此链接AskUbuntu论坛中的示例)。

GRUB v2配置在引导时从/boot/grub/grub.cfg/boot/grub2/grub.cfg读取,而/boot/grub/grub.conf/boot/grub/menu.lstv1中使用。这些文件不应手动编辑,而是根据/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(第4個條目)進行啟動,我們需要將GRUB_DEFAULT設置為3(條目從零開始內部編號)。

GRUB_DEFAULT=3
Boot System with Old Kernel Version

一個特別重要的 GRUB 配置變數是 GRUB_CMDLINE_LINUX,用於傳遞選項給內核。可以通過 GRUB 傳遞給內核的選項在內核參數文件man 7 bootparam中有詳細記載。

我 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"

為什麼要修改默認的內核參數或傳遞額外的選項呢?簡單來說,有時候您需要告訴內核某些硬體參數,這些參數內核本身可能無法確定,或者覆蓋它本應檢測到的值。

這種情況不久前也發生在我身上,當時我在我那部十年前的筆記本上嘗試安裝了Vector Linux,一個Slackware的衍生版。安裝後,它沒有檢測到我顯卡的正確設置,所以我不得不修改通過 GRUB 傳遞的內核選項,以使其正常運作。

另一個例子是當您需要將系統切換到單用戶模式執行維護任務時。您可以通過將單詞 single 附加到 GRUB_CMDLINE_LINUX 並重新啟動來實現:

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/defalt/grub 後,您需要運行 update-grub(Ubuntu)或 grub2-mkconfig -o /boot/grub2/grub.cfgCentOSopenSUSE)以更新 grub.cfg(否則,更改將在啟動時丟失)。

這個指令將處理之前提到的開機配置文件,以更新 grub.cfg。這種方法確保更改是永久的,而通過 GRUB 在開機時傳遞的選項只會在當前會話中持續。

修復 Linux GRUB 問題

如果您安裝了第二個操作系統,或者如果您的 GRUB 配置文件因人為錯誤而損壞,那麼您可以通過某些方法使系統恢復正常,並能夠再次啟動。

在初始畫面中,按下 c 以獲取 GRUB 命令行(請記住您也可以按下 e 來編輯默認的啟動選項),並使用 help 來查看 GRUB 提示符中的可用命令:

Fix Grub Configuration Issues in Linux

我們將專注於 ls,它將列出已安裝的設備和文件系統,我們將檢查它找到了什麼。在下面的圖像中,我們可以看到有 4 個硬碟(hd0hd3)。

只有 hd0 似乎已經被分區(如 msdos1msdos2,其中 12 是分區號碼,msdos 是分區方案)。

現在讓我們檢查 hd0 上的第一個分區(msdos1),看看我們是否可以在那裡找到 GRUB。這種方法將允許我們啟動 Linux,然後使用其他高級工具來修復配置文件,或者如果需要的話重新安裝 GRUB:

# ls (hd0,msdos1)/

正如我們在突出顯示的區域中所看到的,我們在這個分區中找到了 grub2 目錄:

Find Grub Configuration

一旦我们确定 GRUB 位于(hd0,msdos1)中,让我们告诉 GRUB 在哪里找到它的配置文件,然后指示它尝试启动其菜单:

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal
Find and Launch Grub Menu

然后在 GRUB 菜单中,选择一个条目并按 Enter 键以使用它启动。一旦系统启动,您可以发出 grub2-install /dev/sdX 命令(将 sdX 更改为要安装 GRUB 的设备)。然后将更新引导信息并恢复所有相关文件。

# grub2-install /dev/sdX

其他更复杂的情况已记录在《Ubuntu GRUB2 故障排除指南》中,以及它们的建议修复方法。那里解释的概念也适用于其他发行版。

摘要

在本文中,我们向您介绍了 GRUB,指出了您可以在线和离线找到文档的位置,并解释了如何处理由于与引导加载程序相关的问题而导致系统无法正确引导的情况。

幸运的是,GRUB 是最好记录的工具之一,您可以轻松地在安装的文档中或使用我们在本文中分享的资源在线找到帮助。

您有问题或评论吗?请不要犹豫,通过下面的评论表单告诉我们。我们期待您的来信!

Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/