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

article/2025/7/14 20:58:09

完整解析 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 是在内核启动参数中指定的内存块,用于载入备用内核,避免被主内核占用。如:

crashkernel=512M

表示为备用内核预留 512MB 内存地址空间。

三、工作原理

3.1 总体流程图

  1. 主内核启动
  2. 根据 crashkernel=512M 在 bootloader (u-boot/grub) 时期预留内存
  3. 主内核运行 kexec -p 载入备用内核
  4. 主内核发生 panic,启动 kdump kernel
  5. kdump kernel 通过 /proc/vmcore 读取主内核内存 dump
  6. 存储成 /var/crash/日期/vmcore

3.2 kexec 的角色

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

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

四、实操步骤

4.1 启用 crashkernel 参数

  1. 修改 bootargs,添加
crashkernel=512M
  1. 重启系统,确认:
cat /proc/iomem | grep -i crash

应有类似输出:

88000000-8fffffff : Crash kernel

4.2 配置 kdump kernel

4.2.1 构建 initramfs 版本

Yocto/切换 initramfs 完全自启动的 kernel:

bitbake -c populate_initramfs kernel

会生成

/tmp/deploy/images/<machine>/Image-initramfs-<machine>.bin
4.2.2 载入 crash kernel
kexec -p /boot/Image-initramfs --append="root=/dev/mmcblk2p2 maxcpus=1 irqpoll nousb console=ttymxc1,115200"
4.2.3 检查是否载入
cat /sys/kernel/kexec_crash_loaded

输出 1 表示成功

4.3 启动 crash kernel 测试

4.3.1 切换到 crash kernel
echo c > /proc/sysrq-trigger
4.3.2 重点:设置内核自动 panic 后重启
echo 10 > /proc/sys/kernel/panic
4.3.3 输出观察
Starting crashdump kernel...
Bye!

4.4 删除后旧 dump

mkdir -p /var/crash
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 展示

KERNEL_FEATURES:append = " features/kdump/kdump.scc"

initramfs kernel 本身启动

IMAGE_FSTYPES = "cpio.gz"
INITRAMFS_IMAGE = "kdump-initramfs"

七、结论

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


http://www.hkcw.cn/article/PsvpWMdwOf.shtml

相关文章

day 25 异常处理

异常处理机制 Python 的异常处理机制赋予程序强大的容错能力。当程序在运行时遇到意外情况&#xff08;即异常&#xff09;&#xff0c;它不会直接崩溃&#xff0c;而是可以被设计成优雅地处理错误&#xff0c;或继续执行后续逻辑&#xff0c;或按可控方式结束。 在异常发生时…

智能流体仿真软件AICFD 2025R1新版本功能介绍

智能流体仿真软件AICFD是天洑软件自主研发的一款通用型智能热流体仿真工具&#xff0c;其核心代码拥有完全自主知识产权。该软件在业界率先引入人工智能技术&#xff0c;高效解决工业级流动、传热、多相流、噪声及燃烧等复杂仿真问题。 图1 AICFD软件界面 一、版本更新介绍 A…

数据结构之队列:原理与应用

一、基本原理 队列是一种特殊的线性表队列是一个有序表(可以用数组或链表实现)遵循“先来先服务”的原则&#xff0c;它只允许在表的前端&#xff08;队头&#xff09;进行删除操作&#xff0c;在表的后端&#xff08;队尾&#xff09;进行插入操作 (一) 核心操作 入队&…

windows下安装docker、dify、ollama

