本文记录了在原生未启用kdump的BCLinux 8系列操作系统的服务器上手动启用kdump服务及报错处理的过程。
一、问题描述
BCLinux 8系列操作系统,系统初始化安装时未启用kdump服务,手动启动时报以下“No memory reserved for crash kernel”或“ConditionKernelCommandLine=crashkernel was not met”的错误信息,无法启动。
1、现象1
报“No memory reserved for crash kernel”错误:
2、现象2
根据系统小版本差异,可能会有另一种“ConditionKernelCommandLine=crashkernel was not met”报错:
二、问题分析
kdump需要一块预留的内存区域来在内核崩溃时捕获内存转储。因此需要在GRUB配置文件中为kdump保留一部分内存。对于系统初始安装时未启用kdump服务,则对应GRUB配置文件会略过预留内存的相关配置。核查当前配置:
# cat /etc/default/grub|grep GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX="rd.lvm.lv=bel/root rhgb quiet
可见确实没有crashkernel选项。问题就是这样所引起的
三、问题处理
1、GRUB配置文件添加crashkernel选项
crashkernel参数配置在GRUB引导加载器的配置文件中(如/boot/grub/grub.conf或/etc/default/grub),系统中只会存在一个,可以检查当前系统是使用的哪一个文件。
本例为/etc/default/grub文件,编辑该文件在GRUB的命令行参数中添加crashkernel选项,编辑前请先备份原文件。
例如,为kdump保留512MB内存,可以将“GRUB_CMDLINE_LINUX”行修改如下:
GRUB_CMDLINE_LINUX="rd.lvm.lv=bel/root rhgb quiet crashkernel=512M"预留内存的大小与系统自身的物理内存大小有关系,应根据系统的总内存大小来设置,以确保在转储过程中有足够的内存资源。
2、更新GRUB配置
保存对/etc/default/grub的更改后,需要更新GRUB配置并重启系统以使更改生效。
注意:GRUB的更新配置文件的路径因系统配置而异,根据服务器的引导方式可能会是“/boot/grub2/grub.cfg”或是“/boot/efi/EFI/bclinux/grub.cfg”,两个文件系统中只会存在一个,可以检查当前系统是使用的哪一个文件——操作前请先备份原文件。
对于前者,执行命令及结果如下:
对于后者,执行命令及结果则如下:
[root@localhost ~]# grub2-mkconfig -o /boot/efi/EFI/bclinux/grub.cfg
Generating grub configuration file ...
done
3、核查GRUB配置文件差异
两种启动模式的服务器配置文件对比情况如下:
[root@localhost ~]# diff /boot/efi/EFI/bclinux/grub.cfg{,.bak}
140c140
< set kernelopts="root=/dev/mapper/bel-root ro rd.lvm.lv=bel/root rhgb quiet crashkernel=512M "
---
> set kernelopts="root=/dev/mapper/bel-root ro rd.lvm.lv=bel/root rhgb quiet "
可见均是在对应启动命令行参数的末尾添加了crashkernel配置项。
4、重启系统
启动kdump服务以确保它在系统启动时自动运行。
[root@localhost ~] systemctl enable kdump
然后对服务器进行重启,可以看到kdump服务在服务器重启后已经能正常运行了。
5、验证kdump是否工作正常
为了验证kdump是否配置正确并能在系统崩溃时捕获内存转储,可以手动触发一个内核崩溃来进行测试(系统会重启)。
[root@localhost ~] echo 1 > /proc/sys/kernel/sysrq [root@localhost ~] echo c > /proc/sysrq-trigger
然后,检查你指定的vmcore文件保存位置是否有新的vmcore文件生成。
以上为在BCLinux 8系列服务器手动启用kdump服务的过程,供参考。