跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Linux系统查看内核崩溃转储文件 kdump配置与分析详细教程

kdump配置不生效主因是crashkernel未预留成功或服务未加载捕获内核:需验证/proc/cmdline含crashkernel参数、/sys/kernel/kexec_crash_size非零、/proc/meminfo有CrashKernel行,三者缺一不可。 kdump 配置不生效,90% 是 crashkernel 没预留成功或 kdump 服务没真正加载捕获内核——先验证这两点,别急着改
/etc/kdump.conf
。 crashkernel 参数是否真的生效了 内核启动时没预留内存,kdump 就是空转。不能只看
grub
配置文件里有没有写,得看运行时状态: 执行
cat /proc/cmdline
,确认输出中包含
crashkernel=...
(比如
crashkernel=auto
或
crashkernel=128M@64M
) 执行
cat /sys/kernel/kexec_crash_size
,返回值应是非零数字(单位字节),比如
134217728
表示 128MB;返回
0
就说明根本没预留 执行
grep Crash /proc/meminfo
,应看到类似
CrashKernel: 128000 kB
的行;没有则失败 常见坑:
crashkernel=auto
在某些老内核或小内存机器(crashkernel=128M(x86_64)或
crashkernel=256M
(ARM64) kdump 服务是否加载了捕获内核 服务状态显示 active ≠ 捕获内核已就绪。必须确认第二内核镜像和 initramfs 已载入内存: 执行
systemctl status kdump
,重点看最后一行日志是否含
Loaded kdump kernel
或
Starting kdump service
后无报错 执行
kdumpctl status
(部分发行版提供),输出应为
Kdump is operational.
执行
lsinitrd /boot/initramfs-$(uname -r)kdump.img | grep -i "kdump\|crash"
,确认 initramfs 里有 kdump 相关模块(如
kernel/drivers/char/tpm/
、
makedumpfile
) 常见坑:升级内核后没重建 kdump initramfs;需手动运行
kdumpctl force-rebuild
或
dracut -f --regenerate-all
触发崩溃后 vmcore 没生成在 /var/crash 不是所有“崩溃”都会走 kdump 流程,也不是所有配置路径都默认可用: CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。 下载 手动触发前务必执行
echo 1 > /proc/sys/kernel/sysrq
,否则
echo c > /proc/sysrq-trigger
无效 检查
/etc/kdump.conf
中
path
是否指向可写目录,且该目录所在文件系统有足够空间(至少 > 当前
free -m
中的
used
值) 若用 NFS 或 SSH 存储,确保
network
行配置正确,且目标端口/认证/路径可达;本地调试建议先用
ext4 /dev/sda1
这类裸设备方式绕过挂载问题 常见坑:
core_collector makedumpfile -c --message-level 1 -d 31
若压缩失败(如内存碎片严重),会静默跳过写入;临时可注释该行改用
core_collector cp
看是否能生成未压缩 vmcore 用 crash 分析 vmcore 时提示版本不匹配或符号缺失 crash 不是通用二进制,它和内核版本、架构、调试符号强绑定: 执行
file /var/crash/*/vmcore
确认 vmcore 架构(如
ARM aarch64
),再用对应架构编译的
crash
(比如 ARM64 环境不能用 x86_64 的 crash) 执行
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/vmcore
——
vmlinux
必须带完整调试信息,仅
vmlinuz
不行;RHEL/CentOS 装
kernel-debuginfo
包,Ubuntu 装
linux-image-$(uname -r)-dbgsym
若提示
No debugging data available
,说明
vmlinux
文件损坏或版本不对;可用
readelf -S /path/to/vmlinux | grep debug
验证是否存在
.debug_*
节 常见坑:容器或云主机里
/proc/kcore
不可用,但 crash 仍会尝试读取;加
-s
参数跳过(
crash -s vmlinux vmcore
) 最易被忽略的是:kdump 启动的捕获内核不加载原系统的任何模块(比如 RAID、NVMe 驱动),所以如果 rootfs 在 LVM/RAID/NVMe 上,
/etc/kdump.conf
中必须显式用
extra_modules
加载对应驱动,否则 vmcore 写不进磁盘。

相关文章