怎样配置kdump
1.确认kexec-tools已经安装:
#rpm -q kexec-tools
2.确认kernel-debuginfo和其支持包kernel-debuginfo-common已经安装
#rpm -qa|grep kernel
下载地址
3.配置/etc/kdump.conf文件,指定vmcore将被转储的路径。可以通过scp拷贝到另一个服务器,也可以是裸设备,或者本地的文件系统。
path /var/crash
4.修改/etc/sysctl.conf文件添加以下内容:
vm.panic_on_oom = 1 kernel.panic_on_unrecovered_nmi = 0 kernel.unknown_nmi_panic = 0 kernel.panic_on_oops = 1
5.修改一些启动参数,为捕获很保留一块内存。对于i386和x86_64架构,编辑/etc/grub.conf,在内核行的末尾添加
ro root=LABEL=/1 rhgb quiet crashkernel=128M@32M
下面是一个带有kdump选项的/etc/grub.conf文件:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,0)
# kernel /boot/vmlinuz-version ro root=/dev/hda1
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title Enterprise Linux Client (2.6.17-1.2519.4.21.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.17-1.2519.4.21.el5 ro root=LABEL=/ rhgb quiet crashkernel=128M@16M
initrd /boot/initrd-2.6.17-1.2519.4.21.el5.img
6.修改之后,重启系统。128M内存(从16M开始)不被正常的系统使用,为捕获内核保留。注意,free -m的输出会显示内存比不加参数时少了128M,这就是我们所期望的。
注意:可以使用小于128M,但是只使用64M做测试被证实是不可靠的。
在/boot/grub/menu.t/中需要添加这样的参数,即crashkernel=X@Y,其中X是转储空间大小(确切的讲,是转储文件的最大大小),Y是转储的内存偏移。各种参考资料,包括官方给出的资料都是填写128M@16M,但是有的时候,16M偏移的内存已经被占用。这个时候,需要改成32M,相应的,在make menuconfig 时候的编译选项CONFIG_PHYSICAL_START=0x1000000 也需要改成0x2000000。发生内存冲突时候,kdump服务起不来,报错是缺少crashkernel这个启动选项,而官方的文档中的解决方法只是说重新检查这个启动文件的书写,真是很迷惑人。我检查很多次都没有发现问题,最终搜索一下午,在网上的一个bug报告中发现了这个问题,唬人呀!
7.现在,保留内存已经设置了,打开kdump初始脚本,启动服务:
# chkconfig kdump on
# service kdump start
8.可以通过kexec加载内核镜像,让系统准备捕获一个崩溃时产生的vmcore。可以通过sysrq强制系统崩溃:
# echo "c" > /proc/sysrq-trigger
这造成kernel panic,紧跟着系统重启kdump内核。当启动进程进入到启动kdump服务器时,vmcore将会被拷贝到你在/etc/kdump.conf文件中指定的位置。
注意:
终端frame-buffer和X将运行不正常。在运行一些类似于在内核配置上添加了"vga=791"或者运行X的系统,在通过kexec启动内核时,终端显示将不清楚。记住,kdump内核仍旧能够创建转储。当系统重启,显示将会恢复到正常状态。