如何检查 Linux 中 GRUB 设置是否已应用

LinuxLinuxBeginner
立即练习

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

简介

在这个实验中,你将学习如何验证对 Linux 中 GRUB 引导加载程序配置所做的更改是否已成功应用。你将查看位于 /etc/default/grub 的主要 GRUB 配置文件,以了解其设置。

接下来,你将检查位于 /boot/grub/grub.cfg 的生成的 GRUB 菜单配置文件,以了解默认文件中的设置是如何转换的。最后,你将使用 dmesg 命令检查内核引导参数,以确认 GRUB 设置已反映在运行的系统中。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-558789{{"如何检查 Linux 中 GRUB 设置是否已应用"}} linux/grep -.-> lab-558789{{"如何检查 Linux 中 GRUB 设置是否已应用"}} end

使用 cat /etc/default/grub 检查 GRUB 配置

在这一步中,你将查看 GRUB 配置文件。GRUB(GRand Unified Bootloader,通用引导加载程序)是包括 Ubuntu 在内的许多 Linux 发行版的引导加载程序。它是你启动计算机时运行的第一个软件,负责加载操作系统内核。

GRUB 的主要配置文件位于 /etc/default/grub。该文件包含决定 GRUB 行为的设置,例如默认启动的操作系统、启动前的超时时间以及内核参数。

让我们使用 cat 命令查看这个文件的内容。cat 命令用于显示文件的内容。

如果终端尚未打开,请打开它。记住,你可以在桌面左侧找到 Xfce 终端 图标。

输入以下命令并按回车键:

cat /etc/default/grub

你将在终端中看到 /etc/default/grub 文件的内容。它看起来会像这样:

## If you change this file, run 'update-grub' afterwards to update
## /boot/grub/grub.cfg.

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

## Uncomment to enable graphical terminal (grub-gfxpayload is needed)
#GRUB_TERMINAL=gfxterm

## The resolution used on graphical terminal
## settings below may not work on your chipset but may be useful for EFI panel
## sizes
#GRUB_GFXMODE=640x480

## Uncomment to disable graphical terminal on boot problems
#GRUB_TERMINAL_INPUT=console

## Uncomment to disable menu scrolling
#GRUB_MENU_SCROLL_STYLE=menu

## Uncomment to enable hidden menu by default
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

## Uncomment to enable BadRAM filtering, modify to suit your needs
## This works only with Linux 2.6.25 or later using pci_filter_enable=1
## and needs BadRAM filtering support in the kernel
#GRUB_BADRAM="0x0123456789abcdef,0xghijkllmnopqrstuvwxyz"

## Uncomment to disable graphical boot (use text mode)
#GRUB_DISABLE_GRAPHICS_OVERRIDE=true

## If you want to enable the GRUB boot menu at boot time, uncomment the following line:
#GRUB_ENABLE_CRYPTODISK=y

## The following lines are for the default grub menu entry
#GRUB_INIT_TUNE="480 440 1"

## Uncomment to set a custom theme
#GRUB_THEME=/path/to/grub/theme

## Uncomment to enable os-prober, which detects other operating systems
#GRUB_DISABLE_OS_PROBER=false

这个文件包含各种设置。例如:

  • GRUB_DEFAULT:指定默认启动的菜单项。0 表示第一个菜单项。
  • GRUB_TIMEOUT:设置在自动启动默认菜单项之前的等待时间(以秒为单位)。
  • GRUB_CMDLINE_LINUX_DEFAULT:包含在启动默认菜单项时传递给内核的内核参数。

理解这个文件对于高级 Linux 配置和解决启动问题至关重要。

点击 继续 进入下一步。

使用 cat /boot/grub/grub.cfg 验证 GRUB 菜单

在上一步中,你查看了 /etc/default/grub,它是 GRUB 的主要配置文件。然而,在启动过程中,GRUB 并不直接使用这个文件。相反,/etc/default/grub 中的设置用于生成实际的 GRUB 菜单配置文件,该文件位于 /boot/grub/grub.cfg

/boot/grub/grub.cfg 文件由 update-grub 命令(或 grub-mkconfig)自动生成。它包含计算机启动时你看到的菜单项,让你可以选择要启动的操作系统或内核。

重要提示:你绝不能手动编辑 /boot/grub/grub.cfg 文件。你所做的任何更改在下一次运行 update-grub 时都会被覆盖。始终修改 /etc/default/grub,然后运行 sudo update-grub 来应用你的更改。

