kdump 是一种先进的基于 kexec 的内核崩溃转储机制。当系统崩溃时,kdump 使用 kexec 启动
到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保
留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所
以第一个内核的内存得以保留。这是内核崩溃转储的本质。
安装系统的时候,如果不做改变,默认就是开启的(centos 7)
1.安装kexec-tools
使用kdump服务,必须要用到kexec-tools工具包。(默认是已经存在了)
yum update
yum install kexec-tools
安装完成之后可以通过kexec -version查看kexec的版本。
2.2 配置kdump kernel
需要为kdump kernel配置内存区域,kdump要求系统正常使用时,不能使用kdump kernel所占用的内存。
1.修改grub文件
安装系统时,kdump 默认 crashkernel=auto,关闭:就没有这个字段,就需要自己添加;
我们这里自定义为: crashkernel=128M
]# vim /etc/default/grub
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=128M spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
~
需要将GRUB_CMDLINE_LINUX="crashkernel=auto..."中的auto修改为128M。一般设为128M或256M。生产中给 256M。
- 系统内存 <= 8 GB, 对kdump kernel不会保留任何内容;也就是说,crashkernel=auto ,等于关掉了机器上的kdump功能;
- 8G< 系统内存 <= 16 GB,crashkernel=auto会保留256M,等同于crashkernel=256M;
- 系统内存> 16GB, crashkernel=auto会保留512M, 等同于crashkernel=512M ;
2.更新grub配置
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
3.重启系统
reboot
2.3 修改kdump默认配置
vim /etc/kdump.conf
其中,需要注意的三行内容是
path /var/crash #指定coredump文件放在/var/crash文件夹中(系统默认就是这个目录)
core_collector makedumpfile -c -l -message-level 1 -d 31 #加上-c表示压缩,原文件中没有
default reboot #生成coredump后,重启系统
2.4 开启kdump服务
systemctl start kdump.service //启动kdump
systemctl enable kdump.service //设置开机启动
2.5 测试kdump是否开启
1.检查kdump开启成功
service kdump status
如下所示,表示开启成功
2.手动触发crash
#echo 1 > /proc/sys/kernel/sysrq
#echo c > /proc/sysrq-trigger
如果配置成功,系统将自动重启,重新进入系统,可以看到/var/crash文件夹下生成了相应文件,是一个以生成coredump日期为文件名的文件,如图所示:
作者:牧_青
链接:https://www.jianshu.com/p/8e031b28d98b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。