/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 符号文件,构建完整的内核故障分析体系。

相关推荐
YuMiao17 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
Sinclair4 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
Rockbean5 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩5 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试