kdump是Linux中的一个内核转储机制,主要用于当Linux内核发生崩溃时,将该内核相关的信息和崩溃原因通过转储的形式保留下来,在debian系统中,相关信息会存储在dump文件中,在OpenEuler和CentOS等系统中则是vmcore文件中,以供后期开发人员通过crash工具进行相关的分析。
在kdump中,构成转储运行环境大致由三个部分构成,即生产内核、捕捉内核和ramdisk,其相关概念如下:
- 生产内核(production kernel)——指当前Linux系统运行的内核;
- 捕捉内核(crash kernel)——当生产内核发生崩溃时,用于转储生产内核各类信息的内核;
- ramdisk——部分运存(RAM)模拟出来的虚拟磁盘,因为这个虚拟磁盘是通过RAM模拟出来的,而非物理磁盘,因此其读写速度非常快。
基于这三个部分,转储的过程可以简单描述为——当生产内核发生崩溃时,捕捉内核会随之启动,同时RAM中的一部分会被模拟为虚拟磁盘ramdisk,从而构成一个简单的运行环境,因ramdisk读写速度很快的特点,生产内核在崩溃时的相关信息会通过捕捉内核快速写入ramdisk中,然后由ramdisk将转储信息生成为ELF格式的文件,并输出到物理磁盘中,文件生成的过程全部结束后,系统将进行重启。
- kexec_load——在生产内核正常启动时,将捕捉内核加载到指定的地址;
- kexec_tools——将捕捉内核的地址传递给生产内核,以便生产内核崩溃时,能快速寻址到捕捉内核,实现捕捉内核的启动。
每个Linux发行版安装kdump的思路是相同的,如下:
- 安装kdump本身组件(kexec-tools、kdump-tools)、crash工具和kernel-debuginfo;
- 然后是通过修改文件中的参数来定义分配给捕捉内核的运存(RAM)大小;
- 更新grub后重启系统。
而针对于需要安装的组件,说明如下:
- kexec-tools和kdump-tools——kdump本身的组件;
- crash——用于结合vmlinux文件对转储文件(dump或vmcore)进行分析的工具;
- kernel-debuginfo——用于生成当前版本内核vmlinux文件的debug安装包;
kernel-debuginfo在各个发行版的名称不一样,部分发行版名称如下(均以amd64架构为例):
(1)确保软件下载、安全更新和系统更新的apt源是一致的(/etc/apt/sources.list)
之所以强调debian系统中需要三个源保持一致,是因为debian系统在最初的安装过程中,虽然有让用户自行选择镜像源的选项,但这个镜像源只会改变软件下载和系统更新两个源,而安全更新仍旧是设置的debian的官方源,这会导致两个问题——一是在国内网络环境里下载linux-image-amd64-dbg十分缓慢;二是debian在全球的镜像源缓存官方源存在一个时间差的问题,可能会导致从官方安全源上获取到的linux-image-amd64-dbg和镜像源更新到的Linux内核出现版本不一致的情况,从而致使crash无法通过vmlinux文件解析到dump转储文件内容。
(2)通过命令“”安装相应组件
(3)通过命令“”修改参数,设定捕捉内核的RAM大小
(4)输入“”命令,更新grub
(5)输入“”命令,重启操作系统
(6)输入“”或者“”命令,查看kdump是否成功开启
(7)通过命令“”,人为制造一个内核崩溃,此命令会触发kdump转储机制,转储完成后,操作系统会自动重启,重启完成后,/var/crash目录下会生成转储日志和转储文件
(8)通过命令“”下载debian的kernel-debuginfo工具,此命令会生成当前版本内核的vmlinux文件,用于crash工具去解析生成的dump转储文件,一般来说,debian系统在安装linux-image-amd64-dbg后,vmlinux文件会在以下类似目录:
(9)通过命令“”,利用crash工具解析dump转储文件,可看到内核崩溃时的大体信息,如果要深入进行分析,则可以利用crash工具中的命令进行查看,crash工具的命令可自行查阅
(1)OpenEuler本身已经内置并启用了kdump,因此不用单独下载,通过“”或者“”检查kdump状态即可
(2)通过命令“”修改参数,设定捕捉内核的RAM大小
(3)输入“”命令,更新grub
(4)输入“”命令,重启操作系统
(5)通过命令“”,人为制造一个内核崩溃,此命令会触发kdump转储机制,转储完成后,操作系统会自动重启,重启完成后,/var/crash目录下会生成转储日志和转储文件
(6)通过命令“”安装crash工具
(7)通过命令“” 下载OpenEuler的kernel-debuginfo工具,此命令会生成当前版本内核的vmlinux文件,用于crash工具去解析生成的vmcore转储文件,一般来说,OpenEuler系统在安装kernel-debuginfo后,vmlinux文件会在以下类似目录:
(8)通过命令“”,利用crash工具解析dump转储文件,可看到内核崩溃时的大体信息,如果要深入进行分析,则可以利用crash工具中的命令进行查看,crash工具的命令可自行查阅
下图展示的是Linux内核源码编译安装的大致过程,一般以来说,当源码编译安装成功进行到“”后,vmlinux就会编译生成至kernel编译目录下,这里的vmlinux可用于crash工具的解析:
(1)kdump的配置过程中,最费精力的一个步骤是kernel-debuginfo的安装和vmlinux文件的获取,因为每个发行版对于kernel-debuginfo的安装方式是不同的,因此需要具体查阅对应发行版的官方手册;
(2)正如3.2章节的第一个步骤那样,如果是debian系统,需要在配置前检查软件下载、系统更新和安全更新三个源是否一致,以防止vmlinux和dump转储文件不一致的情况出现;
(3)vmlinux和vmlinuz这两个文件均是Linux内核运行文件,区别在于vmlinuz是压缩之后的文件,而vmlinux没有压缩,在各个Linux发行版中,如果内核不是自行通过编译方式安装的话,vmlinux通常不会附带在系统中,需要通过安装kernel-debuginfo生成。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/10041.html