什么是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. Mac下如何用SSH连接远程Linux服务器,centos无法复制粘贴

    CentOS 7.1安装完之后默认已经启动了ssh服务我们可以通过以下命令来查看ssh服务是否启动. 3.2查看22端口是否开放 #netstat -tnl 3.3查看ssh服务是否启动 #syste ...

  2. js 原生图片上传

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. [Unity工具]嵌套Prefab

    在父Prefab中嵌套子Prefab,那么如果对这个嵌套Prefab进行修改,改变将不会应用到子Prefab中:同理,对子Prefab的修改,也不会应用到这个嵌套Prefab中.因此,就会出现一些问题 ...

  4. spring -mvc service层调用工具类配置

    在service层时调用工具类时服务返回工具类对象为空 在此工具类上加上@Component注解就可以了 @Component:把普通pojo实例化到spring容器中,相当于配置文件中的 <b ...

  5. 代码: js: 数值操作

    数值转换: 将 32000 这样的数字,转换为“3.2万” //将32000 这样的数字,转换为 “3.2万” var price = parseInt('31999'); var price2 = ...

  6. socket-tcp

    server import socketip_port=('127.0.0.1',8080);back_log=5buffer_size=1024 serv=socket.socket(socket. ...

  7. C# 设计模式-策略者模式(Strategy)

    策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式是对算法的包装,是把使用算法的责任和 ...

  8. Termux 详细安装

    termnux安装方法 https://blog.csdn.net/u010475354/article/details/79675893 使用Termux把Android手机变成SSH服务器 htt ...

  9. day02-数据库操作

    一.数据库操作 1.1.创建数据库(增) CREATE DATABASE 也可以使用小写,(注意不要漏掉分号 ;) mysql> create database test; 或 mysql> ...

  10. Activity启动模式(lauchMode)

    Activity启动模式(lauchMode) 本来想针对Activity中的启动模式写篇文章的,后来网上发现有人已经总结的相当好了,在此直接引用过来,并加上自己的一些理解,在此感谢原作者. 文章地址 ...