配置核心收集器

为了减小 vmcore 转储文件的大小,kdump 允许我们指定一个外部应用程序(即核心收集器)来压缩数据,并可选择忽略所有不相关的信息。
目前,唯一完全受支持的核心收集器是 makedumpfile。

要启用核心收集器,请以 root 身份在文本编辑器中打开 /etc/kdump.conf 配置文件,删除 #core_collector makedumpfile -c --message-level 1 - 开头的井号(“#”) d 31 行,然后编辑命令行选项,如下所述。

要启用转储文件压缩,请添加 -c 参数。
例如:

core_collector makedumpfile -c

要删除零页和空闲页,请使用以下命令:

core_collector makedumpfile -d 17 -c

有关可用选项的完整列表,请参阅 makedumpfile 的手册页。

启用服务

要在引导时启动 kdump 守护进程,请以 root 身份在 shell 提示符下键入以下内容:

# chkconfig kdump on

这将为运行级别 2. 3. 4 和 5 启用服务。
类似地,键入“chkconfig kdump off”将禁用所有运行级别的服务。
要在当前会话中启动服务,请以 root 身份使用以下命令:

# service kdump start
如何在 Oracle Enterprise Linux (OEL 5,6) 中配置 kdump

当启用 kdump 故障转储机制时,系统将从另一个内核的上下文中引导。
第二个内核保留少量内存,其唯一目的是在系统崩溃时捕获核心转储镜像。

能够分析核心转储极大地有助于确定系统故障的确切原因,因此强烈建议启用此功能。
本章解释了如何在 Red Hat Enterprise Linux 中配置、测试和使用 kdump 服务,并简要概述如何使用崩溃调试实用程序分析生成的核心转储。

配置 kdump 服务

配置内存使用

要配置为 kdump 内核保留的内存量,请编辑 /boot/grub/grub.conf 文件并添加 crashkernel=[size]M 或者 crashkernel=auto 。
请注意, crashkernel=auto 选项仅在系统物理内存等于或者大于以下情况时保留内存:

  • 2 GB 在 32 位和 64 位 x86 架构上

示例 /boot/grub/grub.conf 文件

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.32-220.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/sda3 crashkernel=128M
        initrd /initramfs-2.6.32-220.el6.x86_64.img

配置目标类型

当内核崩溃被捕获时,核心转储可以作为文件存储在本地文件系统中,直接写入设备,或者使用 NFS(网络文件系统)或者 SSH(安全shell)协议通过网络发送。
目前只能设置其中一个选项,默认选项是将vmcore文件存放在本地文件系统的/var/crash/目录下。
要更改此设置,请以 root 用户身份在文本编辑器中打开 /etc/kdump.conf 配置文件并按如下所述编辑选项。

要更改要保存核心转储的本地目录,请从 #path /var/crash 行的开头删除井号(“#”),并将该值替换为所需的目录路径。
或者,如果我们希望将文件写入不同的分区,也可以对 #ext4 /dev/sda3 行执行相同的步骤,并更改文件系统类型和设备(设备名称、文件系统标签、和 UUID 都受支持)相应地。
例如:

ext3 /dev/sda4
path /usr/local/cores

要将转储直接写入设备,请从#raw /dev/sda5line 的开头删除井号(“#”),并将该值替换为所需的设备名称。
例如:

raw /dev/sdb1

要使用 NFS 协议将转储存储到远程计算机,请删除 #net my.server.com:/export/tmp 行开头的哈希符号(“#”),并将该值替换为有效的主机名和目录路径。
例如:

net penguin.example.com:/export/cores

要使用 SSH 协议将转储存储到远程计算机,请删除 #net user@my.server.com 行开头的哈希符号(“#”),并将该值替换为有效的用户名和主机名.例如:

net john@penguin.example.com

通过 SSH 将核心文件传输到远程目标时,需要对核心文件进行序列化以进行传输。
这会在目标系统的 /var/crash/ 目录中创建一个 vmcore.flat 文件,崩溃实用程序无法读取该文件。
要将 vmcore.flat 转换为崩溃时可读的转储文件,请在目标系统上以 root 身份运行以下命令:

# /usr/sbin/makedumpfile -R */tmp/vmcore-rearranged* < *vmcore.flat*

安装 kdump 服务

为了在系统上使用 kdump 服务,请确保我们安装了 kexec-tools 包。
为此,请以 root 身份在 shell 提示符下键入以下内容:

# yum install kexec-tools

测试配置

下面的命令会导致内核崩溃。
执行这些步骤时要小心,切勿在生产机器上使用它们。
要测试配置,请在启用 kdump 的情况下重新启动系统,并确保服务正在运行:

# service kdump status
Kdump is operational

然后在 shell 提示符下键入以下命令:

# echo 1 > /proc/sys/kernel/sysrq
# echo c > /proc/sysrq-trigger

这会强制Linux内核崩溃,地址-YYYY-MM-DD-HH:MM:SS/vmcore 文件会被复制到你在配置中选择的位置(也就是/var/crash/)默认)。

之路 on it Road.com

更改默认操作

默认情况下,当 kdump 创建核心转储失败时,会挂载根文件系统并运行 /sbin/init。
要更改此行为,请以 root 身份在文本编辑器中打开 /etc/kdump.conf 配置文件,从 #default shell 行的开头删除井号(“#”),并将该值替换为所需的操作如下所述:

支持的操作

选项说明
reboot重新启动系统,在此过程中会丢失内核。
halt停止系统。
poweroff关闭系统
shell从initramfs中运行msh会话,允许用户以bananaly方式记录内核。

例如:

default halt
日期:2020-09-17 00:13:20 来源:oir作者:oir