/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 [email protected] 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 [email protected]
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 [email protected]
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 [email protected]  # 手动测试连接
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 符号文件,构建完整的内核故障分析体系。

相关推荐
Dy大叔2 分钟前
ThinkPHP 5 根据账户类型的不同统计数据中使用CASE WHEN THEN SQL语句实例
mysql·php
网硕互联的小客服36 分钟前
如何解决服务器文件丢失或损坏的问题
运维·服务器
Shanxun Liao37 分钟前
如何在 PowerEdge 服务器上设置 NIC 分组
运维·服务器
一道秘制的小菜39 分钟前
AimRT从入门到精通 - 03Channel发布者和订阅者
linux·服务器·c++·vim·aimrt
开开心心就好1 小时前
提升办公效率的PDF转图片实用工具
运维·服务器·网络·python·智能手机·pdf·ocr
茅坑的小石头1 小时前
linux tar命令详解。压缩格式对比
linux·运维·服务器
球求了1 小时前
Linux 入门:操作系统&&进程详解
linux·运维·服务器·开发语言·学习
JAVA学习通2 小时前
[javaEE]网络编程
运维·服务器·网络
钢铁男儿3 小时前
Python 函数装饰器和闭包(闭包)
java·网络·python