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

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.lqws.cn/news/97849.html

相关文章:

  • Samtec技术支持 | 新型评估和开发套件
  • Agno:使用简单代码构建AI智能体
  • 百万级临床试验数据库TrialPanorama发布!AI助力新药研发与临床评价迎来新基石
  • MySQL - Windows 中 MySQL 禁用开机自启,并在需要时手动启动
  • 编译 Linux openssl
  • Asp.net core 使用EntityFrame Work
  • 一、基础环境配置
  • Walle-Web:打造轻量级高效的DevOps自动化部署平台
  • 【数据库】《DBA实战手记》- 读书笔记
  • centos中的ulimit命令
  • Python数据分析及可视化中常用的6个库及函数(一)
  • 【JAVA版】意象CRM客户关系管理系统+uniapp全开源
  • python调用硅基流动的视觉语言模型
  • Python基于SVM技术的手写数字识别问题项目实战
  • Vue3 + Vite:我的 Qiankun 微前端主子应用实践指南
  • 研发型企业如何面对源代码保密问题
  • one-hot编码VS对象嵌入表示
  • Java详解LeetCode 热题 100(25):LeetCode 141. 环形链表(Linked List Cycle)详解
  • 架构设计的目标:高内聚、低耦合的本质
  • 【文献精读】Explaining grokking through circuit efficiency
  • Unity 性能优化终极指南 — GameObject 篇
  • SIFT算法详细原理与应用
  • WINDOWS 下查找指定端口的进程并解除端口占用
  • 实践深度学习:构建一个简单的图像分类器
  • LVS负载均衡
  • 【小红书】API接口,获取笔记核心数据
  • 《汇编语言》第14章 端口
  • 集成学习之Bagging,Boosting,随机森林
  • H.264编码
  • CSS基础2