不同架构下的Kdump

这里写目录标题

  • Kdump文档
    • 常见概念和问题
    • Kdump支持的技术栈(架构)
    • 引导所需的内存大小
    • 可以使用dump-cature-kernel在/proc/vamcore里访问内存映像。
    • 设置和安装
      • 安装 kexec-tools
      • 构建dump捕获内核的方式
      • 启用kdump的配置。

Kdump文档

常见概念和问题

  1. 生产内核与捕获内核
    product kernel: 正常时候用的内核;
    dump-cature kernel:os panic崩溃时候,正常内核崩了的时候的替补内核,用来运行必须的进程来获取崩溃当时的内存的全部信息

  2. 什么时候启动捕获内核?通过什么?
    在需要获取系统内核内存信息时(例如,当系统出现故障时),
    Kdump使用kexec快速启动捕获内核。

  3. 系统内核的内存映像(内存快照:内存在某时间点下的状态记录)在重启过程中被保留,捕获内核可以访问它。

  4. 我们可以使用常见的命令,如cp和scp,将内存image复制到本地磁盘上,保存为dump文件(转储文件),或通过网络复制到远程系统。

  5. ELF格式:Executable and Linkable Format,即可执行文件,目标文件,共享链接库和内核转储(core dumps)准备的标准文件格式。 Linux和很多类Unix操作系统都使用这个格式。

Kdump支持的技术栈(架构)

KDUMP和KEXEC目前支持X86,X86_64,PPC64,IA64,S390x,ARM和ARM64架构。

当系统内核(生产内核)引导时,它会为转储捕获内核保留一小块内存。
为什么要为内核单独保留一小块内存?
因为这确保了来自系统内核的正在进行的直接内存访问(DMA)不会破坏转储捕获内核。

那这个保留的内存如何使用?
kexec -p命令将dump-capture内核加载到这个保留的内存中。

引导所需的内存大小

  • 在x86机器上,无论内核加载在哪里,引导都需要前640 KB的物理内存。因此,在重新引导到转储捕获内核之前,kexec会备份该区域。

  • 在PPC64机器上,无论内核加载在哪里,引导都需要第一个32KB的物理内存,为了支持64K页面page-size大小,kexec备份第一个64KB内存。

  • 在s390x机器上,当触发kdump时,crashkernel区域与区域[0,crashkernel region size]交换,然后kdump内核以[0,crashkernel region size]运行。因此s390x不需要重定位内核

关于系统内核核心映像的所有必要信息都以ELF格式编码,并在崩溃前存储在内存的预留区域中。ELF-header开始的物理地址通过elfcorehdr= boot参数传递给捕获内核。ELF-header的大小也可以在使用elfcorehdr=[size[KMG]@]offset[KMG]语法时传递。

必备操作 X86 PPC64
引导所需 640KB 64KB

可以使用dump-cature-kernel在/proc/vamcore里访问内存映像。

设置和安装

安装 kexec-tools

  1. root用户登录
  2. 下载kexec-tools; http://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools.tar.gz
  3. 解压:tar xvpzf kexec-tools.tar.gz
  4. 切换目录:cd kexec-tools-VERSION
  5. 配置package:./configure
  6. 编译: make
  7. 安装:make install

构建dump捕获内核的方式

有两种方法使用kdump。

1)构建单独的订制的转储捕获内核以捕获kernel dump。

2)或使用系统生产内核二进制本身作为转储捕获内核;也就是说无需构建单独的捕获内核。这个只有支持可重定位内核的架构才能使用。当今,I386,X86_64,PPC64,IA64,ARM和ARM64架构支持可重定位内核

启用kdump的配置。

  1. 启用"kexec system call" in “Processor type and features.”
CONFIG_KEXEC=y
  1. 启用"sysfs file system support" in “Filesystem” -> “Pseudo
    filesystems.” 这一般是默认的;
CONFIG_SYSFS=y
  1. 启用“kernel hacking”中的“Compile the kernel with debug info”。
CONFIG_DEBUG_INFO=Y

这使得内核带有调试符号。转储分析工具需要一个带有调试符号的vmlinux,以便读取和分析转储文件。

你可能感兴趣的:(操作系统,经验分享,操作系统)