在某些场景下, 我们可能不希望系统占用额外内存用于 kdump (Crashkernel), 例如在内存受限的虚拟机中。
为什么要禁用 kdump
- 开启 kdump 后在 1024MB 内存的虚拟机中只剩下 765 MB 的可用内存, 浪费系统内存
- 安装系统时禁用 kdump, 但更新内核时又会重新启用 (这是一个 RHEL 上游的 bug)
检查当前 crashkernel 状态
使用 dmesg
命令检查当前内核启动参数和 crashkernel 预留内存
[root@rocky9 ~]# dmesg | grep -i crash
[ 0.000000] Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-570.17.1.el9_6.x86_64 root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap
[ 0.003027] crashkernel reserved: 0x0000000027000000 - 0x0000000033000000 (192 MB)
[ 0.007620] Kernel command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-570.17.1.el9_6.x86_64 root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap
从输出可以看到, 系统默认预留了部分内存用于 crashkernel
使用 grubby
禁用 crashkernel
Rocky Linux 9 使用 grubby
管理内核启动参数。可以通过以下命令将 crashkernel
设置为 no
[root@rocky9 ~]# grubby --update-kernel=ALL --args="crashkernel=no"
然后可以验证内核参数是否生效
[root@rocky9 ~]# grubby --info /boot/vmlinuz-$(uname -r)
index=1
kernel="/boot/vmlinuz-5.14.0-570.17.1.el9_6.x86_64"
args="ro resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap crashkernel=no"
root="/dev/mapper/rl-root"
initrd="/boot/initramfs-5.14.0-570.17.1.el9_6.x86_64.img"
title="Rocky Linux (5.14.0-570.17.1.el9_6.x86_64) 9.6 (Blue Onyx)"
id="6b59b1d289ec44c4bb346a1add32b8c9-5.14.0-570.17.1.el9_6.x86_64"
可以看到 args
中已包含 crashkernel=no
重启并验证
重启系统后, 再次查看内核启动参数
[root@rocky9 ~]# dmesg | grep -i crash
[ 0.000000] Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-570.33.2.el9_6.x86_64 root=/dev/mapper/rl-root ro resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap crashkernel=no
[ 0.011807] crashkernel: memory value expected
[ 0.026396] Kernel command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-570.33.2.el9_6.x86_64 root=/dev/mapper/rl-root ro resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap crashkernel=no
从输出可以看到, 系统不再为 crashkernel 预留内存
恢复默认设置 (可选)
如果未来需要恢复 crashkernel 设置, 可以使用
grubby --remove-args="crashkernel=no" --update=ALL
原文