在 Linux 中自定义 GRUB2 引导菜单

CompTIACompTIABeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何在 Linux 环境中自定义 GRUB2 启动菜单。GRUB2,即 GRand Unified Bootloader,是计算机启动时运行的第一个程序,负责加载 Linux 内核。你将通过操作其主配置文件 /etc/default/grub 来根据你的需求改变启动体验,从而获得实践经验。

你将首先访问并检查默认的 GRUB2 配置。接下来,你将修改关键参数,例如 GRUB_TIMEOUT 来改变启动菜单的显示时长,以及 GRUB_DEFAULT 来设置默认启动项。为了完成实验,你将使用 grub2-mkconfig 命令生成一个新的 GRUB2 配置文件来应用这些更改,并学习如何验证你的自定义设置是否已正确配置。

注意: 由于这是一个临时的、可丢弃的 LabEx 虚拟环境,我们无法执行实际的系统重启来查看启动菜单的更改效果。取而代之的是,你将学习通过检查生成的 GRUB2 文件来验证配置更改,这对于系统管理员在重启生产系统之前验证其配置同样是一项重要的技能。

访问 GRUB2 默认配置文件 /etc/default/grub

在此步骤中,你将学习如何访问和查看 GRUB2 的主配置文件。GRUB2 (GRand Unified Bootloader, version 2) 是大多数现代 Linux 发行版的默认引导加载程序。它是你启动计算机时运行的第一个程序,其任务是将 Linux 内核加载到内存中,然后启动操作系统。

你将要操作的用于自定义 GRUB2 行为的主要配置文件位于 /etc/default/grub。此文件包含键值对,用于控制启动菜单超时时间、默认启动的操作系统以及其他内核参数等设置。

在进行任何更改之前,检查当前配置至关重要。由于 /etc/default/grub 是由 root 用户拥有的系统文件,你需要使用 sudo 命令来访问它。我们将使用 cat 命令在终端中显示其内容。

执行以下命令查看 GRUB2 默认配置文件的内容:

sudo cat /etc/default/grub

你将看到类似以下的输出。具体值可能因你的系统配置而略有不同。

GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M rhgb quiet net.ifnames=0 console=tty0 console=ttyS0,115200n8 no_timer_check iommu=pt crash_kexec_post_notifiers=1 nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

让我们简要看一下此文件中的两个重要参数:

  • GRUB_TIMEOUT: 此值决定了 GRUB2 菜单在自动启动默认项之前显示的时长(以秒为单位)。
  • GRUB_DEFAULT: 此参数指定了默认启动的操作系统或内核。

在下一步中,你将学习如何修改这些参数来改变启动菜单的行为。

修改 GRUB_TIMEOUT 和 GRUB_DEFAULT 参数

在此步骤中,你将修改 GRUB2 配置文件以更改启动菜单的行为。具体来说,你将增加菜单超时时间并设置一个特定的默认启动项。要编辑 /etc/default/grub 文件,你将使用 nano,一个简单直观的命令行文本编辑器。由于这是一个系统文件,你必须使用 sudo 来获取编辑所需的权限。

首先,使用 nanosudo 权限打开文件。

sudo nano /etc/default/grub

nano 编辑器将打开并显示文件内容。现在,你将进行两项更改:

  1. 更改 GRUB_TIMEOUT 值:
    找到以 GRUB_TIMEOUT 开头的行。它可能被设置为 1。使用箭头键将光标移动到该行,并将值从 1 更改为 15。这将使 GRUB2 菜单等待 15 秒后自动启动。

    更改后该行应如下所示:

    GRUB_TIMEOUT=15
  2. 更改 GRUB_DEFAULT 参数:
    找到以 GRUB_DEFAULT 开头的行。其值可能是 saved。将此值更改为 0。设置 GRUB_DEFAULT=0 告诉 GRUB2 自动启动菜单列表中的第一个条目(列表是零索引的,所以 0 是第一个条目)。

    更改后该行应如下所示:

    GRUB_DEFAULT=0

完成这些更改后,你需要保存文件并退出 nano

  • Ctrl + O(“写入”命令)保存更改。
  • nano 会询问你确认要写入的文件名。只需按 Enter
  • Ctrl + X 退出 nano 编辑器并返回到你的 shell 提示符。

你现在已成功修改了 GRUB2 的默认设置。在下一步中,你将应用这些更改。

应用和验证 GRUB2 配置更改

在此步骤中,你将应用在上一步中进行的配置更改,并学习如何验证 GRUB2 是否已正确配置。你将使用 grub2-mkconfig 命令根据你的修改生成新的配置文件。

生成新的 GRUB2 配置

既然你已经修改了 /etc/default/grub 文件,你需要通过生成新的 GRUB2 配置文件来应用这些更改。grub2-mkconfig 命令读取 /etc/default/grub 的设置以及 /etc/grub.d/ 中的脚本,以创建最终的 GRUB2 配置。

运行以下命令生成新配置:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

你应该会看到类似以下的输出:

Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done

此命令会扫描你的系统以查找可用的内核,读取你的配置设置,并创建最终的 GRUB2 菜单配置。

验证你的配置更改

让我们验证你的更改是否已正确应用到 GRUB2 配置中。首先,检查你的修改设置是否已反映在 /etc/default/grub 文件中:

sudo grep -E "(GRUB_TIMEOUT|GRUB_DEFAULT)" /etc/default/grub

