要在系统初始化阶段让kdump生效,关键是在GRUB阶段预留crashkernel内存并加载捕获内核:需编辑/etc/default/grub添加分段式crashkernel参数,更新GRUB配置,安装启用kdump服务触发initramfs重建,再验证/proc/cmdline、/sys/kernel/kexec_crash_size和/proc/meminfo三项运行时状态,并通过echo c > /proc/sysrq-trigger测试崩溃流程。

要在系统初始化阶段就让 kdump 生效,关键不是“安装时配置”,而是确保生产内核启动前就完成内存预留 + 捕获内核加载。这必须在 GRUB 阶段介入,不能等系统起来再 systemctl start。
修改 GRUB 启动参数并预留 crashkernel 内存
编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 中加入 crashkernel 参数:
- 推荐用分段式写法(尤其 ARM64 或云环境):
crashkernel=0M-2G:0M,2G-8G:192M,8G-:256M - 避免仅写
crashkernel=auto—— 它在部分发行版或小内存系统中可能预留失败 - 改完后必须更新 GRUB 配置:
BIOS 系统执行grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI 系统执行grub2-mkconfig -o /boot/efi/EFI/xxx/grub.cfg(xxx 为发行版名,如 centos、fedora)
安装并启用 kdump 服务(依赖 initramfs 构建)
服务本身不负责预留内存,但它控制捕获内核是否被加载进保留内存区:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- Debian/Ubuntu:
sudo apt install linux-crashdump(自动启用服务) - RHEL/CentOS/Fedora:
sudo dnf install kexec-tools,再执行sudo systemctl enable --now kdump - 启用后会触发 initramfs 重建(如 dracut 或 update-initramfs)。若手动改过
/etc/kdump.conf(比如设了 NFS 路径),必须显式重建:sudo dracut -f --regenerate-all或sudo kdumpctl force-rebuild
验证初始化阶段是否真正就绪
重启后检查三项运行时状态,缺一不可:
-
cat /proc/cmdline | grep crashkernel→ 必须有输出,如crashkernel=256M -
cat /sys/kernel/kexec_crash_size→ 返回非零值(单位字节),如268435456 -
grep Crash /proc/meminfo→ 显示类似CrashKernel: 256000 kB - 额外确认:
kdumpctl status应返回Kdump is operational.;lsinitrd /boot/initramfs-$(uname -r)kdump.img | grep -i "makedumpfile"应有输出
测试崩溃流程是否在初始化后即生效
不要跳过这步。在非生产环境执行:
-
echo c > /proc/sysrq-trigger(触发 panic) - 系统会自动重启,进入捕获内核 → 保存 vmcore 到
/var/crash/或你配置的路径 - 重启完成后检查:
ls -lh /var/crash/$(hostname).*/vmcore是否存在且大小接近物理内存

















