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