linux6下kdump的配置
背景知识:
kexec是一个快速启动机制,允许通过已经运行的内核的上下文启动一个Linux内核,不需要经过BIOS。BIOS可能会消耗很多时间,特别是带有众多数量的外设的大型服务器。这种办法可以为经常启动机器的开发者节省很多时间。
kdump 是一个新的,而且非常可信赖的内核崩溃转储机制。崩溃转储数据可以从一个新启动的内核的上下文中获取,而不是从已经崩溃的内核的上下文。当系统崩溃 时,kdump使用kexec启动到第二个内核。第二个内核通常叫做捕获内核(capture kernel),以很小内存启动,并且捕获转储镜像。
第一个内核保留了内存的一部分,第二个内核可以用来启动。注意,在启动时,kdump保留了一定数量的重要的内存,这改变了紅帽企业Linux 5最小内存需求。
常见问题:
(1)如果服务器经常死机(coredump),但是由苦于没有输出信息可以分析,可以尝试一下Linux自带的kdump。kdump会在系统内核崩溃时,启动第二个内核来记录当前内存信息。
(2)kdump经常是在系统安装过程中进行设置的,但如果是操作系统安装完成后,kdump的值需要更改。这种情况重装操作系统是很浪费时间的。
解决方法:
方法一:
安装kexec-tools
通过命令rpm -q kexec-tools查看该工具是否安装,没有则安装(yum install kexec-tools*)
配置kdump使用的内存大小
编辑grub.conf文件,在kernel一行最后加上crashkernel=128M@16M,如:
title Red Hat Enterprise Linux Server (2.6.18-128.el5)
root (hd0,2)
kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/lvg/lvsysroot rhgb quiet crashkernel=128M@16M
initrd /initrd-2.6.18-128.el5.img修改之后,重启系统。128M内存(从16M开始)不被正常的系统使用,为捕获内核保留。注意,free -m的输出会显示内存比不加参数时少了128M,这就是我们所期望的。
说明:可以使用小于128M,但是只使用64M做测试被证实是不可靠的。(我设置的是128M)
指定vmcore将被转储的路径
配置/etc/kdump.conf文件,指定vmcore将被转储的路径。可以通过scp拷贝到另一个服务器,也可以是裸设备,或者本地的文件系统。如下图带颜色所示,即为转储路径:
配置和启动服务
# chkconfig kdump on
# service kdump start说明: 这个时候启动肯定会失败的,因为内存已经被使用完。重启服务器(reboot)即可,core文件默认记录在/var/crash目录中。
测试
输入echo "c">/proc/sysrq-trigger,界面会出现一些信息,类似下面一样:
过一会系统就会自动重启,这个时候就说明你的kdump已经配置成功了,重启之后/var/crash目录下就可以看到有一个文件夹,文件夹的名字是日期,里面就是你需要的core文件。
方法二:
通过命令system-config-kdump来配置(如果没有该命令,可能是相应工具没有安装)。 kdump也支持传输到另一个服务器,也可以存储到裸设备。
安装system-config-kdump命令:
yum install setuptool
yum install -y system-config-kdump.noarch
更多信息,请访问这里:http://www.dedoimedo.com/computers/kdump.html
或者是这样的:
说明:在界面中先点击reload按钮,然后再点击“apply”让配置生效,重启系统。