让我们使用 cat 命令查看 /boot/grub/grub.cfg 文件的内容。

在终端中输入以下命令并按回车键:

cat /boot/grub/grub.cfg

/etc/default/grub 相比,你将看到一个长得多且更复杂的输出。这个文件包含每个启动菜单项的详细配置,包括内核路径、initrd 路径和内核命令行参数。

#
## DO NOT EDIT THIS FILE
#
## It is automatically generated by grub-mkconfig using templates
## from /etc/grub.d and settings from /etc/default/grub
#

#### BEGIN /etc/grub.d/00_header ###
...
#### END /etc/grub.d/00_header ###

#### BEGIN /etc/grub.d/05_debian_theme ###
...
#### END /etc/grub.d/05_debian_theme ###

#### BEGIN /etc/grub.d/10_linux ###
...
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' {
	recordfail
	...
	linux	/boot/vmlinuz-*-generic root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro  quiet splash $vt_handoff
	initrd	/boot/initrd.img-*-generic
}
...
#### END /etc/grub.d/10_linux ###

#### BEGIN /etc/grub.d/20_linux_xen ###
...
#### END /etc/grub.d/20_linux_xen ###

#### BEGIN /etc/grub.d/30_os-prober ###
...
#### END /etc/grub.d/30_os-prober ###

#### BEGIN /etc/grub.d/30_uefi-firmware ###
...
#### END /etc/grub.d/30_uefi-firmware ###

#### BEGIN /etc/grub.d/40_custom ###
...
#### END /etc/grub.d/40_custom ###

#### BEGIN /etc/grub.d/41_custom ###
...
#### END /etc/grub.d/41_custom ###

你可以滚动输出查看不同的菜单项及其配置。查找以 menuentry 开头的行。这些行定义了出现在 GRUB 启动菜单中的选项。

这个文件很复杂,你现在不需要理解每一行。关键要点是 /boot/grub/grub.cfg 是 GRUB 实际使用的文件,它是从 /etc/default/grub/etc/grub.d 中的脚本生成的。

点击 继续 进入下一步。

使用 dmesg 检查 GRUB 参数

在前面的步骤中,你查看了 GRUB 配置文件 /etc/default/grub/boot/grub/grub.cfg。你看到 /etc/default/grub 包含 GRUB_CMDLINE_LINUX_DEFAULT 变量,该变量指定了内核参数。这些参数在 Linux 内核启动时会被传递给它。

dmesg 命令用于显示内核环形缓冲区消息。这些消息包含系统启动过程的信息,包括所使用的内核命令行参数。

让我们使用 dmesg 来查看在这台虚拟机启动期间 GRUB 传递的内核命令行参数。

在终端中输入以下命令并按回车键:

dmesg | grep "Kernel command line"

以下是对该命令的详细解释:

  • dmesg:显示内核消息。
  • |:这是管道符号。它将左边命令(dmesg)的输出作为输入传递给右边的命令(grep)。
  • grep "Kernel command line":该命令在接收到的输入(来自 dmesg)中搜索包含确切短语 "Kernel command line" 的行。

输出将显示用于启动系统的内核命令行。它看起来会类似于这样:

[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-*-generic root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro quiet splash vt.handoff=7

你可以看到像 quietsplash 这样的参数,它们很可能是在 /etc/default/grub 中的 GRUB_CMDLINE_LINUX_DEFAULT 变量中定义的。这些参数告诉内核在启动期间如何运行。例如,quiet 会减少启动期间的输出,而 splash 会启用图形化启动界面。

使用 dmesg 检查内核命令行是一种有用的技术,可用于验证你的 GRUB 配置更改是否正确应用,以及排查与内核参数相关的启动问题。

你现在已经成功探索了 GRUB 配置,并使用 dmesg 验证了内核参数。

点击 继续 完成本次实验。

总结

在本次实验中,你学习了如何检查 Linux 中 GRUB 设置是否已应用。首先,你使用 cat 命令查看了主要的 GRUB 配置文件 /etc/default/grub,以了解其内容以及在启动过程中控制 GRUB 行为的各种参数。

通过查看 /etc/default/grub 文件,你深入了解了诸如默认启动项、超时值和内核命令行参数等设置。这第一步对于在验证其应用之前理解预期的 GRUB 配置至关重要。