Linux 内核 panic 分析实战:vmcore 文件结构与 crash 工具详解(含完整案例)

Linux内核宕机别慌!手把手教你用crash命令‘解剖’vmcore文件(附CentOS 7实战) 本文详细介绍了如何使用crash工具分析Linux内核宕机时生成的vmcore文件,帮助运维人员快速定位崩溃原因。通过CentOS 7实战示例,涵盖Kdump配置、crash命令使用及高级分析技巧,适用于硬件异常、内核模块缺陷等常见崩溃场景。 阅读详情
AI摘要

本文围绕Linux内核panic分析展开,介绍了vmcore文件的作用、生成及保存方法,阐述了crash工具的安装与使用。通过i.MX8MP平台的实战案例,展示了如何利用crash工具排查问题。还简述了vmcore文件结构,最后强调其对定位系统异常的重要性。


Linux 内核 panic 分析实战:vmcore 文件结构与 crash 工具详解(含完整案例)

视频教程请关注 B 站:“嵌入式 Jerry”
支持作者新书,点击京东购买《Yocto项目实战教程:高效定制嵌入式Linux系统》


一、引言:为什么需要 vmcore 文件?

在嵌入式 Linux 系统中,内核崩溃(kernel panic)是影响系统稳定性的重要问题。为快速定位和复盘 panic 的根因,Linux 提供了 kdump 机制。它在内核崩溃时触发一个备用内核(crash kernel)来收集内存转储(vmcore 文件),并借助 crash 工具进行离线调试分析。


二、vmcore 文件是什么?

/proc/vmcore 是由 kdump 机制生成的内核转储镜像文件,包含崩溃时主内核的内存快照。它相当于“Linux 的内核黑匣子”,可以被 crash 工具解析,用于:

  • 查看 panic 栈回溯(backtrace)
  • 分析内存使用情况
  • 查看 task 列表、模块加载、锁状态等

三、环境准备

1. 启用 crashkernel 参数

修改 U-Boot 启动命令行或内核参数:

console=ttymxc1,115200 root=/dev/mmcblk2p2 rootwait rw crashkernel=512M

2. 构建备用内核

构建 Image + initramfs 并加载:

kexec -p /boot/Image \
  --initrd=/boot/initramfs.cpio.gz \
  --command-line="root=/dev/mmcblk2p2 maxcpus=1 irqpoll nousb console=ttymxc1,115200"

3. 触发 crash:

echo c > /proc/sysrq-trigger

系统重启进入备用内核并生成 /proc/vmcore。


四、保存 vmcore 文件

方案 1:自动挂载保存(推荐)

配置 initramfs 中的 kdump.sh 脚本将 /proc/vmcore 保存至 /mnt/vmcore:

mount /dev/mmcblk2p3 /mnt
cp /proc/vmcore /mnt/vmcore-$(date +%Y%m%d%H%M%S)

方案 2:手动保存

mount /dev/mmcblk2p3 /mnt
cp /proc/vmcore /mnt/vmcore

五、使用 crash 工具分析 vmcore

安装 crash 工具

在 PC 或 Yocto 中 host 编译 crash 工具:

bitbake crash

使用示例:

crash vmlinux vmcore

其中 vmlinux 是未压缩调试版本的内核镜像。


六、实战案例分析:一次 i.MX8MP 平台 panic 排查

1. panic 场景复现

串口输出:

sysrq: Trigger a crash
Kernel panic - not syncing: sysrq triggered crash

说明已通过 sysrq 成功触发 kdump。

2. crash 工具分析命令

crash vmlinux vmcore

输出:

      KERNEL: vmlinux
    DUMPFILE: vmcore
        ...
        PANIC: sysrq triggered crash
      PID: 662
    COMMAND: "sh"

3. 查看 backtrace:

bt

可见触发栈:

sysrq_handle_crash
__handle_sysrq
write_sysrq_trigger

4. 查看任务列表

ps

确认系统崩溃时有哪些 task 正在运行,分析资源状态。


