什么是kdump?

  kdump 是一种先进的基于 kexec 的内核崩溃转储机制。当系统崩溃时,kdump 使用 kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。由于能够分析核心转储显著有助于确定系统故障的确切原因,强烈建议启用此功能。

  kdump 需要两个不同目的的内核,这两个内核被称为kdump kernel,生产内核和捕获内核。生产内核是捕获内核服务的对像。捕获内核会在生产内核崩溃时启动起来,与相应的 ramdisk 一起组建一个微环境,用以对生产内核下的内存进行收集和转存。

如何配置kdump?

1、安装kexec-tool

使用kdump服务,就必须安装kexec-tools工具包。安装命令如下:

yum update
yum install kexec-tools

2、配置grub

需要配置为kdump kernel的内存区域。kdump要求操作系统正常使用的时候,不能使用kdump kernel所占用的内存,配置这个需要修改/etc/dedfault/grub文件。文件内容如下:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=128M vconsole.font=latarcyrheb-sun16 vconsole.keymap=us biosdevname=0 rhgb quiet" GRUB_DISABLE_RECOVERY="true"

修改文件中GRUB_CMDLINE_LINUX这行,可以设置kdump kernel的大小,一般都是128M或者256M。修改完成以后运行下面的命令更新grub的配置

#grub2-mkconfig -o /boot/grub2/grub.cfg

然后重启系统,使上面对系统的配置有效。

3、配置kdump类型

上面我们已经按照kdump的要求对系统进行了一系列的配置,下面就是配置kdump,配置文件是/etc/kdump.conf。默认的vmcore文件存储在/var/crash目录下。可以修改这个路径:

path /usr/local/cores            //这里必须要保证这个路径是存在的,否则启动kdump服务会失败

或者你直接把core dump文件写入一个设备中,把配置文件中的#raw /dev/vg/lv_kdump这一行的#符号去掉然后把后面的改成自己的设备路径,如下

raw  /dev/sdb1

如果要把dump文件存储在一个使用NFS协议的远程机器上,把配置文件中的#nfs my.server.com:/export/tmp这行前面的#符号删除,然后后面参数部分替换成自己的主机名和路径名。如下

nfs penguin.example.com:/export/cores

4、配置core收集器

为了减少为vmcore转储文件的大小,内核转储允许你指定一个外部应用程序(一个core收集器)对数据进行压缩,和可选的删除所有不相关的信息。目前,唯一完全支持的core收集器是makedumpfile。

为了启用core收集器,在root权限下修改/etc/kdump.conf配置文件,删除#core_collector maledumpfile -l --message-level 1 -d 31 这行前面的#符号,然后修改为如下(启动dump文件的压缩,加上-c参数):

core_collector makedumpfile -c

为了删除dump文件中的某些页(写0的或者空闲的页),加上-d参数,-d参数后面的数字表示你想要省略的页面总数。如下:

core_collector makedumpfile -d 17 -c

5、配置kdump的默认操作

当kdump在指定的位置创建core文件失败,root文件系统会被挂在,kdump会试图把dump文件保存在本地。可以通过修改/etc/kdump.conf配置文件修改这个默认操作。修改#default shell这行,然后把shell替换为自己想要的默认动作。例如:

default halt

如何启用kdump?

在系统boot时候启动kdump服务

systemctl enable kdump.service

现在应该为多用户启用了kdump服务,相对的systemctl stop kdump可以禁用这个服务。在root权限下,使用下面的命令可以使kdump服务在当前会话可用:

systemctl start kdump.service

这里要注意的是当kdump服务启动时候,前面定义为内核转储目标目录必须存在, 否则服务将失败。此时kdump服务已经开启成功了,可以使用下面命令来查看是否开启成功。

systemctl status kdump.service

如果开启失败的话,会有如下输出:



会有很多的红字输出,第一个红字是表示开启失败了。在最后一行红字的上两行提示了是什么原因导致开启失败,上图开启失败是因为存储dump 文件的路径不存在。修改以后就成功了。

