最近因为工作需要接触了grub,学到了一些相关知识,所以在这里写篇博客记录一下,有不对的部分欢迎指正。
目录
grub是什么?
grub有哪些配置文件?
各配置文件区别
配置文件生成流程
配置文件有哪些内容?
/etc/default/grub
/boot/grub/grub.cfg
grub是什么?
GRUB(GRand Unified Bootloader)是一个启动加载程序,用于启动操作系统。它可以帮你选择并启动你想用的操作系统。
这个每次启动就会出现的界面就是grub。
grub有哪些配置文件?
GRUB的配置文件主要有两个/etc/default/grub
和 /boot/grub/grub.cfg
。
各配置文件区别
特性 | /etc/default/grub | /boot/grub/grub.cfg |
---|---|---|
作用 | 支持用户自定义的GRUB设置 | 实际的GRUB启动配置文件,由update-grub 生成 |
使用情况 | 用户可直接编辑 | 自动生成的配置文件,不建议手动编辑 |
配置内容 | 包含全局设置和默认选项,如默认操作系统、超时时间、内核参数等 | 包含具体的启动条目和启动指令 |
生成时间 | 用户根据需要修改,修改后需运行update-grub 更新配置 | 每次运行update-grub 命令时重新生成 |
配置文件生成流程
-
update-grub
命令首先读取/etc/default/grub
中的配置选项。 -
按顺序运行
/etc/grub.d/
目录中的脚本,生成各个部分的配置内容。 -
将各个脚本生成的内容组合起来,生成最终的
/boot/grub/grub.cfg
文件。
配置文件有哪些内容?
/etc/default/grub
以我现在用的系统,Ubuntu2004的/etc/default/grub为例,解释一下里面有哪些设置。
# 如果你修改了这个文件,请运行 'update-grub' 命令来更新 /boot/grub/grub.cfg。
# 有关此文件中选项的完整文档,请参见:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
# GRUB_DEFAULT定义默认启动的菜单项。
# 例如:GRUB_DEFAULT=0 表示默认启动第一个菜单项。
GRUB_TIMEOUT_STYLE=hidden
# GRUB_TIMEOUT_STYLE定义GRUB菜单显示的样式。可选值包括:
# - 'menu': 显示菜单并等待超时。
# - 'countdown':显示倒计时。
# - 'hidden': 隐藏菜单并直接启动默认项。
GRUB_TIMEOUT=0
# GRUB_TIMEOUT设置GRUB菜单显示的时间(秒)。如果设为0,GRUB菜单不会显示,直接启动默认操作系统。
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
# GRUB_DISTRIBUTOR用于定义GRUB菜单中显示的发行版名称。通常是自动检测当前的Linux发行版。
# 例如:GRUB_DISTRIBUTOR=`lsb_release -i -s` 会返回发行版的名称,如"Ubuntu"或"Debian"。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
# GRUB_CMDLINE_LINUX_DEFAULT定义传递给Linux内核的默认命令行参数。
# "quiet"参数隐藏大部分启动信息,"splash"参数显示启动画面。
GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=1"
# GRUB_CMDLINE_LINUX定义传递给Linux内核的额外命令行参数。
# 在这个例子中,"systemd.unified_cgroup_hierarchy=1" 启用systemd的统一控制组层次结构。
我的配置文件里有6个设置,实际上常用的就前3个。
/boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
# 全局设置
if [ -s $prefix/grubenv ]; then
load_env
fi
set default="0"
set timeout=10
# 图形模式设置
if loadfont $prefix/fonts/unicode.pf2; then
set gfxmode=auto
insmod efi_gop
insmod efi_uga
insmod gfxterm
terminal_output gfxterm
fi
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
# 启动项Ubuntu
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root ebacda1f-86d0-41ae-933e-39e98cd4fcf9
else
search --no-floppy --fs-uuid --set=root ebacda1f-86d0-41ae-933e-39e98cd4fcf9
fi
linux /boot/vmlinuz-5.4.0-42-generic root=UUID=ebacda1f-86d0-41ae-933e-39e98cd4fcf9 ro quiet splash
initrd /boot/initrd.img-5.4.0-42-generic
}
# 启动项Memory test (memtest86+)
menuentry 'Memory test (memtest86+)' {
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
linux16 /boot/memtest86+.bin
}
# 启动项System setup
menuentry 'System setup' {
fwsetup
}
以这份配置文件为例,grub界面会出现3个启动项Ubuntu,Memory test (memtest86+)和System setup。