七、vmcore 文件结构简述(高级)

vmcore 基于 ELF 格式,包含多个段:

  • PT_LOAD 段:主内核物理内存
  • NOTE 段:包含 CPU、任务、模块、寄存器等信息
  • ELF notes 格式嵌套多个结构体,如 PRSTATUS、VMCOREINFO 等

用 readelf 观察:

readelf -a vmcore | less

八、常见问题排查

问题原因解决方式
vmcore 不存在crash kernel 没加载检查 kexec -p
生成后系统重启太快initramfs 中没保存脚本添加 kdump.sh
crash 加载失败vmlinux 不匹配用同一内核构建调试版本

vmcore

九、小结

vmcore 是排查 panic 的关键数据来源,配合 crash 工具可精确定位系统异常。推荐嵌入式平台统一部署 kdump 和备份机制,提升系统可靠性。


十、附录:相关命令速查

# 触发 crash
echo c > /proc/sysrq-trigger

# 加载 crash kernel
kexec -p Image --initrd initramfs.cpio.gz ...

# 保存 vmcore
cp /proc/vmcore /mnt/vmcore

# crash 分析
crash vmlinux vmcore

如需进一步内容讲解与实践操作,请关注视频教程,或阅读作者新书:

支持作者新书,点击京东购买《Yocto项目实战教程:高效定制嵌入式Linux系统》

视频教程请关注 B 站:“嵌入式 Jerry”


linux crash内核故障分析工具 kdump一般与crash工具联合使用,以便在故障发生的时候,进行问题追踪 配置kdump: yum install kexec-tools 修改grub: GRUB_CMDLINE_LINUX 中添加crashkernel=auto #vim /etc/default/grub GRUB_CMDLINE_LINUX="crashkernel=auto console=ttyS0 conso... 阅读详情

相关推荐

从宕机到洞察:掌握Linux内核调试与Crash工具实战分析

在Linux系统运维与开发中,系统稳定性是核心诉求。当发生内核崩溃(Kernel Crash)时,常规的日志和用户态coredump往往失效,导致根因定位困难。其原理在于内核崩溃意味着系统控制权丢失,无法记录现场。为此,Linux提供了内核崩溃转储机制,通过Kdump在系统崩溃瞬间捕获完整物理内存的快照(vmcore),再使用专门的Crash工具进行离线分析,这构成了事后调试(Post-mortem Analysis)的技术基础。这项技术的核心价值在于能将黑盒般的系统宕机转化为可追溯、可分析的现场,实现从故

weixin_33841722的博客 450

从内核崩溃到精准调试:手把手教你用crash工具分析kdump生成的vmcore文件

本文详细介绍了如何使用crash工具分析kdump生成的vmcore文件,从调试环境构建到高级调试策略,包括死锁检测、内存泄漏追踪和硬件错误诊断。通过实战案例和常用命令解析,帮助系统工程师快速定位内核崩溃原因,提升调试效率。

weixin_29271263的博客 187

linux 使用kdump和crash工具调试内核

发生崩溃时,create_oops函数栈空间的FP放在 ffff80001f51f670 处,那么LR在其高8字节的地址上,因此LR放在ffff80001f51f678处。struct 用来显示内核中数据结构的定义或者值 struct vm_area_struct。由于LR存放了子函数返回的下一条指令,再减去4字节,就是其父函数调用该函数的PC值。找到create_oops的父函数 _MODULE_INIT_START_oops。x0是参数,参数是vm_area_struct,所以要查看其结构体的偏移。

5132

内核vmcore文件分析方法

linux内核在运行过程中,总会由于硬件异常,驱动异常或者用户态程序等等原因导致coredump,从而转储vmcore文件。而coredump发生后,我们如何去分析coredump愿原因,成为了维护内核工作的重点,那么我们怎么去分析coredump呢,接下来就让我们一起来看看。

tombaby_come的博客 4250

ARM64 Kernel Panic 深度分析:从 vmcore 到 crash 工具实战

