linux6下kdump的配置


背景知识:

 kexec是一个快速启动机制,允许通过已经运行的内核的上下文启动一个Linux内核,不需要经过BIOS。BIOS可能会消耗很多时间,特别是带有众多数量的外设的大型服务器。这种办法可以为经常启动机器的开发者节省很多时间。

    kdump 是一个新的,而且非常可信赖的内核崩溃转储机制。崩溃转储数据可以从一个新启动的内核的上下文中获取,而不是从已经崩溃的内核的上下文。当系统崩溃 时,kdump使用kexec启动到第二个内核。第二个内核通常叫做捕获内核(capture kernel),以很小内存启动,并且捕获转储镜像。

    第一个内核保留了内存的一部分,第二个内核可以用来启动。注意,在启动时,kdump保留了一定数量的重要的内存,这改变了紅帽企业Linux 5最小内存需求。

常见问题:
(1)如果服务器经常死机(coredump),但是由苦于没有输出信息可以分析,可以尝试一下Linux自带的kdump。kdump会在系统内核崩溃时,启动第二个内核来记录当前内存信息。

(2)kdump经常是在系统安装过程中进行设置的,但如果是操作系统安装完成后,kdump的值需要更改。这种情况重装操作系统是很浪费时间的。

解决方法:

方法一:

  1. 安装kexec-tools

    通过命令rpm -q kexec-tools查看该工具是否安装,没有则安装(yum install kexec-tools*)

  2. 配置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)

  3. 指定vmcore将被转储的路径

    配置/etc/kdump.conf文件,指定vmcore将被转储的路径。可以通过scp拷贝到另一个服务器,也可以是裸设备,或者本地的文件系统。如下图带颜色所示,即为转储路径:

    wKiom1mkITTSssoFAAALboTS0uE467.png

  4. 配置和启动服务

    # chkconfig kdump on
    # service kdump start

    说明: 这个时候启动肯定会失败的,因为内存已经被使用完。重启服务器(reboot)即可,core文件默认记录在/var/crash目录中。

  5. 测试

    输入echo "c">/proc/sysrq-trigger,界面会出现一些信息,类似下面一样:

    wKioL1mkJk_Rc07qAAD6KglvP44076.png

    过一会系统就会自动重启,这个时候就说明你的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
system-config-kdump

或者是这样的:

wKiom1mkJKOAUxXVAAQQjWJYd4M755.png

说明:在界面中先点击reload按钮,然后再点击“apply”让配置生效,重启系统。