centos6.5的内核升级到最新内核后(自己编译的内核),kdump使能失败。
debug的方式:
1 首先要启动kdump功能,出现了如下信息
/proc/sys/crypto/fips_enabled: No such file or directory。
通过查看代码,解决方案:
运行如下命令:
sysctl -n -e crypto.fips_enable'
2 这个成功后又出现了
kdump: No crashkernel parameter specified for running kernel
通过搜查,在此内核CONFIG_KEXEC_AUTO_RESERVE这个配置没有了。需要具体制定预留内存的大小,比如crashkernel=256M.这个根据内存的大小来设置。参考内核的document,有具体描述
此部分的代码如下:
#ifdef CONFIG_KEXEC_AUTO_RESERVE
if (strncmp(ck_cmdline, "auto", 4) == 0) {
unsigned long long size;
size = arch_default_crash_size(system_ram);
if (size != 0) {
*crash_size = size;
*crash_base = arch_default_crash_base();
return 0;
} else {
pr_warning("crashkernel=auto resulted in zero bytes of reserved memory.\n");
return -ENOMEM;
}
}
#endif
上述代码在4.14的内核没有,通过网络查询https://blog.csdn.net/leoufung/article/details/68947054?utm_source=blogxgwz1有详细的介绍。
redhat内核可以设置auto是因为,redhat自己打了这个patch
3 重新启动发现又失败,出错信息kexec: failed to load kdump kernel
查看/etc/init.d/kdump 这个是kdump的启动文件,通过分析这个文件发现了kexec版本加载capture内核失败,这是因为低版本的kexec不能加载高版本的内核。重新编译新的kexec就可以了(升级到2.0.18的版本)。kexec成功后,但是没有vmcore产生,只有vmcore-demsg文件。一开始以为是crashkernel配置问题,试了很多参数设置,但是都不起作用。
4 看kdump启动文件发现makedumpfile是生成vmcore的工具,通过下载makedumpfile的源码,有一个readme,里面详细介绍了支持内核版本的信息。信息如下:
* SUPPORTED KERNELS
This makedumpfile supports the following kernels.
| FLATMEM | DISCONTIGMEM | SPARSEMEM
|-------------------+-------------------+------------------------
Kernel| | x86| PPC| PPC| | x86| | PPC| | x86| | PPC|
Version| x86| _64| 32| 64| x86| _64|ia64| 64| x86| _64|ia64| 64|s390
-------+----+----+----+----+----+----+----+----+----+----+----+----+----
2.6.15 | OK | -- | | -- | -- | -- | -- | -- | -- | -- | -- | -- |
2.6.16 | OK | OK | | | -- | OK | OK | -- | -- | | -- | |
2.6.17 | OK | OK | | | -- | OK | -- | -- | -- | OK | -- | |
2.6.18 | OK | OK | | OK | -- | OK | OK | -- | -- | OK | OK | OK |
2.6.19 | OK | OK | | OK | OK | OK | | -- | OK | OK | OK | OK |
2.6.20 | OK | OK | | #1 | OK | OK | OK | -- | OK | OK | OK | #1 |
21-rc5 | OK | OK | | OK | OK | OK | OK | -- | OK | OK | OK | OK |
2.6.21 | OK | OK | | | OK | OK | OK | -- | OK | OK | OK | |
2.6.22 | OK | OK | | | OK | OK | OK | -- | OK | OK | OK | |
2.6.23 | OK | OK | | | OK | OK | OK | -- | OK | OK | OK | |
2.6.24 | OK | OK | | | OK | OK | OK | -- | OK | OK | OK | |
2.6.25 | OK | ** | | | | ** | OK | -- | OK | OK | OK | |
2.6.26 | OK | ** | | | | ** | OK | -- | OK | OK | OK | |
2.6.27 | OK | ** | | | | ** | OK | -- | #2 | OK | OK | |
2.6.28 | OK | ** | | | | ** | OK | -- | OK | OK | OK | |
2.6.29 | OK | ** | | | | ** | OK | -- | OK | OK | OK | |
2.6.30 | OK | ** | | | | ** | OK | -- | OK | OK | OK | |
2.6.31 | OK | ** | | | | ** | | -- | OK | OK | OK | |
2.6.32 | OK | ** | | | | ** | | -- | OK | OK | | | OK
2.6.33 | OK | ** | | | | ** | | -- | OK | OK | | |
2.6.34 | OK | ** | | | | ** | | -- | OK | OK | | |
2.6.35 | OK | ** | | | | ** | | -- | OK | OK | | |
2.6.36 | OK | ** | | | | ** | | -- | OK | OK | | |
2.6.37 | OK | ** | | | | ** | | -- | OK | OK | | |
2.6.38 | OK | ** | | | | ** | | -- | OK | OK | | |
2.6.39 | OK | ** | | | | ** | | -- | OK | OK | | |
3.0 | OK | ** | | | | ** | | -- | OK | OK | | |
3.1 | OK | ** | | | | ** | | -- | OK | OK | | |
3.2 | OK | ** | OK | | | ** | | -- | OK | OK | | |
3.3 | OK | ** | | | | ** | | -- | OK | OK | | |
3.4 | OK | ** | | | | ** | | -- | OK | OK | | |
3.5 | OK | ** | | | | ** | | -- | OK | OK | | |
3.6 | OK | ** | | | | ** | | -- | OK | OK | | |
3.7 | OK | ** | | | | ** | | -- | OK | OK | | |
3.8 | OK | ** | | | | ** | | -- | OK | OK | | |
3.9 | OK | ** | | | | ** | | -- | OK | OK | | |
3.10 | OK | ** | | | | ** | | -- | OK | OK | | |
3.11 | OK | ** | | | | ** | | -- | OK | OK | | |
3.12 | OK | ** | | | | ** | | -- | OK | OK | | |
3.13 | OK | ** | | | | ** | | -- | OK | OK | | |
3.14 | OK | ** | | | | ** | | -- | OK | OK | | |
3.15 | OK | ** | | | | ** | | -- | OK | OK | | |
3.16 | OK | ** | | | | ** | | -- | OK | OK | | |
3.17 | OK | ** | | | | ** | | -- | OK | OK | | |
3.18 | OK | ** | | | | ** | | -- | OK | OK | | |
3.19 | OK | ** | | | | ** | | -- | OK | OK | | |
4.0 | OK | ** | | | | ** | | -- | OK | OK | | |
4.1 | OK | ** | | | | ** | | -- | OK | OK | | |
4.2 | OK | ** | | | | ** | | -- | OK | OK | | |
4.3 | OK | ** | | | | ** | | -- | OK | OK | | |
4.4 | OK | ** | | | | ** | | -- | OK | OK | | |
4.5 | OK | ** | | | | ** | | -- | OK | OK | | |
4.6 | OK | ** | | | | ** | | -- | OK | OK | | |
4.7 | OK | ** | | | | ** | | -- | OK | OK | | |
4.8 | OK | ** | | | | ** | | -- | OK | OK | | |
4.9 | OK | ** | | | | ** | | -- | OK | OK | | |
4.10 | OK | ** | | | | ** | | -- | OK | OK | | |
4.11 | OK | ** | | | | ** | | -- | OK | OK | | |
4.12 | OK | ** | | | | ** | | -- | OK | OK | | |
4.13 | OK | ** | | | | ** | | -- | OK | OK | | |
4.14 | OK | ** | | | | ** | | -- | OK | OK | | |
4.15 | OK | ** | | | | ** | | -- | OK | OK | | |
4.16 | OK | ** | | | | ** | | -- | OK | OK | | |
4.17 | OK | ** | | | | ** | | -- | OK | OK | | |
4.18 | OK | ** | | | | ** | | -- | OK | OK | | |
4.19 | OK | ** | | | | ** | | -- | OK | OK | | |
通过编译了新的makedumpfile,出现了如下问题
会报告如下错误:
cc -g -O2 -Wall -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DVERSION='"1.6.5"' -DRELEASE_DATE='"5 Dec 2018"' -D__x86_64__ print_info.o dwarf_info.o elf_info.o erase_info.o sadump_info.o cache.o tools.o arch/arm.o arch/arm64.o arch/x86.o arch/x86_64.o arch/ia64.o arch/ppc64.o arch/s390x.o arch/ppc.o arch/sparc64.o -rdynamic -o makedumpfile makedumpfile.c -lpthread -static -ldw -lbz2 -lebl -ldl -lelf -lz
/usr/bin/ld: cannot find -lpthread
/usr/bin/ld: cannot find -ldw
/usr/bin/ld: cannot find -lbz2
/usr/bin/ld: cannot find -ldl
/usr/bin/ld: cannot find -lelf
/usr/bin/ld: cannot find -lz
/usr/bin/ld: cannot find -lc
这是因为既有共享和静态编译在一起了。去掉static的参数,编程成功后。makedumpfile工具生效
这样2.6.32升级的内核就可以完成kdump功能了。
其它笔记:
通过解压/boot/XX.kdump.img文件看生成vmcore的过程
通过看/var/log/message 看kdump的失败信息。
查看/etc/init.d/kdump文件
查看/etc/kdump.conf查看第二内核的启动参数