kdump内核的更多相关文章

  1. kdump内核转储

    目录 CentOS 7.5 配置Kdump 安装Kdump 安装Kdump图形化 配置保留内存 配置kdump类型 核心转储到本地 核心转储到设备 使用NFS指定核心转储 使用SSH指定核心转储 配置 ...

  2. 使用kdump内核调试工具遇到的问题及解决

    修改linux内核代码或者内核模块的时候,搞不好就会造成linux死机崩溃,crash死机后/var/log/kern.log里面不会有任何异常信息记录.这时候kdump就会派上用场了,网上kdump ...

  3. 手动添加kdump

    背景:     Linux嵌入式设备内核挂死后,无法自动重启,需要手动重启.而且如果当时没有连串口的话,就无法记录内核挂死时的堆栈,所以需要添加一种方式来记录内核挂死信息方便以后调试使用.设备中增加k ...

  4. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  5. 【转】Linux内核调试方法总结

    目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_sta ...

  6. Centos7/RHEL7 开启kdump

    Kdump是一种基于kexec的Linux内核崩溃捕获机制,简单来说系统启动时会预留一块内存,当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核, 该内核会将此时 ...

  7. kdump简单的介绍

    kdump是2.6.16之后,内核引入的一种新的内核崩溃现场信息收集工具.当一个内核崩溃后(我们称之为panic),内核会使用kexec(类似于进程的exec,把当前内核换掉)进入到一个干净的备份内核 ...

  8. CentOS 6.4中升级编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 以及Kdump配置

    在CentOS 6.4中编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 今天在isocpp上看到"GCC 4.8.1 released, C++11 feature ...

  9. Linux内核调试方法总结

    Linux内核调试方法总结 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2   ...

随机推荐

  1. lunix nginx安装 报错页面 状态码

    web服务器软件IIS  (windows底下的web服务器软件) Nginx (Linux底下新一代高性能的web服务器)  Tengine   www.taobao.com  这是淘宝 Apach ...

  2. 【Linux】【Maven】Linux下安装和配置Maven

    创建maven的文件夹并下载maven的tar包到此文件夹中 //进入一个目录 cd /usr/local//创建一个文件夹 mkdir maven//下载maven的tar包 wget http:/ ...

  3. git 使用教程(二)

    MyEclipse下使用GitHub方法(Eclipse同理) 原创 2016年01月04日 20:30:25 标签: myeclipse / 软件 / git / github / eclipse ...

  4. couchdb

    http://docs.couchdb.org/en/2.0.0/api/database/find.html#find-selectors

  5. js:浏览器插件

    1.chrome background.js //chrome.webRequest.onBeforeRequest.addListener(function(info) { // chrome.ta ...

  6. Android 组合控件

    前言 自定义组合控件就是多个控件组合起来成为一个新的控件,主要用来解决多次重复的使用同一类型的布局.比如我们应用的顶部的标题栏,还有弹出的固定样式的dialog,这些都是常用的,所以把他们所需要的控件 ...

  7. Android 关于缓存的一些类

    在做项目的时候,难免需要将一些数据存储在手机中,之前用sqlite和sharepreference,但是使用起来不是很方便.最近用到了一些缓存的类,非常方便,特此记录下来. ASimpleCache ...

  8. 关于 roadhog 2.0 版本之后不支持 cssModulesExclude

    cssModulesExclude 是用于 cssModules模块之后 ,解决不需要 cssModules 模块的样式文件, 了解 cssModules 看这里 https://segmentfau ...

  9. WDA-1-环境配置

    1.Internet Communication Manager 确认ICM中提供的HTTP/HTTPS运行正常. Tcode: SMICM -> Display service. ICM在SA ...

  10. Leetcode 题解 Combinations:回溯+求排列组合

    罗列出从n中取k个数的组合数组. 首先,求C(n,k)这个实现,很粗糙,溢出也不考虑,好的方法也不考虑.笨蛋.心乱,上来就写.. 另外,发现在递归中,不能申请太大的数组?貌似不是这个问题,是我自己越界 ...