使用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所示为各转储级别跳过的页面种类。
转储级别可以通过表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,则不需要专门安装带调试信息的内核。