CentOS 6.8 系统中的 kdump 配置与使用
什么是 kdump?
kdump 是一种基于 kexec 的内核崩溃转储机制,用于在 Linux 系统内核崩溃时捕获内存快照(vmcore),以便后续分析崩溃原因,它通过保留一部分系统内存作为转储区域,在内核崩溃时启动第二个内核(捕获内核)来保存原始内存内容,CentOS 6.8 默认支持 kdump,但需要手动配置才能正常工作。

为什么需要启用 kdump?
系统内核崩溃可能由驱动错误、硬件故障或内核漏洞引起,难以复现,kdump 提供的 vmcore 文件可通过工具(如 crash 或 gdb)分析,帮助定位问题根源,对于生产环境或需要高稳定性的系统,启用 kdump 是排查故障的重要手段。
检查系统是否支持 kdump
在配置前,需确认系统硬件和内核支持 kdump,首先检查内核是否支持 kdump:
grep -i crashkernel /proc/cmdline
若输出包含 crashkernel 参数,说明已预留内存;若无,需手动添加,确保系统为 64 位架构(x86_64),kdump 在 32 位系统上支持有限。
安装 kdump 相关软件包
CentOS 6.8 需安装 kexec-tools 包,提供 kdump 依赖的核心工具:
yum install kexec-tools -y
安装后,通过以下命令确认版本:
rpm -q kexec-tools
建议使用较新版本(如 2.0.10-45.el6 或更高),以获得更好的兼容性。
配置 kdump 服务
编辑 /etc/kdump.conf 文件,定义转储行为和存储位置,常见配置项包括:

path:指定 vmcore 存储路径,如/var/crash。corecollector:使用 makedumputils 压缩转储文件,如core-collector makedumpfile -c --message-level 7 -d 31。net:通过 NFS 或 SSH 网络存储转储文件(需确保网络可用)。
本地存储配置如下:
path /var/crash core-collector makedumpfile -c --message-level 7 -d 31
保存后,确保目录权限正确:
chmod 700 /var/crash chown root.root /var/crash
设置内核启动参数
在 /etc/grub.conf 中添加 crashkernel 参数,为捕获内核预留内存,预留 512MB 内存:
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=xxx crashkernel=512M@128M
参数格式为 crashkernel=<大小>@<起始地址>,大小需根据系统内存调整(通常为 512MB 或 1GB),修改后更新 GRUB 配置:
grub2-mkconfig -o /boot/grub2/grub.cfg
启动并启用 kdump 服务
使用以下命令启动 kdump 服务并设置开机自启:
service kdump start chkconfig kdump on
检查服务状态:
service kdump status
若显示 “Kdump is operational”,则配置成功。

测试 kdump 功能
通过手动触发内核崩溃来验证 kdump 是否生效:
echo c > /proc/sysrq-trigger
系统将重启并生成 vmcore 文件,检查 /var/crash 目录下是否存在转储文件,确认测试结果。
常见问题与排查
- kdump 启动失败:检查
crashkernel参数是否正确,或预留内存不足。 - vmcore 文件过大:调整
core-collector配置,启用压缩功能。
相关问答 FAQs
Q1: 如何调整 kdump 预留的内存大小?
A1: 修改 /etc/grub.conf 中的 crashkernel 参数,从 512M 改为 1G:crashkernel=1G@128M,然后重启系统使配置生效。
Q2: 如何分析生成的 vmcore 文件?
A2: 使用 crash 工具分析,首先安装 crash 包:yum install crash -y,然后执行 crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/<latest>/vmcore,输入命令如 bt 查看堆栈跟踪。