新装一台Rocky9,因为是小内存机器,不需要也没能力利用crashkernel功能,顺手就给关了,在/etc/default/grub
文件中修改crashkernel的参数:
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="crashkernel=0M"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
和Rocky8一样,利用grub的工具重新生成grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
重启之后傻眼了,内核cmdline仍然带的是旧的cmdline,内核还是切了一部分内存保留给crashkernel
[root@test ~]# journalctl -k | grep crashkernel
Jun 06 08:40:39 test kernel: Reserving 256MB of memory at 2800MB for crashkernel (System RAM: 24575MB)
再看下/boot/grub2/grub.cfg
[root@test ~]# grep crashkernel /boot/grub2/grub.cfg
set kernelopts="root=/dev/mapper/rl-root ro crashkernel=0M rd.lvm.lv=rl/root "
grub2的配置里已经改成了0m,按理说内核不应该再有内存保留的行为
重启到grub界面,发现grub的启动项配置内仍然在使用旧的cmdline,很明显与配置文件不一致,让系统正常启动,在boot目录里grep看看有啥发现:
[root@test ~]# grep crashkernel /boot -R
/boot/grub2/grub.cfg: set kernelopts="root=/dev/mapper/rl-root ro crashkernel=0M rd.lvm.lv=rl/root"
/boot/loader/entries/4e....-5.14.0-503.14.1.el9_5.x86_64.conf:options root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
/boot/loader/entries/4e....-0-rescue.conf:options root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
在/boot/loader/entries
这里发现了两个带旧cmdline的文件,正好对应grub的两个启动项,顺藤摸瓜在网上找这个目录,找到红帽的RHEL9.3发行注记:
带有 BLS 的 grub2-mkconfig 的新默认行为
在 Boot Loader Specification (BLS)框架中,GRUB 在引导时从 BLS 片断动态生成引导菜单,且不会在 grub.cfg 文件中预定义。
在以前的版本中,grub2-mkconfig 命令生成一个新的 grub.cfg 文件,并总是使用/etc/default/grub 文件中发现的 GRUB_CMDLINE_LINUX 变量的值覆盖所有 BLS 代码片段中的命令行参数。
有了此版本,grub2-mkconfig 命令不再默认使用 GRUB_CMDLINE_LINUX 覆盖 BLS 片段中的内核命令行。引导装载程序菜单中的每个内核都从其 BLS 代码段获取其内核命令行。这个新的默认行为是由 GRUB_ENABLE_BLSCFG=true 选项造成的。
翻了下相关的文档,简单理解为grub引入了新的规范"BLS(Boot Loader Specification)",部分的配置文件从grub.cfg中独立出来了,发行注记就不全文复制了,感兴趣的自己去翻吧。和之前一样修改/etc/default/grub
文件时,生成的grub.cfg文件不一定会生效,因为启动项配置从grub.cfg独立出来了,需要单独生成这些启动项配置,只需要在原先的grub2-mkconfig命令后加上参数就行
grub2-mkconfig -o /path/to/grub.cfg --update-bls-cmdline
重新生成配置后,crashkernel正常关闭
RHEL9.3发行注记-4.9引导加载程序
BLS规范