kdump是主流发行版正式支持的内核崩溃转储机制,kdmp为拼写错误;需先通过crashkernel参数预留内存(如Fedora CoreOS推荐crashkernel=300M),再配置服务与转储路径,最后验证捕获内核加载能力。

直接说结论:kdump 是唯一被主流发行版(RHEL、Fedora CoreOS、Ubuntu、SLES)正式支持的内核崩溃导出机制,kdmp 并不存在——这是常见拼写错误或混淆词,实际要配的是 kdump。
确认系统是否已启用 kdump 内核参数
没预留内存,kdump 根本启动不了。先看内核命令行有没有 crashkernel:
grep crashkernel /proc/cmdline
如果输出为空,说明没预留内存,后续所有配置都无效。常见错误现象是:systemctl status kdump 显示 inactive (dead),且日志里反复出现 Failed to reserve crashkernel memory。
不同场景下推荐值不同:
- 普通物理机或虚拟机(≥4GB 内存):用
crashkernel=300M更稳妥,crashkernel=auto在 Fedora CoreOS 上常只留 64M,不够捕获完整 vmcore - 内存 ≥16GB 的服务器:可设为
crashkernel=512M,避免压缩失败或转储截断 - ARM64 或龙芯等非 x86 架构:必须显式指定偏移,如
crashkernel=256M@32M,否则可能因 EFI 内存布局冲突导致捕获内核无法加载
修改 grub 并更新启动配置
不能只改 /etc/default/grub 就完事,漏掉 grub2-mkconfig 是最常踩的坑。
步骤必须严格按顺序:
- 编辑
/etc/default/grub,在GRUB_CMDLINE_LINUX里加入或替换为crashkernel=300M - 执行
sudo grub2-mkconfig -o /boot/grub2/grub.cfg(BIOS)或sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg(UEFI) - 重启后立刻验证:
cat /proc/cmdline | grep crashkernel—— 必须看到生效的值,而不是旧值
注意:在 Fedora CoreOS 等 immutable 系统上,要用 rpm-ostree kargs --append=crashkernel=300M,再 systemctl reboot,直接改 grub 文件会被下次更新覆盖。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
配置转储路径与服务启停
/etc/kdump.conf 里的 path 不是绝对路径,而是相对于挂载点的路径。很多人误设 path /var/crash 却没确认 /var/crash 是否独立挂载,结果 vmcore 写进根分区,撑爆 / 导致系统无法重启。
安全做法:
- 确保
/var/crash所在文件系统有 ≥2GB 空闲空间(vmcore 常达 1–3GB) - 若用 NFS 或 SSH 远程转储,
/etc/kdump.conf中只能保留一个目标(ext4、nfs、ssh三选一),多写会导致服务启动失败 - 启用服务必须两步:
sudo systemctl enable kdump.service+sudo systemctl start kdump.service,只 enable 不 start,状态仍是 inactive
启动后检查:systemctl status kdump 应显示 active (exited),不是 active (running) —— 这是正常行为,因为 kdump 是一次性服务,只在崩溃时触发。
测试前必须验证捕获内核能否加载
手动触发 echo c > /proc/sysrq-trigger 前,先运行:
sudo kdumpctl debug
它会尝试在当前内核下模拟加载捕获内核和 initramfs。失败原因通常有:
-
makedumpfile版本不匹配(如内核是 6.6,但 makedumpfile 是 6.4,缺少新内存映射支持) -
/boot/initramfs-$(uname -r)-kdump.img缺失(需重装kexec-tools或运行dracut --force --regenerate-all) - SELinux 拦截了 kdump 的内存访问(临时禁用测试:
sudo setenforce 0)
真正崩溃测试必须在非生产环境做,且确保磁盘空间、网络路径、权限全部就绪——一次失败的测试可能留下半截 vmcore 占满空间,下次崩溃就彻底丢数据。










