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 已载入内存:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 执行
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 流程,也不是所有配置路径都默认可用:
- 手动触发前务必执行
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 写不进磁盘。










