• 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

  • 相关阅读:
    《java并发编程实战》读书笔记9--并发程序的测试
    《java并发编程实战》读书笔记8--死锁,性能与可伸缩性,锁粒度锁分解锁分段
    笔试算法题记录1
    _stdcall调用
    通信设备硬件工程师应该具备的基本能力和知识
    PCB产业链、材料、工艺流程详解(1)
    PCB中加入任意LOGO图文说明 精心制作
    开关电源基础知识(一)
    六个框架,一百多条检查项目,保证PCB设计不再出错
    开关电源PCB排版,基本要点分析
  • 原文地址:https://www.cnblogs.com/yuboyue/p/2109847.html
Copyright © 2020-2023  润新知