【Linux知识积累】 CentOS开启Kdump的方法

Linux内核崩溃转存机制

kdump概念:

当系统崩溃时,kdump 使用 kexec 启动到第二个内核,第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。

继续学习:https://link.jianshu.com?t=http://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/index.html#major3

kdump正常运行的条件:

1. 系统中开启kdump服务

2. 启动文件配置中,合理分配了崩溃内存容量

检查系统中kdump状态的方法:

CentOS6: service kdump status

CentOS7: systemctl status kdump.service

开启系统中kdump的方法:

1. Centos6.x操作说明:

(1) grub修改预留内存

a. 切换至root用户

b. vi /etc/grub.conf

c. 找到title 条目后我们要使用的系统及内核项

d. 找到条目中kernel配置项下的“crashkernel=????”字段(如果没有则手动添加)

e. 将=????修改为合适的大小

可选大小:

crashkernel=128M:

crashkernel=256M: 建议值

crashkernel=512M:

crashkernel=auto: 如果系统的内存 <= 8 GB 对kdump kernel不会保留任何内容(等同于关闭kdump),如果系统的内存> 8 GB但是<= 16 GB,crashkernel=auto会保留256M,等同于crashkernel=256M,如果系统内存> 16GB, crashkernel=auto会保留512M, 等同于crashkernel=512M.

f. 保存文件后退出

(2) 开启kdump服务

a. 设置开机启动: chkconfig kdump on

b. 启动kdump: service kdump start

c. 查看dkump状态: service kdump status

(3) 检查

a. 重新启动系统

b. 查看dkump状态: service kdump status

c. 检查grub: cat /proc/cmdline 内容与步骤1中修改的内容相同即为操作成功

(4) 测试

a. 查看log目录内容: ls /var/crash/

b. 触发系统崩溃: echo c > /proc/sysrq-trigger

此时系统崩溃,进行转储,转储后系统自动重启

c. 查看是否生成新的崩溃文件,同步骤a,有新文件生成则kdump运行正常

2. Centos7.x操作说明:

(1) grub修改预留内存

a. 切换至root用户

b. vi /etc/default/grub

c. 找到GRUB_CMDLINE_LINUX项

d. 将配置项中的“crashkernel=????”字段(如果没有则手动添加)

e. 将=????修改为合适的大小

可选大小:

crashkernel=128M:

crashkernel=256M: 建议值

crashkernel=512M:

crashkernel=auto: 如果系统的内存 <= 8 GB 对kdump kernel不会保留任何内容(等同于关闭kdump),如果系统的内存> 8 GB但是<= 16 GB,crashkernel=auto会保留256M,等同于crashkernel=256M,如果系统内存> 16GB, crashkernel=auto会保留512M, 等同于crashkernel=512M.

f. 保存文件后退出

g. 执行命令: grub2-mkconfig -o /boot/grub2/grub.cfg

h. 再执行命令: grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

(g和h为冗余项,分别对应不同的系统安装方式,这里为了简化操作,所以全部执行)

(2) 开启kdump服务

a. 启动kdump: systemctl start kdump.service

b. 设置开机启动: systemctl enable kdump.service

c. 查看dkump状态: systemctl status kdump.service

(3) 检查

a. 重新启动系统

b. 查看dkump状态: systemctl status kdump.service

c. 检查grub: cat /proc/cmdline 内容与步骤1中修改的内容相同即为操作成功

(4) 测试

a. 查看log目录内容: ls /var/crash/

b. 触发系统崩溃: echo c > /proc/sysrq-trigger

此时系统崩溃,进行转储,转储后系统自动重启

c. 查看是否生成新的崩溃文件,同步骤a,有新文件生成则kdump运行正常

修改kdump默认配置:

vim /etc/kdump.conf

coredump文件目录 path /var/crash

加上-c表示压缩,原文件中没有 core_collector makedumpfile -c -l -message-level 1 -d 31

生成coredump后,重启系统 default reboot

echo 1 > /proc/sys/kernel/sysrq

echo c > /proc/sysrq-trigger