Kernel Panic 是 Linux 内核在检测到无法恢复的致命错误时主动终止系统的保护机制,常见于非法内存访问、关键数据结构破坏等场景。其核心价值在于通过保留崩溃现场(vmcore)并利用 crash 工具进行事后分析,精准定位内核缺陷。在 ARM64 架构下,结合 kdump 捕获内存转储、匹配 vmlinux 调试符号,可深入解析调用栈与寄存器状态,最终定位到具体代码行。该技术广泛应用于服务器稳定性运维、嵌入式 Linux 开发及国产化平台适配,是内核崩溃排查的关键手段。

weixin_29185167的博客 218

分析kdump(vmcore)

通过虚拟机装centos6.5 下载镜像https://vault.centos.org/6.5/isos/x86_64/CentOS-6.5-x86_64-bin-DVD1.iso 安装完虚拟机之后,更新yum报错。启动失败,由于调试机器的内核版本与产生coredump的机器的内核版本不一致,导致crash启动失败,根据vmcore-dmesg.txt文件可知内核版本2.6.32-431.el6.x86_64,根据。解决方案更新/etc/yum.repos.d/CentOS-Base.repo内容。...

thinker 1618

crash工具分析Kdump下vmcore文件常用命令总结(三)(实例易懂)

1、Kdump调试机理总结(一)2、Kdump配置及使用详细总结(二)系统产生异常时,触发Kdump机制,启动捕获内核,用以对生产内核下的内存进行收集和转存。Kdump用于对内存镜像的转储,它不但可以转储内存镜像到本地硬盘,还可以将内存镜像通过NFS,SSH等协议转储到不同机器的设备上。本文是将生产内核的内存数据转储在/var/crash目录下,下面开始对其进行分析。1、明白内核崩溃的大致原因;2、对内核崩溃的原因做更细致的分析;crash是一个被广泛应用的内核奔溃转储文件分析工具。

Luckiers的博客 1万+

深信服桌面云实战:从零部署到高效运维的配置全景指南

本文详细介绍了深信服桌面云从零部署到高效运维的全流程配置指南,涵盖硬件规划、平台部署、虚拟桌面发布、终端管理及性能优化等关键环节。特别强调了双万兆网络架构、分布式存储配置和智能调度功能的应用,帮助用户实现高性能、高可用的虚拟桌面环境。

weixin_28568819的博客 399

crash分析linux内核崩溃转储文件vmcore

文章目录一、调试环境准备二、使用crash分析vmcore1、bt命令2、log命令3、dis命令4、mod命令5、sym命令6、ps命令7、files命令8、vm命令9、task命令10、kmem命令11、其它命令三、写在最后 我们在Kdump-内核崩溃转储服务中,介绍了kdump服务可以在系统崩溃时,生成崩溃转储文件vmcore,便于我们分析内核崩溃原因,那么,下面我们就来看下如何使用cras...

weixin_42915431的博客 1万+

GE Proficy Historian8.0历史数据库部署与配置全攻略

本文提供了GE Proficy Historian 8.0历史数据库的详细部署与配置指南。内容涵盖安装前的系统环境、权限与依赖检查,服务器安装的关键步骤与类型选择,采集器的安装配置与数据接入,以及客户端工具的使用与数据分析实战。旨在帮助用户规避常见陷阱,实现一次部署成功,构建稳定高效的工业数据归档平台。

silver的专栏 766

SAP中常见的Debug方式

原文链接:https://mp.weixin.qq.com/s/wT4kThFKYV0PQYhCqpXRWg 大家可以关注我个人公众号,所有分享内容,会在公众号第一时间推送,且阅读排版更好。 愿大家的学习,轻松且愉快。 如果大家觉得有用,希望转发关注,谢谢 导读 SAP系统在企业的应用时,都不会只使用标准功能。 通常情况下,基于特殊的行业需求,以及某些业务部门的管理需求等,都会额外开发出一些增强,报表,对话功能,接口等,从而保证系统的正常运转。 标准知识的逻辑,我们...

