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将会被拷贝到你所设定的退避去的位置。