kdump相关概念

standard(production) kernel   生产内核    ,是指我们正在使用的kernel。

Crash(capture)kernel             捕获内核     ,linux系统崩溃后使用的内核。

Kdump需要配置两个不同目的的kernel,其中一个我们在这里称作standard(production) kernel;另外一个称之为Crash(capture)kernel。生产内核是捕获内核服务的对像。捕获内核会在生产内核崩溃时启动起来,与相应的 ramdisk (虚拟内存盘:将内存模拟成硬盘的技术)一起组建一个微环境,用以对生产内核下的内存进行收集和转存。

什么是kdump

Kdump 的概念出现在 2005 左右,是迄今为止最可靠的内核转存机制,主要是用来捕获kernel crash时候产生的crash dump。

kdump 的优势

高可靠性

崩溃转储数据可从一个新启动内核的上下文中获取,而不是从已经崩溃内核的上下文。

kdump的实现原理

kdump机制主要包括两个组件:kdump和kexec

kdump 使用 kexec 启动到捕获内核,以很小内存启动以捕获转储镜像。生产内核保留了内存的一部分给捕获内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。

简单来说,standard kernel会正运行时发生crash,而crash(capture) Kernel 会被用来捕获production kernel crash时候产生的crash dump。

什么时kexec

kexec 原来的目的是为了节省 kernel 开发人员重启系统的时间,谁能想到这个“偷懒”的技术却孕育了最成功的内存转存机制。

kexec 是一个快速启动kernel的机制,它运行在某一正在运行的kernel中,启动一个新的kernel(这里是crash kernel),而且不用重新经过BIOS 就可以完成启动。因为一般BIOS都会花费很长的时间,尤其是在大型并且同时连接许多外部设备的Server上的环境下,BIOS会花费更多的时间

它包括 2 个组成部分:一是内核空间的系统调用 kexec_load,负责在生产内核(production kernel 或 first kernel)启动时将捕获内核(capture kernel 或 sencond kernel)加载到指定地址。二是用户空间的工具 kexec-tools,他将捕获内核的地址传递给生产内核,从而在系统崩溃的时候能够找到捕获内核的地址并运行。没有 kexec 就没有 kdump。先有 kexec 实现了在一个内核中可以启动另一个内核,才让 kdump 有了用武之地。

如何访问捕获内存

在内核崩溃之前所有关于核心映像的必要信息都用 ELF 格式编码并存储在保留的内存区域中。ELF 头所在的物理地址被作为命令行参数(fcorehdr=)传递给新启动的转储内核。

在 i386 体系结构上,启动的时候需要使用物理内存开始的 640K,而不管操作系统内核转载在何处。因此,这个 640K 的区域在重新启动第二个内核的时候由 kexec 备份。

在第二个内核中,“前一个系统的内存”可以通过两种方式访问:

1. 通过 /dev/oldmem 这个设备接口。

一个“捕捉”设备可以使用“raw”(裸的)方式 “读”这个设备文件并写出到文件。这是关于内存的 “裸”的数据转储,同时这些分析 / 捕捉工具应该足够“智能”从而可以知道从哪里可以得到正确的信息。ELF 文件头(通过命令行参数传递过来的 elfcorehdr)可能会有帮助。

2. 通过 /proc/vmcore。

这个方式是将转储(生产内存)输出为一个 ELF 格式的文件,并且可以使用一些文件拷贝命令(比如 cp,scp 等)将信息读出来。同时,gdb 可以在得到的转储文件上做一些调试(有限的)。这种方式保证了内存中的页面都以正确的途径被保存 ( 注意内存开始的 640K 被重新映射了 )。

kdump的实现流程

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信息。

软件包说明

package name                              package info

kdump            kdump软件包

kexec-tools                                   kexec 软件包,kdump用到的各种工具都在此包中

kernel-debuginfo                           crash analysis package  用来分析 vmcore 文件

配置Kdump:

1 确定kdump相关的package已经安装好:

[root@bl25p-19 sysconfig]# rpm -qa | grep kdump (rhel7 中默认已安装)

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 (rhel7 中默认已安装)

kernel-debuginfo-common-2.6.18-238.el5

kernel-debuginfo-2.6.18-238.el5

配置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

配置/etc/kdump.conf,来设定crash dump最终为存在何处,具体参见man 5 kdump.conf。默认是存放在/var/crash/[crash generated date]/vmcore

4 设置kdump服务开机是自动启动

systemctl enable kdump #开机自启动

systemctl start kdump   # 启动kdump服务

5 可以通过 kexec 加载内核镜像,让系统准备好去捕获一个崩溃时产生的 vmcore。可以通过 sysrq 强制系统崩溃。

echo “c” > /proc/sysrq-trigger

