简介
在这个实验中,你将学习如何验证对 Linux 中 GRUB 引导加载程序配置所做的更改是否已成功应用。你将查看位于 /etc/default/grub
的主要 GRUB 配置文件,以了解其设置。
接下来,你将检查位于 /boot/grub/grub.cfg
的生成的 GRUB 菜单配置文件,以了解默认文件中的设置是如何转换的。最后,你将使用 dmesg
命令检查内核引导参数,以确认 GRUB 设置已反映在运行的系统中。
在这个实验中,你将学习如何验证对 Linux 中 GRUB 引导加载程序配置所做的更改是否已成功应用。你将查看位于 /etc/default/grub
的主要 GRUB 配置文件,以了解其设置。
接下来,你将检查位于 /boot/grub/grub.cfg
的生成的 GRUB 菜单配置文件,以了解默认文件中的设置是如何转换的。最后,你将使用 dmesg
命令检查内核引导参数,以确认 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 配置和解决启动问题至关重要。
点击 继续 进入下一步。
在上一步中,你查看了 /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
中的脚本生成的。
点击 继续 进入下一步。
在前面的步骤中,你查看了 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
你可以看到像 quiet
和 splash
这样的参数,它们很可能是在 /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 配置至关重要。