Kerwin-G的博客 1万+

内核Crash Dump分析实战:从kdump配置到vmcore回溯的完整排障链路

kdump先行配置(>64GB内存),部署在生产环境上线之前。crash后才配置kdump是来不及的。vmcore六步分析bt→log→ps→files→mod→struct。bt定位于Panic触发点,log揭示crash前的上下文,ps/files定位卡死进程的等待源。四类常见根因:空指针(驱动probe未做NULL检查)、OOM(内存泄漏或配置不足)、锁死锁(持锁期间做I/O)、硬件故障(MCE)。每类有特定的日志和调用栈特征。三层预防体系。

jiang_style的博客 4957

简要介绍 | 两阶段点云目标检测:理论与实践

目标检测是计算机视觉中的一个重要任务,其目的是识别和定位图像中的物体。对于二维图像,这已经有许多有效的方法。然而,对于三维数据(如由LiDAR生成的点云数据),目标检测则更为复杂。

NLOS的博客 1306

crash分析vmcore文件出现的linux系统异常

当Linux系统内核发生崩溃的时候,可以通过 KEXEC+KDUMP 等方式收集内核崩溃之前的内存,生成一个转储文件vmcore。内核开发者通过分析该vmcore文件就可以诊断出内核崩溃的原因,从而进行操作系统的代码改进。那么Crash就是一个被广泛使用的内核崩溃转储文件分析工具.

运维老生常谈 1680

【GlobalMapper精品教程】074:从Lidar点云创建3D地形模型

本文基于地形点云数据,基于泊松方法、贪婪三角形测量方法和阿尔法形状创建3d地形模型。

智慧空间实验室 2167

【YOLO】YOLOV5-Seg的Segment模块解析

Segment模块同时输出检测结果和分割掩模,通过轻量级分割头实现实时实例分割

浩瀚之水的专栏 598

Linux进阶篇10:Kernel Panic 深度排查:kdump 配置、vmcore 抓取与 crash 工具分析

摘要:本文深入讲解Linux内核崩溃(Kernel Panic)的排查方法,重点介绍kdump双内核机制与crash分析工具的使用。通过VirtualBox环境(Rocky Linux 9)演示完整流程:配置kdump预留内存、安全触发sysrq崩溃、捕获vmcore内存快照,并利用crash工具分析崩溃堆栈、内核日志和进程状态。特别针对虚拟机环境提供排障速查表,解决内存预留、调试符号匹配等常见问题,帮助开发者掌握生产环境内核级故障的定位能力。所有操作需在快照保护的虚拟机中完成,严禁直接在生产环境测试。

2502_93585879的博客 590

小众但实用:Python爬取钉钉/企业微信消息,实现办公数据自动化采集(完整版)

钉钉/企业微信的办公数据自动化采集,属于「小众但极度实用」的Python技巧——它不像爬虫爬取电商/网页数据那样被广泛关注,但能直接解决职场人的「刚需痛点」,把每天1-2小时的手动数据整理工作,变成「一键自动化完成」。这套技巧的核心价值,不在于「技术有多高深」,而在于「能真正落地、能真正提升效率」—— 几行简单的Python代码,就能解放双手,让你从繁琐的重复工作中解脱出来,专注于更有价值的核心工作。更重要的是:所有的技术和代码,都是基于「合规合法」的前提,守住了技术的底线,也守住了职场的原则。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1931

Linux Kdump 完全指南:基于 kexec 的内核崩溃转储方案(安装、配置与 vmcore 分析)

