完整剖析 Linux Kdump Crash Kernel 工作原理和实操步骤

[复制链接]
发表于 2025-7-9 03:01:30 | 显示全部楼层 |阅读模式
完整剖析 Linux Kdump Crash Kernel 工作原理和实操步骤

一、前言

在使用 Linux 操纵系统进行内核开发或者系统维护时,内核 panic 是最常见的系统瓦解环节。如果想要在内核瓦解后立即分析环境和输出内核内存 dump,Kdump + crashkernel 是最靠近完美的解决方案。

二、基础概念

2.1 Kdump 是什么?

Kdump 是 Linux 封装的一套 Kernel crash dump 处置惩罚方案,它基于 kexec 技能,将一个备用内核 (crash kernel)
载入到内存中,当主内核发生 panic 时主动启动该内核,然后从原先内核剩余内存中抽取重要信息,保存为 vmcore dump 文件。
2.2 crashkernel 参数是什么?

crashkernel 是在内核启动参数中指定的内存块,用于载入备用内核,避免被主内核占用。如:
  1. crashkernel=512M
复制代码
表示为备用内核预留 512MB 内存地点空间。
三、工作原理

3.1 总体流程图


  • 主内核启动
  • 根据 crashkernel=512M

    在 bootloader (u-boot/grub) 时期预留内存
  • 主内核运行 kexec -p 载入备用内核
  • 主内核发生 panic,启动 kdump kernel
  • kdump kernel 通过 /proc/vmcore 读取主内核内存 dump
  • 存储成 /var/crash/日期/vmcore
3.2 kexec 的角色

kexec 是 Linux 内核中的系统转换进程接口,用于在环境不重启情况下加载新内核,它支持两种模式:

  • 正常模式: kexec -l 加载新内核、kexec -e 执行
  • panic 模式: kexec -p 加载 crash kernel
四、实操步骤

4.1 启用 crashkernel 参数


  • 修改 bootargs,添加
  1. crashkernel=512M
复制代码

  • 重启系统,确认:
  1. cat /proc/iomem | grep -i crash
复制代码
应有雷同输出:
  1. 88000000-8fffffff : Crash kernel
复制代码
4.2 设置 kdump kernel

4.2.1 构建 initramfs 版本

Yocto/切换 initramfs 完全自启动的 kernel:
  1. bitbake -c populate_initramfs kernel
复制代码
会生成
  1. /tmp/deploy/images/<machine>/Image-initramfs-<machine>.bin
复制代码
4.2.2 载入 crash kernel
  1. kexec -p /boot/Image-initramfs --append="root=/dev/mmcblk2p2 maxcpus=1 irqpoll nousb console=ttymxc1,115200"
复制代码
4.2.3 查抄是否载入
  1. cat /sys/kernel/kexec_crash_loaded
复制代码
输出 1 表示乐成
4.3 启动 crash kernel 测试

4.3.1 切换到 crash kernel
  1. echo c > /proc/sysrq-trigger
复制代码
4.3.2 重点:设置内核主动 panic 后重启
  1. echo 10 > /proc/sys/kernel/panic
复制代码
4.3.3 输出观察
  1. Starting crashdump kernel...
  2. Bye!
复制代码
4.4 删除后旧 dump
  1. mkdir -p /var/crash
  2. makedumpfile /proc/vmcore /var/crash/vmcore --dump-dmesg
复制代码
五、常见问题

5.1 kexec: Can’t open (/proc/kcore)


  • 这是 Warning,如果 kexec -p 乐成,不影响使用
5.2 crash kernel 启动后卡死


  • initramfs 未启动或 init 文件不存在
  • 确保 /init 可执行,且 busybox 包含基本下令
5.3 没有 /proc/vmcore


  • 不是用 initramfs 启动,或内核未启动 /proc/vmcore 设置
六、经典设置示例

Yocto kernel 展示
  1. KERNEL_FEATURES:append = " features/kdump/kdump.scc"
复制代码
initramfs kernel 本身启动
  1. IMAGE_FSTYPES = "cpio.gz"
  2. INITRAMFS_IMAGE = "kdump-initramfs"
复制代码
七、结论

Kdump 是 Linux 内核系统常见敏感地段的重要分析工具,选择适合的 initramfs 和 crash kernel 就能在系统瓦解时提供重要和时效的调试信息,展示了 Linux 内核功能与系统办法的气力。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-25 07:43 , Processed in 0.079916 second(s), 31 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表