如何使用crash工具分析Linux内核崩溃转储文件

如何使用crash工具分析Linux内核崩溃转储文件,第1张

什么是 crash

如前文所述,当 linux 系统内核发生崩溃的时候,可以通过 kdump 等方式收集内核崩溃之前的内存,生成一个转储文件 vmcore。内核开发者通过分析该 vmcore 文件就可以诊断出内核崩溃的原因,从而进行 *** 作系统的代码改进。那么 crash 就是一个被广泛使用的内核崩溃转储文件分析工具,掌握 crash 的使用技巧,对于定位问题有着十分重要的作用。

使用 crash 的先决条件

由于 crash 用于调试内核崩溃的转储文件,因此使用 crash 需要依赖如下条件:

1. kernel 映像文件 vmlinux 在编译的时候必须指定了 -g 参数,即带有调试信息。

2. 需要有一个内存崩溃转储文件(例如 vmcore),或者可以通过 /dev/mem 或 /dev/crash 访问的实时系统内存。如果 crash 命令行没有指定转储文件,则 crash 默认使用实时系统内存,这时需要 root 权限。

3. crash 支持的平台处理器包括:x86, x86_64, ia64, ppc64, arm, s390, s390x ( 也有部分 crash 版本支持 Alpha 和 32-bit PowerPC,但是对于这两种平台的支持不保证长期维护 )。

4. crash 支持 2.2.5-15(含)以后的 Linux 内核版本。随着 Linux 内核的更新,crash 也在不断升级以适应新的内核。

crash 安装指南

要想使用 crash 调试内核转储文件,需要安装 crash 工具和内核调试信息包。不同的发行版安装包名称略有差异,这里仅列出 RHEL 和 SLES 发行版对应的安装包名称如下:

表 1. crash 工具和内核调试包

系统版本

crash 工具名称

内核调试信息包

RHEL6.2crashkernel-debuginfo-common

kernel-debuginfo

SLES11SP2crashkernel-default-debuginfo

kernel-ppc64-debuginfo

以 RHEL 为例,安装 crash 及内核调试信息包的步骤如下:

rpm -ivh crash-5.1.8-1.el6.ppc64.rpm

rpm -ivh kernel-debuginfo-common-ppc64-2.6.32-220.el6.ppc64.rpm

rpm -ivh kernel-debuginfo-2.6.32-220.el6.ppc64.rpm

启动 crash

启动参数说明

使用 crash 调试转储文件,需要在命令行输入两个参数:debug kernel 和 dump file,其中 dump file 是内核转储文件的名称,debug kernel 是由内核调试信息包安装的,不同的发行版名称略有不同,以 RHEL 和 SLES 为例:

RHEL6.2:/usr/lib/debug/lib/modules/2.6.32-220.el6.ppc64/vmlinux

SLES11SP2:/usr/lib/debug/boot/vmlinux-3.0.13-0.27-ppc64.debug

使用 crash -h 或 man crash 可以查看 crash 支持的一系列选项,这里仅以常用的选项为例说明如下:

-h:打印帮助信息

-d:设置调试级别

-S:使用 /boot/System.map 作为默认的映射文件

-s:不显示版本、初始调试信息等,直接进入命令行

-i file:启动之后自动运行 file 中的命令,再接受用户输入

Bacula是一套计算机程序,允许系统管理员来管理备份,恢复和核查在网络上的计算机数据。 它可以备份到不同类型的媒体,包括磁带和磁盘。在技术方面,它是一个网络客户机/服务器的备份程序。相对易于使用和高效,同时提供许多先进的存储管理功 能,可以很容易地找到和恢复丢失或损坏的文件。由于它采用模块化设计,具有很好的伸缩性。

同样使用linux下的identify命令:

  identify ABCD.png

输出: ABCD.png PNG 339x362 339x362+0+0 8-bit DirectClass 76.2kb

说明:图片ABCD.png的格式为PNG,宽、高分别为339和362,位深度8-bit,大小76.2kb;下文主要涉及宽、高的信息。

设置高度限制为60, 宽高比例不变,使用convert的 -resize 参数

convert ABCD.png -resize x60 ABCD_t1.png

查看压缩后的图片:

 ABCD_t1.png PNG 56x60 56x60+0+0 8-bit DirectClass 4.7kb

借助convert的 -crop 参数

convert 输入.png  -crop  w x h + dx + dy   输出.png

其中: w为截取的宽;h为截取的高;dx、dy分别是开始截取的偏移位置,以左上角为原点

例如: convert ABCD.png -crop 300 x 200 + 10 + 10   ABCD_t2.png

可见,截图是自上而下、自左向右的;宽度(稍微截了一点)和高度(明显截短)(原图: 339x362 )均进行了截取,如下图:

(1)横向拼接

 convert  1.png   2.png  n.png +append   merge.png (支持多个)

例如:把ABCD.png 和 ABCD_t2.png拼接起来

(2)纵向拼接

convert  1.png  2.png  n.png -append   merge.jpg

把ABCD.png 和 ABCD_t3.png进行纵向拼接起来

convert ABCD.png -fill red -pointsize 20 -annotate +150+120  HELLO  text.png

在原图片上150x120位置上添加大小为20的红色文字:HELLO

可以在PNG、PDF、JPG、TIFF等众多格式见相互转换

例如: convert ABCD.png  ABCD.pdf

批量转换:for file in *.pngdo convert $file ${file%%.*}.jpgdone

[1] http://www.imagemagick.com.cn/

[2] http://www.imagemagick.org/script/index.php


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8928039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存