当前位置: 首页 > ds >正文

Kdump 介绍与使用方式

一、Kdump 简介

Kdump 是 Linux 系统中的一种内核崩溃转储机制(Kernel Crash Dump)。当内核发生 panic 或严重故障时,Kdump 会触发并使用 第二内核(crash kernel) 启动系统,并将主内核的内存快照(vmcore)转储至硬盘、网络或远程服务器,以供后续分析。


二、Kdump 工作原理

Kdump 依赖于 kexec 技术:

  1. 系统启动时,预留一部分内存加载备用的 crash kernel(第二内核)

  2. 如果主内核发生崩溃(如 Oops/Panic),系统通过 kexec -p 启动第二内核

  3. 第二内核运行后,通过 kdump-tools 将主内核的内存内容保存成 vmcore

  4. vmcore 可供后续使用 crash 工具进行分析


三、常见术语解释

名称说明
Crash kernel第二内核,专用于在主系统崩溃后收集数据
vmcore主内核崩溃时的内存快照,通常保存在 /var/crash
kexec一种无需重启硬件就切换内核的机制
crash用于分析 vmcore 文件的命令行工具
Serial console串口输出设备,常用于输出崩溃日志

四、Kdump 安装与配置

1. 安装相关工具

Debian/Ubuntu:

sudo apt install kdump-tools 

2. 编辑 grub 启动项

修改 /etc/default/grub

GRUB_CMDLINE_LINUX="crashkernel=8G-:2048M console=tty0 console=ttyS0,115200"

 内核通过 crashkernel= 参数预留内存给 crash kernel,例如:

crashkernel=8G-:2048M

表示:

  • 当系统内存大于等于 8GB 时,预留 2048MB 内存给 crash kernel

  • 小于 8GB 时不分配

格式语法:

crashkernel=<min-mem>:<size>[,...]

串口部分 console=ttyS0,115200 可选,用于输出日志到串口。

更新 grub:

sudo update-grub

3. 启用 kdump

编辑配置文件 /etc/default/kdump-tools(Ubuntu/Debian):

USE_KDUMP=1
KDUMP_COREDIR="/var/crash"
KDUMP_CMDLINE_APPEND="irqpoll maxcpus=1 reset_devices console=ttyS0,115200"

加载 crash kernel:

sudo kdump-config load

验证状态:

sudo kdump-config show
# current state: ready to kdump

五、测试与验证

1. 模拟内核崩溃(小心操作)

确保SysRQ启用

sudo sysctl -w kernel.sysrq=1

以下命令会触发 panic:

echo c | sudo tee /proc/sysrq-trigger

如果配置正确:

  • 系统会重新启动到 crash kernel

  • crash kernel 会保存主内核的 vmcore 到 /var/crash/<time>/vmcore


2. 分析 vmcore(可选)

安装 crash 工具:

sudo apt install crash

分析:

sudo crash /usr/lib/debug/boot/vmlinux-<version> /var/crash/<time>/vmcore

六、常见问题排查

问题原因解决方案
vmcore 未生成crashkernel 分配内存太小增加内存,如 crashkernel=8G-:2048M
vmcore未生成第二内核缺少驱动

注释/etc/default/kdump-tools的KDUMP_KERNEL、KDUMP_INITRD使用当前的内核和initrd

系统未进入 crash kernelkexec -p 未加载成功检查 kdump-config show 状态
日志缺失串口未输出日志加上 console=ttyS0,115200
http://www.xdnf.cn/news/10969.html

相关文章:

  • PyTorch 入门学习笔记(数字识别实战)
  • SoloSpeech - 高质量语音处理模型,一键提取指定说话人音频并提升提取音频清晰度和质量 本地一键整合包下载
  • java-springboot文件上传校验之只允许上传excel文件,且检查不能是脚本或者有害文件或可行性文件
  • 【氮化镓】钝化层对p-GaN HEMT阈值电压的影响
  • DrissionPage 异常处理实战指南:构建稳健的网页自动化防线
  • 第二章 2.TCP IP Protocol Suite(CCNA)
  • Flask 应用的生产环境部署指南
  • Java基础 Day28 完结篇
  • Python Day42
  • 定时通知群内值班人功能
  • POJO,DTO,VO和Model
  • 深入解读 MCP(Model Context Protocol):大模型时代的“操作系统协议”
  • js-day7
  • 快速了解GO+ElasticSearch
  • Impromptu VLA:用于驾驶视觉-语言-动作模型的开放权重和开放数据
  • Mac 芯片系列 安装cocoapod 教程
  • 机器学习——SVM
  • 前端基础之《Vue(18)—路由知识点》
  • 【操作系统原理08】文件管理
  • git管理github上的repository
  • 深入解析ReactJS中JSX的底层工作原理
  • OpenCV CUDA模块特征检测------角点检测的接口createMinEigenValCorner()
  • React 项目初始化与搭建指南
  • 算法/机理模型演示平台搭建(二)——算法接口部署(FastApi)
  • 算法训练第七天
  • Web后端快速入门(Maven)
  • TDengine 的 AI 应用实战——运维异常检测
  • Ubuntu22.04安装MinkowskiEngine
  • 灵活运用 NextJS 服务端组件与客户端组件
  • vue-14(使用 ‘router.push‘ 和 ‘router.replace‘ 进行编程导航)