相关参考:
http://lse.sourceforge.net/kdump/
http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp?search_by=深入探索+Kdump
Kdump基本概念:
Kexec:节省kernel重启的时间。
Kexec是实现kdump机制的关健,它由两部分组成:
1,内核空间的kexec_load系统调用。负责在主内核(first kernel)启动时将备用内核(sencond kernel)加载到指定的地址。
2,用户空间的kexec-tools工具,它将备用内核的地址告诉给主内核,从而在主内核崩溃时候能够找到备用内核的地址并运行备用内核。(与相应的ramdisk一起组建一个微环境,用以对主内核下的内存进行收集和转存)
A):部署Kdump
部署 kdump 收集故障信息的步骤如下:1) 设置好相关的内核启动参数
在 /boot/grub/menu.lst 中加入如下内容crashkernel=128M@16M nmi_watchdog=1
其中crashkernel参数是用来为kdump的内核预留内存的; nmi_watchdog=1 是用来
激活NMI中断的, 我们在未确定故障是否关闭了中断的情况下, 需要部署NMI watchdog才能确保触发panic. 重启系统确保设置生效
2) 设置好相关的sysctl内核参数
在/etc/sysctl.conf 中最后加入一行kernel.softlookup_panic = 1
该设置确保softlock发生时会调用panic, 从而触发kdump行为
执行 #>sysctl -p 确保设置生效
3) 配置 /etc/kdump.conf
在 /etc/kdump.conf 中加入如下几行内容ext3 /dev/sdb1
core-collector makedumpfile -c –message-level 7 -d 31 -i /mnt/vmcoreinfo
path /var/crash
#kdump_post /sbin/myshell.sh
#extra_modules ramcache_stor (自定义修改)
default reboot其中 /dev/sdb1 是用于放置dumpfile 的文件系统, dumpfile 文件放置在/var/crash下, 要事先在/dev/sdb1分区下创建/var/crash 目录. “-d 31”指定对dump内容的过滤级别,这参数对于dump分区放不下全部内存内容或用户不想让dumping中断业务太长时间时很重要. vmcoreinfo 文件放置在 /dev/sdb1 分区的 / 目录下, 需要使用如下命令产生:
#>makedumpfile -g //vmcoreinfo -x /usr/lib/debug/lib/modules/2.6.18-128.el5.x86_64/vmlinux
“vmlinux” 文件是由kernel-debuginfo 包提供的,在运行makedumpfile 之前需要安装相应内核的 kernel-debuginfo 和 kernel-debuginfo-common 两个包,该两个包需从 http://ftp.redhat.com 下载. “default reboot” 用来告诉kdump, 收集完dump信息后重启系统