Kdump 是 Linux 内核基于 kexec 的崩溃转储(Crash Dumping)解决方案:当系统内核发生 panic 等致命故障时,快速启动一个专用的“捕获内核”(dump-capture kernel),把故障系统的内存映像完整保留下来并导出为 ELF 格式转储文件供事后分析。本文以 Linux 内核文档 [Documentation/admin-guide/kdump/kdump.r

gitblog_01157的博客 966

代谢组数据分析(二十四):基于tidymass包从质谱原始数据到代谢物注释结果的实践指南

本教程介绍了如何使用 R 语言中的 tidymass 包进行代谢组学数据分析。tidymass 是一个专为液相色谱-质谱(LC-MS)数据设计的开源工具,提供从数据准备到统计分析的全流程支持。教程详细讲解了数据准备、数据处理、数据探索、数据清洗、代谢物注释、统计分析及结果输出的步骤。用户需准备 MS1、MS2 数据和样本信息表,并通过 tidymass 进行峰识别、峰分组、保留时间校正等操作。数据处理后,用户可进行数据探索、清洗和代谢物注释,最终通过统计分析发现潜在的生物标志物,并输出结果。教程还提供了代码

专注生信领域 1635

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

crash工具解析_Linux内核panic问题解决利器crash介绍

做内核开发的同学经常使用crash,该工具可以理解为内核问题定位的魔术棒。功能非常强大,使用起来也非常方便。今天本号将给大家介绍一下该工具,主要包括如下内容,crash是做什么的,如何使用crash和crash常用命令的简介。什么是crashcrash是和kdump工具配套使用,用于解析kdump生成的vmcore文件。大家都知道Windows操作系统有时候会蓝屏,而Linux系统也会出现挂掉的情...

weixin_39525007的博客 4387

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

使用crash解析vmcore(fulldump)文件,基于qemu,arm64,linux6.6

这篇文章仅仅是相当远搭建了一个fulldump的环境,也持续耗费了几周的时间,但是相信利用full dump的环境,我们在后续针对某些问题细节的分析与理解会更深刻!!!

w346665682的博客 1858

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Linux Kernel Panic 分析机制全解:一篇读懂从原理到实战

本文全面解析Linux Kernel Panic机制,从原理到实践提供系统化解决方案。首先阐释Kernel Panic本质是内核遇到致命错误时主动终止运行的保护机制,列举空指针引用、内存非法访问等典型触发场景。文章详细说明内核panic处理流程,并给出5步调试方法论:获取崩溃信息、复现步骤、使用crash工具分析、配置早期打印、启用kdump机制。针对嵌入式开发,特别介绍Yocto环境下如何配置调试支持。最后整理典型问题解答,强调搭建调试环境、掌握crash工具和熟悉常见panic场景的重要性。本文为Lin

Interview_TC的博客 3128

Linux内核崩溃分析:Crash工具从入门到实战

在Linux系统运维与内核开发中,系统崩溃(Crash)是常见且棘手的问题。不同于用户态程序调试,内核态崩溃往往导致系统完全停滞,传统调试器无法工作。为此,Linux社区发展出了专门的事后分析工具——Crash。它基于GDB引擎,但深度集成了内核数据结构知识,能够解析系统内存转储文件(vmcore),像法医一样解剖崩溃现场。通过Crash,工程师可以查看崩溃瞬间的CPU寄存器、进程堆栈、内核关键数据结构(如task_struct),精准定位空指针解引用、内存越界、死锁等问题的根源。掌握Crash工具,是运维

weixin_34279246的博客 328

3分钟定位Linux内核崩溃:kdump与vmcore分析实战指南

当服务器突然宕机显示 kernel panic 时,你是否还在为找不到有效日志而抓狂?Linux内核提供的kdump(内核崩溃转储)机制和vmcore(虚拟内存转储文件)分析工具,能在系统崩溃瞬间捕获关键内存数据,让故障排查不再盲目。本文将带你从0到1掌握这一必备技能,无需深入内核源码也能精准定位问题根源。 ## 一、kdump工作原理:崩溃前的最后防线 kdump通过在系统内存中预留一块专用...

gitblog_00899的博客 1249
上一篇: 完整解析 Linux Kdump Crash Kernel 工作原理和实操步骤
下一篇: Linux Kernel Panic 分析机制全解:一篇读懂从原理到实战
嵌入式孙老师
博客等级 码龄7年 5686粉丝 899原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值