Kdump 是一种的新的crash dump捕获机制,用来捕获kernel crash时候产生的crash dump。Kdump需要配置两个不同目的的kernel,其中一个我们在这里称作standard(production) kernel;另外一个称之为Crash(capture)kernel。

standard(production)kernel,是指我正在使用的kernel,当standard kernel在使用的过程中出现crash的时候, kdump会切换到crash kernel, 简单来说,standard kernel会正运行时发生crash,而crash(capture) Kernel 会被用来捕获production kernel crash时候产生的crash dump。

捕获crash dump是在新的crash(capture) kernel 的上下文中来捕获的,而不是在standard kernel上下文进行。

具体是当standard kernel方式crash的时候,kdump通过kexec(后面介绍)自动启动进入到crash kernel当中。如果启动了kdump服务,standard kernel会预留一部分内存, 这部分内存用来启动crash kernel。

kdump机制主要包括两个组件:kdump和kexec

kexec 是一个快速启动kernel的机制,它运行在某一正在运行的kernel中,启动一个新的kernel(这里是crash kernel),而且不用重新经过BIOS 就可以完成启动。因为一般BIOS都会花费很长的时间,尤其是在大型并且同时连接许多外部设备的Server上的环境下,BIOS会花费更多的时间。

目前RHEL5、6 的linux distribution都会默认安装kdump,kdump的具体配置方法如下:

1、kdump服务退避区以所用磁盘设置

    kdump退避区大小为:(memory容量+2GB)*2以上

    kdump退避区磁盘的文件格式: 要求与根目录的格式一样,通常为ext3格式,但RHEL6系统支持ext4格式。

2、分区后dump规避域的label设置

   此处sda5作为退避去为例:

# e2label /dev/sdb5 /dump    #设置
# e2label /dev/sdb5              #确认
/dump

3、 Kdump服务相关包的安装确认

  • busybox
  • kexec-tools
  • kernel-debuginfo
  • kernel-debuginfo-common
  • kernel-devel
  • FJSVdumptools   (只有RHEL6系列上测试kdump时需要安装)

4、kernel信息的设置

需要在/etc/sysctl.conf文件中,做如下修改:

kernel.sysrq = 1
kernel.panic_on_oops = 1
kernel.panic = 1
kernel.panic_on_unrecovered_nmi = 1 *
kernel.unknown_nmi_panic = 1 *

注意:在IA64上设置时,不要设置*标记的两项。

5、kdump配置文件的设置

在文件/etc/kdump.conf中,做一下设置:

ext3 LABEL=/dump ①
path /
core_collector makedumpfile
default reboot②

注:①dump采集区域中定义/dump和标签,并将该标签定义为dump退避域。

      ②采集dump后的动作指定为reboot。采集dump后的动作只能是重启系统。

6、kdump服务的设置

设置kdump开机启动,通过以下命令设置:

# chkconfig kdump on

设置结果确认,通过以下命令确认:

# chkconfig --list kdump
kdump 0:off 1:off 2:on 3:on 4:on 5:on 6:off

7、grub的相关配置

x86和x64上设置文件/etc/grub.conf(即/boot/grub/grub.conf文件),ia64上设置文件/etc/efi/efi/redhat/elilo.conf,对文件中系统启动项对应的kernel参数进行如下设置:

kernel ・・・nmi_watchdog=0 crashkernel=128M@16M

注:

①在RHEL5系列的系统中,指定格式为“128M@16M”(在RHEL6系中由于存在BUG,格式只能为128M)。其中128M表示分配给kdump使用的内存大小,16M表示所分配内存在物理内存中的起点。

Kdump保留内存大小 = 128MB + (LUN数x80KB + )CPU数x1.2MB

8、重启系统,查看Kdump服务是否成功

# service kdump status
Kdump is operational

9、测试,通过sysrq强制系统崩溃,方法如下:

# echo “c” > /proc/sysrq-trigger

这造成kernel panic,紧跟着系统重启kdump内核。当启动进程进入到启动kdump服务器时,vmcore将会被拷贝到你所设定的退避去的位置。