Kdump 学习小结

没有废话,直奔主题

什么是Kdump?

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?

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

安装kdump

据我所知,目前RHEL 5、6和SLES 10  linux distribution都会默认安装kdump。

但是我们还是首先简单了解下安装kdump需要哪些条件:

首先,需要在编译standard(production) kernel 之前,需要指定kernel crash dumping 相关的一组compile 选项

其次,需要在编译好的standard kernel之上,安装kernel-kdump package,这个package包含了crash(capture)kernel,crash kernel在standard kernel crash的时候被启动,因此提供了环境用来capture正处于crash中的standard kernel的dump信息。

关于对于从upstream下载,编译kernel需要注意的编译选项,请参见 参考[2]。

接下来,我们重点描述在rhel5.6环境下如何安装,配置,使用kdump。

RHEL环境下kdump是默认安装的,实现kdump机制的几个重要的package如下:

package name
package info

kdump
kdump package

kexec-tools
kexec package

kernel-debuginfo
crash analysis package

kdump相关的重要文件如下:

/etc/init.d/kdump
kdump 服务启动脚本

/etc/sysconfig/kdump
kdump 配置文件

/usr/share/doc/packages/kdump

配置Kdump:

1 确定kdump相关的package已经安装好:

[root@bl25p-19 sysconfig]# rpm -qa | grep kdump
system-config-kdump-1.0.14-4.el5

[root@bl25p-19 sysconfig]# rpm -qa | grep kexec
kexec-tools-1.102pre-126.el5
[root@bl25p-19 sysconfig]# rpm -qa | grep debuginfo
kernel-debuginfo-common-2.6.18-238.el5
kernel-debuginfo-2.6.18-238.el5

2 配置grub,在启动时为内核传递参数,来告知内核如何为crash kernel预留内存

title Red Hat Enterprise Linux Server (2.6.18-238.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet crashkernel=128M@16M #(XXX@YYY, xxx为大小, yyy为offset)
        initrd /initrd-2.6.18-238.el5.img

3 配置/etc/kdump.conf,来设定crash dump最终为存在何处,具体参见man 5 kdump.conf。默认是存放在/var/crash/[crash generated date]/vmcore

4 设置kdump服务开机是自动启动

chkconfig kdump on #开机自启动

service kdump start # 启动kdump服务

5 测试,通过sysrq强制系统崩溃

echo “c” > /proc/sysrq-trigger

6 因为debuginfo package,所以在你获得crash dump之后,你可以使用crash来进行分析。

安装debuginfo package之后,在/usr/lib/debug/lib/modules/$(uname -r)/下生成用于调试的vmlinux(vmlinux is uncompressed, vmlinuz is compressed)。

# crash /usr/lib/debug/lib/modules/2.6.18-238.el5/vmlinux vmcore 来调试你的vmcore crash dump文件。

参考:

[1] Linux Kernel Crash Book -- Everything you need to know

[2] http://www.dedoimedo.com/computers/kdump.html

posted @ 2011-07-18 18:31  yub0yue  阅读(14381)  评论(0编辑  收藏  举报