ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

【调试工具】【Kdump】 -- Centos7配置Kdump【二】

2020-12-25 14:32:38  阅读:546  来源: 互联网

标签:--- crash -- kdump kexec Centos7 内核 Kdump



不同的Linux发行版本对Kdump的配置都是不一样的,本文主要介绍CentOS的Kdump配置。

**想要实现Kdump功能,需要哪些配置?**

  1. 内核配置
  2. 安装kdump(kexec-tools)工具
  3. 修改内核启动参数(“crashkernel=xxxM quiet”)
  4. 修改kdump配置文件
  5. 启动kdump功能
  6. 验证Kdump功能

下面就对这几个方面做具体的介绍。


(一)内核配置

通常我们认为X86设备默认内核是已经配置了Kdump功能的。
想要确认当前内核是否支持kexec,可通过查看在/sys/kernel/下有没有kexec等文件去确认,同时通过查看 /sys/kernel/kexec_crash_loaded 的值,判断Kdump功能是否加载(“1”为已经加载,“0”为还未加载)

cat /sys/kernel/kexec_crash_loaded

如果没有,则需要我们对内核进行配置,具体如下(make menuconfig):

CONFIG_KEXEC=y
Boot options  --->[*] Kexec system call (EXPERIMENTAL)
//此参数告诉系统使用Kexec跳过BIOS和引导(新)内核。(提供内核层面的kexec功能支持)
CONFIG_CRASH_DUMP=y
Boot options  --->[*] Build kdump crash kernel (EXPERIMENTAL)
//崩溃转储需要启用。没有此选项,Kdump将毫无用处。(提供内核层面的kdump功能支持)
CONFIG_SYSFS=y
File systems  --->Pseudo filesystems  --->[*] Tmpfs virtual memory file system support
//启用sysfs文件系统支持
CONFIG_PROC_VMCORE=y
File systems  --->Pseudo filesystems  --->-*- /proc file system support--->[*]   /proc/vmcore support
//此配置允许Kdump将内存转储保存到/proc/vmcore。
CONFIG_DEBUG_INFO=y
Kernel hacking  --->Compile-time checks and compiler options  --->[*] Compile the kernel with debug info
//此参数表示将使用调试符号构建内核。尽管这将增加内核映像的大小,但是具有可用的符号对于深入分析内核崩溃非常有用,因为它不仅使您可以跟踪导致崩溃的有问题的函数调用问题,而且可以跟踪特定行在相关来源中。

(二)安装kdump(kexec-tools)工具

通常我们认为X86设备默认内核是已经配置了Kdump功能的。
kdump依赖于kexec工具,验证kexec工具是否存在:

kexec -v

如果没有安装kexec工具,安装kexec:

sudo yum update
sudo yum search kexec-tools
sudo yum install kexec-tools

安装完成之后可以通过kexec -v查看kexec的版本。


(三)修改内核启动参数

之后修改/etc/default/grub内核启动文件,如下:

vi /etc/default/grub
修改为
GRUB_CMDLINE_LINUX="crashkernel=128M quiet"

说明:
    crashkernel=xxx    //预留内存大小
    quiet              //(过滤部分打印)表示在启动过程中只有重要信息显示,类似硬件自检的消息不回显示
注意:
    如果不加quiet可能会导致生成不了vmcore,原因暂时不明
    注意预留内存大小,过大/过小都会导致生成vmcore文件失败(不知道设置多少时,可以尝试每次增加128M)
    参考:https://blog.csdn.net/shipinsky/article/details/82816969

只要更改了grub文件,都需要更新grub配置。执行完毕后,需要重启才能生效。

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

重启成功后,验证是否已成功配置启动参数:

cat /proc/cmdline

说明:
    如果在cmdline里找到了crashkernel参数,代表已经将配置写入内核了

(四)修改kdump配置文件

修改/etc/kdump.conf配置文件:

vim /etc/kdump.conf

其中需要注意的三行内容
...
path /var/crash                                            #指定coredump文件放在/var/crash文件夹中
core_collector makedumpfile -c -l -message-level 1 -d 31   #加上-c表示压缩,原文件中没有
default reboot                                             #生成coredump后,重启系统
...

注意:
    选项-c添加上后,可能会导致生成vmcore失败,原因不明,如果不添加可能会导致vmcore非常大(我这边vmcore有1.2GB)

(五)启动kdump功能

最后启动Kdump服务

systemctl enable kdump.service
systemctl start kdump.service

注意:
	如果您之前配置过kdump服务的,可以使用restart命令重新启动下,否则不一定能用,如:
	systemctl restart kdump.service

查看Kdump服务

systemctl status kdump

● kdump.service - Crash recovery kernel arming
   Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
   Active: active (exited) since Mon 2020-12-21 14:45:36 CST; 7min ago
 Main PID: 6983 (code=exited, status=0/SUCCESS)
   Memory: 0B
   CGroup: /system.slice/kdump.service

(六)验证Kdump功能

最后的最后,我们来模拟系统异常崩溃,验证之前的操作是否都成功了:

echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger

重启后,查看/var/crash目录

ls /var/crash/

如果在/var/crash目录下生成了127.0.0.1-xxx目录,恭喜!说明前面的Kdump服务已经配置成功~
至于如何分析产生的vmcore文件,笔者会单独再写一篇文章说明。


标签:---,crash,--,kdump,kexec,Centos7,内核,Kdump
来源: https://blog.csdn.net/Ivan804638781/article/details/111639436

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有