linux kdump

一、简介

 分析操作系统crash或hang的原因,需要用到kernel dump。Linux系统用来捕捉kernel dump的工具是kdump。
kdump的原理是启动一个特殊的dump-capture kernel把系统内存里的数据保存到文件里,为什么需要一个特殊的dump-capture kernel呢?
因为原来的kernel已经出问题了,发生crash或hang了。Dump-capture kernel 既可以是独立的,也可以与系统内核集成在一起–这需要硬件支持relocatable kernel才行。
在X86_64系统上RHEL6/7和SLES11/12缺省都是与系统内核集成在一起的。
linux内核发送崩溃时,kdump会生成一个内核转储文件vmcore。 可以通过分析vmcore分析出内核崩溃的原因。crash是一个被广泛应用的内核奔溃转储文件分析工具。
使用crash调试内核转储文件,需要安装crash工具和内核调试工具kernel-debuginfo。

kdump工作的过程如下:
系统内核启动的时候,要给dump-capture kernel预留一块内存空间;
内核启动完成后,kdump service执行 kexec -p 命令把dump-capture kernel载入预留的内存里;
然后,如果系统发生crash,会自动reboot进入dump-capture kernel,dump-capture kernel只使用自己   的预留内存,确保其余的内存数据不会被改动,它的任务是把系统内存里的数据写入到dump文件,比如/var/crash/vmcore,为了减小文件的大小,它会通过makedumpfile(8)命令对内存数据进行挑选和压缩;
dump文件写完之后,dump-capture kernel自动reboot。
Kdump 用于对内存镜像的转储,它不但可以转储内存镜像到本地硬盘,还可以将内存镜像通过 NFS, SSH 等协议转储到不同机器的设备上。
Kdump 分为两个组件: Kexec 和 Kdump。
Kexec 是一种内核的快速启动工具,可以使新的内核在正在运行的内核(生产内核)的上下文中启动,而不需要通过耗时的 BIOS 检测,方便内核开发人员对内核进行调试。
Kdump 是一种有效的内存转储工具,启用 Kdump 后,生产内核将会保留一部分内存空间,用于在内核崩溃时通过 Kexec 快速启动到新的内核,这个过程不需要重启系统,因此可以转储崩溃的生产内核的内存镜像。

二、安装kudmp、crash、kernel-debuginfo

RHEL5开始,kexec-tools是默认安装的。 如果需要调试kdump生成的vmcore文件,需要手动安装kernel-debuginfo包。
安装包的版本,要与linux内核一致,查看linux内核版本:
uname -a

2.1 安装、配置、启动kdump

安装kdump:确定kdump相关package已安装好
rpm -qa | grep kdump
kexec-tools-2.0.0-273.el6.x86_64
system-config-kdump-2.0.5-15.el6.noarch
kexec package
 6.x配置kdump:
        vim  /boot/grub/menu.lst:  设置crashkernel=auto
        vim /etc/kdump.conf:          path /var/crash    (core文件产生的目录)
 6.x启动kdump:
       chkconfig kdump on // 开机启动
       service kdump status // start、stop、restart等
 7.x配置kdump:
   vim  /etc/default/grub  修改crashkernel的大小
   grub2-mkconfig -o /boot/grub2/grub.cfg  

 7.x启动kdump:
       systemctl start kdump.service //启动kdump  
       systemctl enable kdump.service  //设置开机启动  

2.2 安装crash

crash analysis package
文件名:crash-6.1.0-5.el6.x86_64.rpm
 yum install  crash.x86_64  

2.3 安装kernel-debuginfo //需单独另外安装,yum源里没有

文件名:kernel-debuginfo-common-x86_64-2.6.32-220.el6.x86_64.rpm
                  kernel-debuginfo-2.6.32-220.el6.x86_64.rpm
 下载地址:http://debuginfo.centos.org/6/x86_64/
        安装:rpm -ivh kernel-debuginfo-common-x86_64-2.6.32-220.el6.x86_64.rpm
                    rpm -ivh kernel-debuginfo-2.6.32-220.el6.x86_64.rpm

三、分析vmcore

3.1 模拟机内内核奔溃

  echo  c  >  /proc/sysrq-trigger
  执行此命令内核崩溃,会在/var/crash目录下生成vmcore文件。(vim /etc/kdump.conf; path /var/crash)

3.2 分析vmcore

  进入目录/var/crash/127.0.0.1-2014-02-24-09:30:19,可以看到vmcore文件。
 1.执行/usr/bin/crash  /usr/lib/debug/lib/modules/2.6.32-220.el6.x86_64/vmlinux  vmcore
 2.具体分析过程见:http://blog.csdn.net/guowenyan001/article/details/12975221

参考资料:

  深入探索kdump、crash:http://www.ibm.com/developerworks/cn/linux/l-cn-kdump4/index.html?ca=drs
  crash调试vmcore:http://blog.csdn.net/taget/article/details/7814740
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值