使用makedumpfile缩小转储的文件大小

使用前面介绍的设置,将生成与实际安装内存量大小相同的崩溃转储文件。也就是说,如果安装了8GB的内存,转储文件也是8GB。但是Kdump也和diskdump一样可以压缩转储映像,使其变小。kexec-tools中的makedumpfile命令就是负责这个处理过程的实用程序。使用这条命令前需要在/etc/kdump.conf中添加core_collector的设置。


ext3/dev/sda5

core_collector makedumpfile-c


一开始的ext3/dev/sda5指定了具有root文件系统的设备。把转储文件输出到这个分区的./var/crash下。要将转储输出的位置设置为其他分区,例如,设置为挂接到/dump目录下的/dev/sda6,需进行下列操作。


ext3/dev/sda6

path.


这样,在/dump目录下就会生成各个日期的目录,把转储输出到这里。

-c是压缩选项。设置转储级别的-d选项也非常方便。转储级别选项用来指定崩溃转储中不包括的页面(内存)种类。表7-6所示为各转储级别跳过的页面种类。

使用makedumpfile缩小转储的文件大小 - 图1

使用makedumpfile缩小转储的文件大小 - 图2

转储级别可以通过表7-6中的数值来指定。例如,当不想包括零页面和可用页面时,可以将转储级别指定为17。还可以像下面这样用“,”将转储级别分开,指定两个转储级别。core_collector makedumpfile-c-d 11,31通过这个配置,makedumpfile命令如果在使用转储级别11时失败,就会使用转储级别31重试。这个配置在磁盘容量不足且makedumpfile命令失败时十分有效。这是因为转储级别31跳过的页面比转储级别11多,转储文件更小。

要使设置生效,需要重启kdump服务。


service kdump restart


使用前面介绍的方法确认转储。根据vmcore文件的大小可以判断出提取的转储是否已压缩。已压缩的转储文件就不再是ELF格式,因此不能使用gdb进行调试,必要时请使用crash命令。

使用makedumpfile提取自己重新构建的内核的转储时,需要将带调试信息的内核放到下列位置。


/usr/lib/debug/lib/modules/'uname-r'/vmlinux


在最近的RHEL6的发布版中,是不需要带调试信息的内核包的。这是因为内核中添加了vmcoreinfo功能。kexec-tools数据包也相应地进行了修改。如果所使用的系统的内核和kexec-tools同时都支持vmcoreinfo,则不需要专门安装带调试信息的内核。