centos6.5 升级内核后kdump功能失效的原因分析

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查看第二内核的启动参数

猜你喜欢

转载自blog.csdn.net/xiaofeng_yan/article/details/88034774