CentOS 5.9 下的 kdump 配置与使用
kdump 是 Linux 内核崩溃转储机制,能够在系统发生内核崩溃时捕获内存快照,帮助开发者分析问题根源,CentOS 5.9 作为较早的稳定版本,其 kdump 配置与使用方式与现代系统略有不同,但基本原理一致,本文将详细介绍在 CentOS 5.9 环境下如何配置、测试及管理 kdump 服务,确保系统在意外崩溃时能够生成有效的转储文件。

kdump 的工作原理
kdump 依赖于两个内核:一是运行中的主内核,二是用于捕获崩溃信息的捕获内核(capture kernel),当系统崩溃时,kdump 服务会重启到捕获内核,并将主内核的内存快照保存到指定位置,捕获内核通常通过 initrd 镜像加载,其内存需求为主内核的 256MB 或更大,具体取决于系统内存大小。
在 CentOS 5.9 中,kdump 的配置文件为 /etc/kdump.conf,用户可以通过修改该文件指定转储目标、格式及过滤规则,常见的转储目标包括磁盘分区、 NFS 共享或远程服务器。
系统要求与准备工作
在配置 kdump 前,需确保系统满足以下要求:
- 内存分配:为主内核预留足够内存,可通过
crashkernel参数指定,crashkernel=256M。 - 磁盘空间:转储文件大小通常与可用物理内存相当,需确保目标分区有足够空间。
- 工具安装:安装 kdump 相关软件包,包括
kexec-tools和systemtap-sdt,可通过以下命令安装:yum install kexec-tools systemtap-sdt
- 内核支持:确保系统内核支持 kdump,CentOS 5.9 默认支持,但需检查
/boot/config-$(uname -r)中CONFIG_KEXEC和CONFIG_CRASH_DUMP选项是否启用。
配置 kdump
1 编辑 /etc/kdump.conf
该文件包含多个配置项,以下为常见示例:
# 转储目标为本地磁盘分区
path /mnt/crash
# 转储格式为 elf(默认)
core_collector makedumpfile --core-uses-section --message-level 7 -d 31
# 过滤掉缓存页面(可选)
default reboot
2 设置 crashkernel 参数
编辑 /boot/grub/grub.conf,在内核启动参数中添加 crashkernel=256M。
kernel /vmlinuz-2.6.18-348.6.1.el5 ro root=LABEL=/ crashkernel=256M
3 启动并启用 kdump 服务
service kdump start
chkconfig kdump on
测试 kdump 功能
配置完成后,需手动测试 kdump 是否正常工作。

1 触发内核崩溃
使用以下命令模拟崩溃:
echo c > /proc/sysrq-trigger
系统将重启并生成转储文件,检查 /mnt/crash/ 目录下是否存在 vmcore 文件。
2 分析转储文件
使用 crash 工具分析转储文件:
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /mnt/crash/vmcore
进入交互模式后,可通过 bt 命令查看调用堆栈,定位崩溃原因。
常见问题与维护
1 转储失败
若未生成 vmcore 文件,检查以下问题:
- 磁盘空间不足。
crashkernel参数未生效(重启后检查/proc/iomem)。- kdump 服务未启动(
service kdump status)。
2 转储文件过大
可通过 makedumpfile 过滤不必要的内存区域,

core_collector makedumpfile -d 31
-d 31 表示过滤掉缓存页面,减少文件大小。
安全与性能优化
- 权限控制:确保转储目录权限为 700,避免未授权访问。
- 自动清理:通过 logrotate 或自定义脚本定期清理旧转储文件。
- 网络转储:若使用 NFS 或远程服务器,确保网络稳定且带宽充足。
FAQs
Q1: 如何确认 kdump 已正确加载?
A1: 检查 /proc/modules 中是否存在 kdump 模块,或运行 service kdump status 查看服务状态。
Q2: 转储文件无法用 crash 工具打开怎么办?
A2: 确认转储文件与内核版本匹配,检查 vmlinux 路径是否正确,或尝试使用 gdb 工具辅助分析。