这造成内核崩溃,如配置有效,系统将重启进入 kdump 内核,当系统进程进入到启动 kdump 服务的点时,vmcore 将会拷贝到你在 kdump 配置文件中设置的位置。RHEL 的缺省目录是 : /var/crash;SLES 的缺省目录是 : /var/log/dump。然后系统重启进入到正常的内核。一旦回复到正常的内核,就可以在上述的目录下发现 vmcore 文件,即内存转储文件。

可以使用之前安装的 kernel-debuginfo 中的 crash 工具来进行分析

linux内核kdump,linux内核崩溃之kdump机制相关推荐

  1. linux开启内核kdump,linux kdump原理以及配置

    相关的原理 kexec是一个快速启动机制,允许通过已运行的内核的上下文启动一个linux内核,不需要经过BIOS.实现kdump机制的关键,包括二个组成部分:一是内核空间的系统调用kexec_load ...

  2. linux kdump 分析,利用Kdump分析内核奔溃原因(1)

    机器X  Centos 5.5 X64  hadoop +mongdb+hbase 机器内核奔溃数次,日志中均查不到详细原因 逐 打算利用kdump在奔溃时转存内存.本文介绍如何开启kdump进行内存 ...

  3. Crash+Kdump 分析内核崩溃内存转储文件之环境搭建

    虚拟机环境为centos 5.5 32bit kdump 服务和kexec-tools 检查kexec-tools: rpm -qa|grep kexec-tools 如果没有安装,yum insta ...

  4. arm linux kdump,linux系统奔溃之vmcore:kdump 的亲密战友 crash

    crash 是目前广泛使用的 linux 内核崩溃转储文件的分析工具,掌握 crash 的使用技巧,对于分析定位内核崩溃的问题,有着非常重要的作用.本文首先介绍了 crash 的基本概念和安装方法,其 ...

  5. Linux内核工程导论——内核调试

    Linux内核工程导论--内核调试 时间:2022-08-28 21:49:24 内核也是一个程序,一般的,调试程序常用的方法有3种:打印信息.断点执行和插入探测点. 打印信息 printk 最常用的 ...

  6. linux系统与内核,[科普] Linux 的内核与 Linux 系统之间的关系

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...

  7. linux5.5内核,一条命令就可以升级到Linux 5.5内核或Linux 5.5以上版本

    升级Linux内核其实很简单,本文介绍的方法只需要一条命令,至少能够升级到Linux 5.5内核版本.当然,脚本当中要是加入新的Linux内核,你就能够升级到那个新内核,也就是说可以升级到Linux ...

  8. linux的内核是指的什么,[科普] Linux 的内核与 Linux 系统之间的关系

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...

  9. linux 系统的内核,[科普] Linux 的内核与 Linux 系统之间的关系

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...

最新文章

  1. MySQL:表的操作 知识点难点总结:表完整性约束及其他常用知识点二次总结
  2. 《程序员修炼之道》读感
  3. 网维大师服务器不运行,网维大师客户机连不上的解决方法
  4. 阐述计算机网络的作用答案,计算机网络习题及答案(50页)-原创力文档
  5. .h 与 .hpp 文件
  6. gRPC服务注册发现及负载均衡的实现方案与源码解析
  7. 小红书2019年校园招聘:字符串压缩算法
  8. SCPPO(十二):SQL误操作如何恢复?
  9. vb.net 教程 11-1 打印组件 5 PrintPreviewDialog
  10. vue3动态加载组件
  11. 计算机学的打字是五笔,学会电脑五笔打字的方法
  12. 关于这个DOS或者是C++中的左右斜杠问题
  13. cefsharp启动优化
  14. wordpress网站单页模板主题开发制作
  15. 如何快速且不失真剪切与合并视频?如何将视频快速转成MP4格式?无需渲染!视频秒转MP4,剪辑合并!
  16. 泰科 | 高压连接革命!CSJ高压连接器与您共赢电动汽车新时代
  17. “走进名企”——微软亚洲研究院
  18. ionic3 使用QR Scaner 扫描
  19. Python PaddleNLP实现自动生成虎年藏头诗
  20. 证实!对华28nm以下大硅片出口管制已纳入瓦森纳协定

热门文章

  1. scrollTop如何获取
  2. SNL编译器,语义分析
  3. 程序设计之C语言选择法排序第K趟
  4. PTA例题 冒泡法排序
  5. 【SVM分类】基于自适应蚁狮算法优化SVM分类器实现胃肠道病变附matlab代码
  6. Byte[]转Image
  7. 080 反常积分(广义积分)
  8. 治疗脖子疼的秘方,转来的还蛮有用
  9. 工业设备如何上云?比如能耗仪表设备、智能设备、生产通用设备(冲压机、机床CNC。。)、新能源设备等
  10. Linux入门学习(四)—— 什么链接文件?软链接文件和硬链接文件有什么区别以及特点?