crashkernel参数未生效会导致kdump失效,必须验证/proc/cmdline含crashkernel、/sys/kernel/kexec_crash_size非零、/proc/meminfo有CrashKernel行;ARM64或云环境慎用auto,推荐分段式配置并更新GRUB后重启。

crashkernel 参数没预留成功,kdump 就是摆设
几乎所有 kdump 失效的案例,根源都在 crashkernel 没真正生效。光在 /etc/default/grub 里写 crashkernel=256M 不够,必须验证运行时状态:
-
cat /proc/cmdline | grep crashkernel—— 必须有输出,否则启动参数根本没传进去 -
cat /sys/kernel/kexec_crash_size—— 返回值必须是非零整数(单位字节),0 表示内存完全没预留 -
grep Crash /proc/meminfo—— 应看到类似CrashKernel: 256000 kB的行
ARM64 或云环境(如 Alibaba Cloud Linux 3)慎用 crashkernel=auto,它可能因大页映射失败导致捕获内核加载超时甚至卡死。推荐改用分段式:例如 crashkernel=0M-2G:0M,2G-8G:192M,8G-:256M。改完必须执行 grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS)或 update-grub(Ubuntu/Debian),然后重启。
kdump 服务 active (exited) ≠ 捕获内核已就绪
运行 systemctl status kdump 看到 active (exited) 只代表服务脚本执行完了,不代表捕获内核真的加载进内存。关键要看日志末尾是否出现 Loaded kdump kernel:。
更可靠的检查方式是:
- 执行
kdumpctl status(部分发行版支持),输出应为Kdump is operational. - 检查 initramfs 是否含必要模块:
lsinitrd /boot/initramfs-$(uname -r)kdump.img | grep -i "kdump\|crash\|makedumpfile",至少要有makedumpfile和对应平台驱动(如tpm_tis) - 内核升级后必须重建 initramfs:
kdumpctl force-rebuild或dracut -f --regenerate-all
Ubuntu 安装 linux-crashdump 后服务自动启用;RHEL/CentOS 则需手动 systemctl enable --now kdump。若配置了 NFS/SSH 存储路径,/etc/kdump.conf 修改后不重建 initramfs,新配置不会生效。
/var/crash 写不进数据?别只看路径,先查底层约束
/etc/kdump.conf 中的 path 不是“指定就写”,它依赖三个硬性条件同时满足:
- 文件系统必须可写且挂载成功(尤其 NFS 路径需确认
rpcbind、nfs-client已启动) - 目标分区剩余空间 ≥ 物理内存大小 × 1.2(
df -h /var/crash必须够用) - 捕获内核的 initramfs 必须包含对应文件系统驱动(如 ext4、xfs、nfs、cifs)
本地路径默认是 path /var/crash,但若该目录所在分区是只读或空间不足,vmcore 会静默丢失。NFS 路径如 nfs nfs-server:/export/kdump,需提前在 /etc/kdump.conf 中取消注释并确保网络可达、权限正确。测试前务必用 mount -t nfs nfs-server:/export/kdump /mnt 手动验证连通性。
echo c > /proc/sysrq-trigger 测试失败?先看 panic_on_oops 设置
触发测试最常用命令是 echo c > /proc/sysrq-trigger,但它不一定能引发完整 panic,取决于内核当前配置:
-
cat /proc/sys/kernel/panic_on_oops—— 若为0,多数 Oops 不会升级为 Panic,只会打印错误后继续运行 - 生产环境强烈建议设为
1:echo 1 > /proc/sys/kernel/panic_on_oops,再写入sysctl -w kernel.panic_on_oops=1并加入/etc/sysctl.conf - 测试后必须重启才能看到
/var/crash/下生成的vmcore目录(含 IP-时间戳命名子目录),因为捕获内核是在重启过程中完成保存的
真正的难点不在配置步骤本身,而在于所有验证点都得串起来:启动参数 → 内存预留 → 捕获内核加载 → 文件系统可用 → panic 触发策略。漏掉任意一环,你拿到的就不是 vmcore,而是重启后一脸茫然的空白目录。


















