kdump调试&分析(适用于麒麟,ubuntu等OS)

发布于:2024-12-08 ⋅ 阅读:(198) ⋅ 点赞:(0)

1. kdump基本原理

1.1 内核崩溃处理机制

当 Linux 系统内核发生崩溃时,通常会触发 panic,系统停止正常运行。Kdump 在这种情况下:

  1. 使用一个备用的内核(称为 crash kernel)来启动最小化的环境。
  2. 从崩溃的主内核中复制内存内容(转储文件)。
  3. 将转储文件保存到预定义的存储位置(如本地磁盘、网络服务器等)。

1.2 Crash Kernel 的作用

Kdump 的核心是依赖 Crash Kernel,这是一段预留的内存和独立的内核,用于在主内核崩溃后接管系统。

  1. 主内核崩溃后,控制权切换到 Crash Kernel。
  2. Crash Kernel 通过访问主内核的内存(物理地址)生成转储文件。

2 Kdump 的工作流程

2.1 内存预留

在系统启动时,通过内核参数(crashkernel)为 Crash Kernel 预留一部分内存(通常是 128M 或更多)。

编辑 GRUB 配置文件,添加 crashkernel 参数预留内存:

GRUB_CMDLINE_LINUX="crashkernel=256M"

2.2 Crash Kernel 加载

系统启动时,Crash Kernel 和主内核一起加载到内存中,但 Crash Kernel处于非活动状态。

2.3 触发崩溃

  • 主内核发生崩溃(如 panic)
  • 或人为触发崩溃(通过 echo c > /proc/sysrq-trigger)

2.4 Crash Kernel 启动

系统重启到 Crash Kernel 环境。
Crash Kernel 通过访问崩溃的主内核内存区域,捕获内存内容并保存。

2.5 保存转储文件

Crash Kernel 将捕获的内存转储文件(vmcore)保存到本地磁盘、NFS、或其他预定义路径。

3. Kdump 的配置

3.1 内核支持

Kdump 的关键组件是 kexec,它允许系统在内核崩溃时直接加载并启动一个新的内核(Crash Kernel)。因此,标准内核必须启用 kexec 功能。
检查是否启用了 kexec
可以通过以下命令检查是否启用了 kexec:

$ grep CONFIG_KEXEC /boot/config-$(uname -r)

CONFIG_KEXEC=y

如果没有启用,您需要重新编译内核并启用该功能,或者安装一个启用了该功能的预编译内核。
检查是否支持 crashkernel
通过检查内核配置文件(如 /boot/config-$(uname -r))确认是否启用支持:

$ grep CONFIG_CRASH_KEXEC /boot/config-$(uname -r)

CONFIG_CRASH_KEXEC=y
## 或者
CONFIG_CRASH_DUMP=y
CONFIG_CRASH_CORE

网站公告

今日签到

点亮在社区的每一天
去签到