一、docker安装 镜像源配置 {"builder": {"gc": {"defaultKeepStorage": "10GB","enabled": true}},"experimental": true,"registry-mirrors": ["https://docker.m.daocloud.io","ht…

mysql隐式转换会造成索引失效的原因

现在我们看一个例子 比如现在我有一张表叫做test 涉及的字段有id code name age address id 是int数值类型 code 是varchar字符串类型 name 是varchar字符串类型 age是int 数值类型 address是varchar 字符串类型 创建语句&#xff1a; CREATE TABLE test ( id INT …

鲲鹏Arm+麒麟V10,国产化信创 K8s 离线部署保姆级教程

Rainbond V6 国产化部署教程&#xff0c;针对鲲鹏 CPU 麒麟 V10 的离线环境&#xff0c;手把手教你从环境准备到应用上线&#xff0c;所有依赖包提前打包好&#xff0c;步骤写成傻瓜式操作指南。别说技术团队了&#xff0c;照着文档一步步来&#xff0c;让你领导来都能独立完成…

Python训练营---Day40

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作业&#xff1a;仔细学习下测试和训练代码…

LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 下

前五道题&#xff1a;LeetCode 高频 SQL 50 题&#xff08;基础版&#xff09;之 【连接】部分 上 题目&#xff1a;577. 员工奖金 题解&#xff1a; select r.name,b.bonus from Employee r left join Bonus b on r.empIdb.empId where b.bonus <1000 or b.bonus is nul…

C++八股 —— 手撕线程池

文章目录 一、背景二、线程池实现1. 任务队列和工作线程2. 构造和析构函数3. 添加任务函数4. 完整代码 三、阻塞队列实现1. 基础队列2. 升级版队列 四、测试代码五、相关问题六、其他实现方式 来自&#xff1a;华为C一面&#xff1a;手撕线程池_哔哩哔哩_bilibili 华为海思&am…

半导体厂房设计建造流程、方案和技术要点-江苏泊苏系统集成有限公司

半导体厂房设计建造流程、方案和技术要点-江苏泊苏系统集成有限公司 半导体厂房的设计建造是一项高度复杂、专业性极强的系统工程&#xff0c;涉及洁净室、微振动控制、电磁屏蔽、特殊气体/化学品管理等关键技术。 一、设计建造流程&#xff1a; 1.需求定义与可行性分析 &a…

gitLab 切换中文模式

点击【头像】--选择settings 选择【language】,选择中文&#xff0c;点击【保存】即可。

Redis 常用数据结构详解与实战应用

在当今互联网高速发展的时代&#xff0c;数据的存储和处理效率至关重要。Redis 作为一款高性能的内存数据库&#xff0c;凭借其丰富的数据结构和出色的性能&#xff0c;成为了众多开发者的首选。本文将深入探讨 Redis 常用的数据结构&#xff0c;并结合实际应用场景&#xff0c…

leetcode2221. 数组的三角和-medium

1 题目&#xff1a;数组的三角和 官方标定难度&#xff1a;中 给你一个下标从 0 开始的整数数组 nums &#xff0c;其中 nums[i] 是 0 到 9 之间&#xff08;两者都包含&#xff09;的一个数字。 nums 的 三角和 是执行以下操作以后最后剩下元素的值&#xff1a; nums 初始…

PPIO × AstrBot:多平台接入聊天机器人,开启高效协同 | 教程

在消息平台接入专属聊天机器人&#xff0c;能快速生成精准答案&#xff0c;与项目管理、CRM等系统集成后&#xff0c;机器人还能根据任务进展自动建群、推送进度提醒&#xff0c;并精准相关人员&#xff0c;实现信息的高效传递。 AstrBot 是一个多平台聊天机器人及开发框架&…

江科大SPI串行外设接口hal库实现

hal库相关函数 初始化结构体 typedef struct {uint32_t Mode; /*SPI模式*/uint32_t Direction; /*SPI方向*/uint32_t DataSize; /*数据大小*/uint32_t CLKPolarity; /*时钟默认极性控制CPOL*/uint32_t CLKPhase; /*…

【笔记】Suna 部署之获取 OpenAI API key

#工作记录 API Platform | OpenAI 一、注册或登录 OpenAI 账号 访问 OpenAI 官方网站&#xff08;platform.openai.com &#xff09;。若已有 ChatGPT 账号&#xff0c;可直接使用该账号登录。若无账号&#xff0c;点击注册&#xff08;Sign Up&#xff09;&#xff0c;填写有…

Java八股文——Java基础「概念篇」

参考小林Coding和Java Guide 说一下Java的特点 平台无关性&#xff1a;“Write Once, Run Anywhere”其最大的特点之一。Java编译器将源代码编译成字节码&#xff0c;该字节码可以在任何安装了JVM的系统上运行。面向对象&#xff1a;Java是一门严格的面向对象编程语言&#xf…

NHANES指标推荐:CQI

文章题目&#xff1a;The impact of carbohydrate quality index on menopausal symptoms and quality of life in postmenopausal women 中文标题&#xff1a;碳水化合物质量指数对绝经后妇女更年期症状和生活质量的影响 发表杂志&#xff1a;BMC Womens Health 影响因子&…

91.评论日记

2025年5月30日20:27:06 AI画减速器图纸&#xff1f; 呜呜为什么读到机械博士毕业了才有啊 | 新迪数字2025新品发布会 | AI工业软件 | 三维CAD | 国产自主_哔哩哔哩_bilibili

循环神经网络(RNN)全面教程:从原理到实践

循环神经网络(RNN)全面教程&#xff1a;从原理到实践 引言 循环神经网络(Recurrent Neural Network, RNN)是处理序列数据的经典神经网络架构&#xff0c;在自然语言处理、语音识别、时间序列预测等领域有着广泛应用。本文将系统介绍RNN的核心概念、常见变体、实现方法以及实际…