你应该会看到显示你修改后的值的输出:

GRUB_TIMEOUT=15
GRUB_DEFAULT=0

接下来,验证这些设置是否已应用到生成的 GRUB2 配置文件中:

sudo grep -E "(timeout|default)" /boot/grub2/grub.cfg | head -5

这将向你展示你的设置在实际 GRUB2 配置文件中的显示方式。

创建配置备份

在进行更改之前,创建重要配置文件备份始终是一个好习惯:

sudo cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.backup

这将创建一个备份副本,你可以在需要时进行恢复。

故障排除和验证 GRUB2 配置

在此最后一步中,你将学习 GRUB2 配置的基本故障排除技术,并了解如何验证你的更改。这些技能对于需要确保其 GRUB2 修改在重启生产系统前正常工作的系统管理员至关重要。

检查 GRUB2 配置语法

使用内置语法检查器验证你的 GRUB2 配置是否没有语法错误:

sudo grub2-script-check /boot/grub2/grub.cfg

如果没有错误,此命令将静默返回。任何语法错误都将显示行号,这有助于你识别和修复问题。

理解 GRUB2 目录结构

探索 GRUB2 配置目录结构以了解其工作原理。请注意,访问此目录需要 root 权限:

sudo ls -la /etc/grub.d/

这将显示所有生成 GRUB2 菜单不同部分的脚本。每个脚本都有一个数字前缀,决定了执行顺序。你将看到各种脚本,例如:

  • 00_header: 设置 GRUB2 基本配置
  • 00_tuned: Tuned 特定配置
  • 01_users: 用户配置
  • 10_linux: 查找并添加 Linux 内核
  • 20_linux_xen: Xen hypervisor 支持
  • 30_os-prober: 搜索其他操作系统
  • 40_custom: 包含用户定义的菜单项

实际脚本可能因你的系统配置和已安装的软件包而异。

查看可用的启动项

让我们检查一下在生成的配置中有哪些可用的启动项:

sudo grep "menuentry" /boot/grub2/grub.cfg | head -10

此命令将显示菜单项引用和实际菜单项。输出可能同时包含配置变量(如 menuentry_id_option)和实际的启动菜单项。查找包含完整菜单项定义的行。

验证超时和默认设置

检查你的超时和默认设置是否已正确配置:

sudo grep -E "set timeout|set default" /boot/grub2/grub.cfg

你将在配置文件中看到多个超时和默认设置。这是正常的,因为 GRUB2 对不同场景使用不同的超时值:

  • 主超时(通常是你配置的 15 秒)
  • 特殊情况的条件超时
  • 不同的超时样式(菜单、隐藏)

需要验证的关键设置是:

  • set default="0" - 将第一个菜单项设置为默认
  • set timeout=15 - 将主菜单超时设置为 15 秒

了解 GRUB2 恢复

理解 GRUB2 恢复对于故障排除启动问题至关重要。在紧急情况下,你可以:

  1. 访问 GRUB2 命令行:在 GRUB2 菜单中按 c 进入命令行模式
  2. 编辑启动项:在启动前按 e 编辑启动项
  3. 使用救援模式:如果 GRUB2 找不到其配置,它将进入救援模式

常见的恢复命令包括:

  • ls: 列出可用的分区和文件
  • set root=(hd0,1): 设置根分区
  • linux /boot/vmlinuz root=/dev/sda1: 加载内核
  • boot: 开始启动过程

最终配置验证

让我们对你的完整 GRUB2 配置进行最终检查:

sudo cat /etc/default/grub | grep -E "(TIMEOUT|DEFAULT)"

这确认了你的基本设置已正确保存在源配置文件中。

你已完成:

  • 修改了 GRUB2 超时和默认启动设置
  • 使用 grub2-mkconfig 应用了配置更改
  • 学会了验证和故障排除 GRUB2 配置
  • 创建了关键启动文件的备份程序
  • 理解了 GRUB2 目录结构和恢复选项
  • 获得了在系统重启前验证配置的技能

你的 GRUB2 配置现已正确自定义,具有 15 秒的超时时间和以第一个菜单项为默认。在生产环境中,这些更改将在下次系统重启时生效,提供更友好的启动体验。

总结

在这个全面的实验中,你获得了 GRUB2 引导加载程序定制和故障排除技术方面的实践经验。你首先检查了默认的 GRUB2 配置,然后修改了关键参数,包括 GRUB_TIMEOUTGRUB_DEFAULT,以定制引导菜单行为。你学会了使用 grub2-mkconfig 命令应用这些更改,并验证了你的修改是否已正确实施。

你掌握的关键技能包括理解 GRUB2 配置结构,安全地修改 /etc/default/grub 文件,正确应用配置更改,以及实施适当的验证和备份程序。你还学习了基本的故障排除技术,包括语法检查、配置验证以及理解 GRUB2 恢复选项,这些对于系统管理员来说至关重要。

该实验强调了系统管理员在实际场景中所需的实践技能,特别是能够在将 GRUB2 配置应用于生产系统之前进行验证的能力。你学会了使用 grub2-script-check 等命令进行语法验证,以及使用各种 grep 命令来验证你的更改是否已正确应用于生成的配置文件。

这些技能使你能够自信地处理引导配置场景,并在企业 Linux 环境中有效地解决与引导相关的问题。你练习的验证技术对于确保在重启生产系统之前 GRUB2 配置的正确性尤其有价值。