欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > Kdump 收集器及使用方式

Kdump 收集器及使用方式

2025/5/6 7:12:59 来源:https://blog.csdn.net/ygq13572549874/article/details/147723006  浏览:    关键词:Kdump 收集器及使用方式

以下是 Linux 系统中 Kdump 转储收集器的详细说明及其使用方法,涵盖核心工具、配置方法及实际示例:

一、Kdump 收集器分类及作用

Kdump 的核心功能是通过 捕获内核 生成内存转储文件(vmcore),其核心收集器包括:

收集器/工具作用适用场景
makedumpfile默认核心工具,过滤和压缩内存页生成 vmcore生产环境(节省存储空间)
kexec-tools管理内核快速启动(kexec),加载捕获内核所有 Kdump 场景(基础依赖)
crashkernel 参数预留内存供捕获内核使用内核启动配置(必需)
自定义脚本通过 pre/post 钩子扩展功能(如加密、上传云存储)高级场景(自动化处理)

二、核心收集器配置与使用

1. makedumpfile

作用:生成转储文件时过滤无关内存页(如零页、缓存),并支持压缩。

配置方法/etc/kdump.conf):
# 指定过滤掩码(-d)和压缩算法(-c/-l)
core_collector makedumpfile -l --message-level 1 -d 31

过滤掩码(-d

  • 1: 过滤零页

  • 2: 过滤缓存页

  • 4: 过滤私有缓存页

  • 8: 过滤用户进程页

  • 16: 过滤空闲页

示例-d 31(1+2+4+8+16)过滤所有非关键页。

压缩选项

  • -c: zlib 压缩

  • -l: lzo 压缩(更快,压缩率较低)

  • -p: snappy 压缩(需内核支持)

手动执行
# 直接生成转储文件(需指定内存设备)
makedumpfile -l -d 31 /proc/vmcore /path/to/vmcore
2. kexec-tools

作用:快速加载捕获内核,绕过 BIOS 初始化,确保内存保留。

安装与验证
# 安装(各发行版通用)
sudo apt install kexec-tools   # Debian/Ubuntu
sudo yum install kexec-tools   # CentOS/RHEL# 验证 kexec 是否可用
kexec --version
手动加载捕获内核(调试用):
# 加载捕获内核(需指定内核镜像和初始化内存盘)
kexec -p /boot/vmlinuz-$(uname -r) \
--initrd=/boot/initramfs-$(uname -r).img \
--append="root=/dev/sda1 crashkernel=256M"
3. crashkernel 参数

作用:为捕获内核预留内存,必须在内核启动参数中配置。

修改 GRUB 配置
# 编辑 GRUB 文件(路径因发行版而异)
sudo vim /etc/default/grub# 添加 crashkernel 参数(示例为预留 256MB)
GRUB_CMDLINE_LINUX="... crashkernel=256M quiet"# 更新 GRUB 并重启
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
动态调整(无需重启)
# 调整预留内存(需内核支持)
echo 512M > /sys/kernel/kexec_crash_size

三、存储目标配置示例

通过 /etc/kdump.conf 定义转储文件存储位置:

1. 本地磁盘
# 保存到 ext4 分区
ext4 /dev/sdb1
path /var/crash
core_collector makedumpfile -l -d 17
2. NFS 服务器
# 保存到 NFS 共享目录
nfs 192.168.1.100:/shared/kdump
path /crash_dumps
core_collector makedumpfile -c -d 31
3. SSH 远程存储
# 通过 SSH 传输到远程主机
ssh root@192.168.1.100
sshkey /root/.ssh/kdump_id_rsa
path /remote/crash
4. 加密存储
# 使用加密转储(需内核支持)
core_collector makedumpfile --encrypt AES256 --passphrase-file /etc/kdump.pass

四、触发与验证

1. 手动触发转储
# 触发内核崩溃(立即重启)
echo c > /proc/sysrq-trigger# 或使用专用工具(需安装)
sudo crashme
2. 验证转储文件
# 检查 vmcore 是否生成
ls -lh /var/crash/*/vmcore# 使用 crash 工具解析
crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/*/vmcore

五、高级用法与最佳实践

1. 自动化钩子脚本

在转储前后执行自定义操作:

# 转储前清理旧文件
pre /usr/local/bin/kdump_clean.sh# 转储后上传到云存储
post /usr/local/bin/kdump_upload_s3.sh
2. 多级过滤策略

按需调整过滤规则:

最小转储(仅保留关键数据):

core_collector makedumpfile -d 31 -c

完整转储(调试复杂问题):

core_collector makedumpfile -d 0
3. 资源受限环境优化
  • 小内存系统:减少 crashkernel 预留(最低 128M)。

  • 无持久存储:保存到临时内存盘(raw /dev/ram0)。

六、故障排查

1. 转储失败常见原因
  • 预留内存不足:增大 crashkernel 值(如 512M)。

  • 存储路径权限问题

    chmod 700 /var/crash
  • 服务未启动

    systemctl enable --now kdump
2. 日志分析
# 查看 Kdump 服务日志
journalctl -u kdump# 检查内核日志
dmesg | grep -i kdump

七、总结

工具/配置核心功能关键命令/参数
makedumpfile过滤和压缩转储文件-d <掩码>-c/-l
kexec-tools快速加载捕获内核kexec -p
crashkernel预留内存crashkernel=256M
/etc/kdump.conf定义存储路径、过滤规则和钩子脚本ext4/nfs/sshcore_collector

通过合理配置收集器和存储目标,Kdump 可以高效捕获内核崩溃现场,为故障分析提供可靠数据。建议定期测试转储流程,确保其可用性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词