配置核心收集器
为了减小 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
当启用 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/)默认)。
更改默认操作
默认情况下,当 kdump 创建核心转储失败时,会挂载根文件系统并运行 /sbin/init。
要更改此行为,请以 root 身份在文本编辑器中打开 /etc/kdump.conf 配置文件,从 #default shell 行的开头删除井号(“#”),并将该值替换为所需的操作如下所述:
支持的操作
选项 | 说明 |
---|---|
reboot | 重新启动系统,在此过程中会丢失内核。 |
halt | 停止系统。 |
poweroff | 关闭系统 |
shell | 从initramfs中运行msh会话,允许用户以bananaly方式记录内核。 |
例如:
default halt