@cdmonkey
2026-04-27T06:56:30.000000Z
字数 4056
阅读 5
操作系统
Kdump 是一个 kernel crash dump 内核机制,用于当系统、内核崩溃时捕获崩溃信息并进行转储。为了启用这个机制,就必须要保留物理 RAM 某些部分(并且这部分内存不能用作其他用途),从而于内核崩溃时用于执行 kdump 内核。
发生内核崩溃时,正在运行的内核将运行 kexec(kdump kernel),然后从保留内存中载入 kdump 内核,而后将 RAM、Swap 内容复制于 vmcore(内存映像)文件中。
目前绝大多数 Linux 发行版都将 kdump.service 服务默认开启,从而方便于内核崩溃时,通过 kdump 服务所提供的 kexec 机制快速启用保留于内存中的第二个内核收集并转储内核崩溃之日志信息(vmcore 等文件),这个机制需要服务器硬件特性支持,不过当今常用服务器系列均已支持。
若是没有特别设置,系统均采用默认 kdump 服务配置,崩溃日志文件默认使用 disk 设置保存于本地目录,Centos/Redhat 系列主要保存于以下目录:
/var/crash/
若是系统内存 <=8GB,kdump kernel 不保留任何内容,crashkernel=auto 就等于关掉了 kdump 功能;
若是系统内存 >8GB,但是 <=16GB,crashkernel=auto 将保留 256M,等同于 crashkernel=256M;
若是系统内存 >16GB,crashkernel=auto 将保留 512M, 等同于 crashkernel=512M。
一般设置为 crashkernel=auto,表示根据系统内存自动 Reserve 一些内存给 kdump 机制使用,x86_64 中内存要 >=2GB 时才启用 Reserve 内存。
上述内容未进行详细验证,仅供参考。
虚拟机上目前启动 kdump 服务会有报错:
-- Unit kdump.service has begun starting up.Sep 28 10:13:06 elk-fb kdumpctl[6243]: No memory reserved for crash kernelSep 28 10:13:06 elk-fb kdumpctl[6243]: Starting kdump: [FAILED]Sep 28 10:13:06 elk-fb systemd[1]: kdump.service: main process exited, code=exited, status=1/FAILURESep 28 10:13:06 elk-fb systemd[1]: Failed to start Crash recovery kernel arming....
估计是跟 Grub 配置有关,没有 crashkernel=xxx 这个配置内容。
[root@elk-fb ~]# cat /etc/default/grubGRUB_TIMEOUT=5GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"GRUB_DEFAULT=savedGRUB_DISABLE_SUBMENU=trueGRUB_TERMINAL_OUTPUT="console"GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root "net.ifnames=0 biosdevname=0" rd.lvm.lv=centos/swap rhgb quiet"GRUB_DISABLE_RECOVERY="true"
解决:
grubby --update-kernel=DEFAULT --args=crashkernel=128M
然后进行重启,重启后就能够开启 kdump 服务了。
查看分配了多少内存:
[root@elk-fb ~]# kdumpctl showmemReserved 161MB memory for crash kernel
若是要开启 Kdump,首先需要安装 kexec-tools 工具:
yum install kexec-tools crash# Start the servicesystemctl start kdump.service
再然后需要安装 kernel-debuginfo 工具(需要跟内核版本完全相同):
[root@PBSRC-BD-07 ~]# uname -r3.10.0-514.el7.x86_64# Download package:wget http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-3.10.0-514.el7.x86_64.rpmwget http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-common-x86_64-3.10.0-514.el7.x86_64.rpm# Install:rpm -ivh kernel-debuginfo-*.rpm
安装完后确认是否有以下文件:
/usr/lib/debug/lib/modules/3.10.0-514.el7.x86_64/vmlinux
最后,需要对 Grub 文件进行配置,确保有 crashkernel=auto 这个配置条目。下面是一台物理机之实际配置,安装完操作系统后就是这个样子。
[root@PBSRC-BD-07 ~]# cat /etc/default/grubGRUB_TIMEOUT=5GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"GRUB_DEFAULT=savedGRUB_DISABLE_SUBMENU=trueGRUB_TERMINAL_OUTPUT="console"GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"GRUB_DISABLE_RECOVERY="true"
查看当前 kdump 服务状态:
[root@PBSRC-BD-07 ~]# systemctl status kdump.service● kdump.service - Crash recovery kernel armingLoaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)Active: active (exited) since Sat 2020-09-05 16:44:22 CST; 3 weeks 0 days agoProcess: 1911 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)Main PID: 1911 (code=exited, status=0/SUCCESS)CGroup: /system.slice/kdump.serviceSep 05 16:44:17 PBSRC-BD-07 systemd[1]: Starting Crash recovery kernel arming...Sep 05 16:44:22 PBSRC-BD-07 kdumpctl[1911]: kexec: loaded kdump kernelSep 05 16:44:22 PBSRC-BD-07 kdumpctl[1911]: Starting kdump: [OK]Sep 05 16:44:22 PBSRC-BD-07 systemd[1]: Started Crash recovery kernel arming.
另外,/boot 目录下面有一个 kdump 结尾的文件:
[root@PBSRC-BD-07 ~]# ls /boot/|grep kdumpinitramfs-3.10.0-514.el7.x86_64kdump.img
首先需要注意,/var/crash 目录下每个 dump 目录(目录名通常为 127.0.0.1-date-time)里面包含了两个文件:vmcore、vmcore-dmesg.txt。两个文件记录了系统 Crash 时刻之最后讯息,可透过这些信息追踪发生了什么事。
这需要借助于两个工具:kdump、crash。kdump 是让系统 Crash 时将内核讯息 dump 至指定位置(本地或是远程)供使用者排错,而 crash 能够分析 vmcore 内容,但是需要 vmlinux 文件才能进行分析,vmlinux 需要跟目前系统核心完全相同。
而另外那个 vmcore-dmesg.txt 文件记录一些系统资讯及 Crash 时的资讯,虽然没有比 vmcore 详细但是也能够作为参考。可将其视为 vmcore 的日志信息。
crash /usr/lib/debug/lib/modules/3.10.0-514.el7.x86_64/vmlinux /var/crash/127.0.0.1-2020-09-05-04\:42\:14/vmcore
参考内容:
https://www.linuxtechi.com/how-to-enable-kdump-on-rhel-7-and-centos-7
https://blog.arstercz.com/brief-intro-to-linux-kernel-crash-analyze
https://www.cnblogs.com/augusite/p/10613794.html
https://www.bladewan.com/2017/09/21/kdump
官方文档:
Linux 内核崩溃分析处置简介
https://blog.arstercz.com/brief-intro-to-linux-kernel-crash-analyze/