关于linux,kdump的学习总结

本文介绍了Linux中的kdump技术,它利用kexec加载捕获内核来处理系统崩溃,保留生产内核的部分内存用于转储。在系统奔溃时,捕获内核启动,与ramdisk创建小环境,收集并存储生产内核的内存信息。内存转储可通过/dev/oldmem或/proc/vmcore进行,ELF头提供内存访问线索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础概念

kdump中的重要部分:kexec,由两块构成:其一是内核空间的系统调用kexec_load,作用是在生产内核production kernel 启动时将捕获内核catpure kernel加载到指定地址;其二是用户空间的工具kexec-tools,将捕获内核的地址传给生产内核,从而在系统奔溃的时候能够找到捕获内核的地址并运行。

换句话说,kexec的两部分,第一是当生产内核启动时,会给捕获内核分配一部分地址空间;第二是在系统崩溃时,会将捕获内核的地址传给生产内核并顺利运行。

kdump作为可靠的内核转存机制,正是基于kexec设计的内核奔溃转储机制。系统奔溃时,kdump使用kexec启动捕获内核,目的是用很小的内存启动去捕获转储镜像。内核崩溃转储的本质:kdump通过kexec启动捕获内核,不需要通过BIOS就可以完成启动,因此第一内核的部分内存得以保留,并给捕获内核使用。


捕获内核会在生产内核系统崩溃时启动,与ramdisk组建一个小环境,收集和转存生产内核的内存。

在内核崩溃前,会将所有关于核心映像的必要信息都用ELF格式编码并存储在保留的内存区域,ELF 头所在的物理地址被作为命令行参数(fcorehdr=)传递给新启动的转储内核。

在i386体系结构上,启动时需要使用物理内存开始的640k,且不管操作系统内核转载在何处。640k区域在重新启动捕获内核时由kexec备份。


在系统崩溃时,捕获内核是如何访问奔溃系统的内存呢?

方法一:/dev/oldmem接口,一个“捕捉”设备可以使用“raw”(裸的)方式 “读”这个设备文件并写出到文件。这是关于内存的 “裸”的数据转储,同时这些分析 / 捕捉工具应该足够“智能”从而可以知道从哪里可以得到正确的信息。ELF 文件头(通过命令行参数传递过来的 elfcorehdr)可能会有帮助。

方法二:/proc/vmcore,将转储输出为一个ELF格式文件,并可用cp,scp将文件拷贝出来读取内容,同时允许gdb在内容上做有限的调试。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值