zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    LIS(nlogn) POJ 3903 Stock Exchange
    LCS(滚动数组) POJ 1159 Palindrome
    LCS(打印全路径) POJ 2264 Advanced Fruits
    3-16 提取任务(第6章)
    3-15 《元编程》第6章 3-16 hook method
    3-13《元编程》第5章Class Definitions 3-14(5-4Singleton Classes,2小时)3-15(3小时✅)
    3-11 《Ruby元编程》第4章block块 3-12
    3-9《元编程》第3章Tuesday:methods
    3-8《Ruby元编程》第二章对象模型
    2-27 最短路径《啊哈算法》2-28完成四种算法
  • 原文地址:https://www.cnblogs.com/yuboyue/p/2109847.html
Copyright © 2011-2022 走看看