/etc/kdump.conf 配置详解
/etc/kdump.conf
是 Linux kdump 机制的核心配置文件,用于定义内核崩溃转储(vmcore)的生成规则、存储位置、过滤条件及触发后的自定义操作。以下是对其配置项的详细解析及常见用法示例:
一、配置文件结构
文件通常位于 /etc/kdump.conf
,包含 键值对 和 动作指令,注释以 #
开头。
基本格式:
# 注释行
key value
action [args]
二、核心配置项详解
1. 转储目标(Storage Target)
指定 vmcore
的保存位置,支持本地、远程和特殊设备存储:
配置项 | 说明 | 示例 |
---|---|---|
path /path | 定义转储文件在目标位置的子目录(默认 /var/crash ) | path /kdump_dumps |
raw /dev/sdX | 直接将内存转储到裸设备(如磁盘分区) | raw /dev/sdb1 |
ext4 /dev/sdX | 转储到 ext4 文件系统的分区 | ext4 /dev/sdb1 |
nfs host:/path | 保存到 NFS 服务器目录 | nfs 192.168.1.100:/shared/kdump |
ssh user@host | 通过 SSH 传输到远程主机 | ssh root@192.168.1.100 sshkey /root/.ssh/kdump_id_rsa |
san lunpath | 使用 SAN 存储(需配置光纤通道或 iSCSI) | san /dev/disk/by-id/scsi-3600508b1001c60e1 |
2. 过滤规则(Filtering)
控制转储内容以减小文件大小:
配置项 | 说明 | 示例 |
---|---|---|
core_collector | 指定转储收集工具(默认 makedumpfile ) | core_collector makedumpfile -l --message-level 1 -c |
default | 定义默认动作(reboot /halt /poweroff /dump_to_rootfs ) | default reboot |
extra_bins | 包含指定二进制文件到 initramfs(用于复杂转储场景) | extra_bins /usr/bin/lsof |
extra_modules | 加载额外内核模块(如网络驱动) | extra_modules igb (加载 Intel 网卡驱动) |
dracut_args | 向 dracut 传递参数(调整 initramfs 生成行为) | dracut_args --add-drivers "nvme" |
3. 过滤级别(Compression & Filter)
通过 makedumpfile
参数过滤内存页,常用选项:
# 过滤所有零页和缓存页(最小化转储)
core_collector makedumpfile -l --message-level 1 -d 31# 保留关键页(推荐生产环境)
core_collector makedumpfile -l --message-level 1 -c -d 17# 压缩转储文件(gzip/zstd/lzo)
core_collector makedumpfile -l --message-level 1 --compress zstd
过滤掩码(-d
参数):
-
1
: Zero pages -
2
: Cache pages -
4
: Cache private -
8
: User pages -
16
: Free pages
说明:组合值如
-d 17
(1+16)表示过滤零页和空闲页。
4. 网络配置(Network)
远程转储需配置网络接口和认证:
# 静态 IP(优先级高于 DHCP)
net 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.1
net eth1# SSH 密钥认证
ssh root@192.168.1.100
sshkey /root/.ssh/kdump_id_rsa
5. 钩子脚本(Hooks)
在转储前后执行自定义脚本:
# 转储前执行(如清理旧文件)
pre /usr/bin/clean_old_dumps.sh# 转储后执行(如发送通知)
post /usr/bin/send_email.sh
三、完整配置示例
# /etc/kdump.conf# 目标:保存到远程 NFS 服务器
nfs 192.168.1.100:/storage/kdump
path /hostname_$(uname -n)/date_$(date +%Y%m%d)# 过滤规则:压缩 + 排除零页/空闲页
core_collector makedumpfile -l --message-level 1 -c -d 17# 网络配置:静态 IP
net eth0
net 192.168.1.50 netmask 255.255.255.0 gateway 192.168.1.1# 钩子脚本
pre /usr/local/bin/pre_dump.sh
post /usr/local/bin/post_dump.sh# 默认动作:转储后重启
default reboot
四、配置验证与调试
1. 语法检查
kdump-config validate # Debian/Ubuntu
kdumpctl check # CentOS/RHEL
2. 重建 initramfs
修改配置后需重新生成 initramfs:
# Debian/Ubuntu
update-initramfs -u -k all# CentOS/RHEL
mkinitrd -f /boot/initramfs-$(uname -r).img $(uname -r)
3. 服务重启
systemctl restart kdump
4. 测试转储
手动触发崩溃以验证配置:
echo c > /proc/sysrq-trigger
5. 日志查看
排查转储失败问题:
journalctl -u kdump
dmesg | grep -i kdump
五、高级配置场景
1. 多路径转储
同时保存到本地和远程:
# 主目标:本地磁盘
ext4 /dev/mapper/vg_kdump-lv_kdump
path /kdump_local# 备用目标:NFS
nfs 192.168.1.100:/backup/kdump
path /kdump_remote
2. 加密转储
使用 SSH 加密传输:
ssh user@192.168.1.100
sshkey /root/.ssh/kdump_encrypted_key
core_collector makedumpfile --encrypt AES256 --passphrase-file /etc/kdump.pass
3. 云存储集成
转储到 AWS S3:
post /usr/bin/aws s3 cp /var/crash/vmcore s3://my-bucket/kdump/
六、常见问题与解决
1. 转储文件未生成
原因:存储路径权限不足或磁盘空间不足。
解决:
chmod 700 /var/crash
df -h /var/crash
2. SSH 连接失败
原因:密钥认证错误或网络不通。
解决:
ssh -i /root/.ssh/kdump_id_rsa root@192.168.1.100 # 手动测试连接
systemctl status firewalld # 检查防火墙
3. 过滤后文件仍然过大
原因:过滤掩码未正确设置。
解决:调整 -d
参数,例如 -d 31
(过滤所有非关键页)。
七、最佳实践
路径隔离
为每个主机或时间戳创建独立子目录,避免文件覆盖:
path /kdump/$(hostname)/$(date +%Y%m%d)
定期清理
添加 post
脚本自动删除旧转储文件:
post /usr/bin/find /var/crash -type f -mtime +30 -delete
安全加固
-
限制
kdump
用户权限(非 root)。 -
使用 SSH 密钥而非密码认证。
-
加密敏感转储文件。
通过合理配置 /etc/kdump.conf
,可以精确控制内核转储行为,适配复杂生产环境需求。建议结合 crash
工具和 debuginfo
符号文件,构建完整的内核故障分析体系。