7.2. 安装和配置 kdump
7.2.1. 安装 kdump
许多情况下,在新的 Red Hat Enterprise Linux 7 安装中默认安装并激活 kdump
服务。在使用图形或文本界面执行交互式安装时,Anaconda 安装程序为 kdump 配置提供了一个屏幕。安装程序屏幕名为 Kdump
,可在主 安装概述
屏幕中访问,且只允许有限的配置 - 您只能选择是否启用了 kdump 以及保留多少内存。有关 kdump 的内存要求的信息请参考 第 7.8.1 节 “kdump 的内存要求”。安装程序中的 Kdump 配置屏幕记录在 Red Hat Enterprise Linux 7 安装指南中。
在之前的 Red Hat Enterprise Linux 版本中,kdump 配置 在安装 完成后自动执行的 Firstboot 实用程序中可用,该系统第一次重启。从 Red Hat Enterprise Linux 7.1 开始,kdump 配置已移至安装程序。
有些安装选项(如自定义 Kickstart 安装)在默认情况下不必安装或启用 kdump。如果您的系统中是这种情况,且您想要额外安装 kdump,请在 shell 提示符后以 root
用户身份执行以下命令:
#
yum install kexec-tools
假设您的系统有一个有效的订阅或包含用于您的系统构架的 kexec-tools 软件包的自定义软件仓库,以上命令可保证 kdump 的安装和其他所有必要的软件包的安全。
如果您不知道系统中是否安装了 kdump,您可以使用 rpm
进行检查:
$
rpm -q kexec-tools
此外,如果使用上述命令,也可以使用图形配置工具,但默认情况下不会安装。要安装这个工具,如 第 7.2.3 节 “在图形用户界面中配置 kdump” 所述,以 root 用户身份
运行以下命令:
#
yum install system-config-kdump
有关如何使用 Yum 软件包管理器在 Red Hat Enterprise Linux 7 中安装新软件包的更多信息,请参阅 Red Hat Enterprise Linux 7 系统管理员指南。
从 Red Hat Enterprise Linux 7.4 开始,kdump 支持 Intel IOMMU
驱动程序 。
从 7.3 或更早版本运行内核时,建议禁用 Intel IOMMU
支持。
7.2.2. 在命令行中配置 kdump
7.2.2.1. 配置内存用量
在系统引导过程中,为 kdump 内核保留的内存始终保留,这意味着在系统的引导装载程序配置中指定了内存量。
要指定 kdump 内核保留的内存,将 crashkernel=
选项设置为所需的值。例如:要保留 128 MB 内存,请使用:
crashkernel=128M
有关如何使用 GRUB2 引导装载程序在 AMD64 和 Intel 64 系统以及 IBM Power Systems 服务器以及使用 zipl 在 IBM Z 中更改 crashkernel=
选项的详情请参考 第 3.1.1 节 “设置内核命令行参数”。
crashkernel=
选项可以通过多种方式定义。自动值启用根据系统中的内存总量自动配置
保留内存。第 7.8.1 节 “kdump 的内存要求”较大的内存系统(达到操作系统的既定限制)根据 crashkernel=auto
选项的架构进行计算。
将 auto
值替换为特定内存量来更改此行为。
crashkernel=
选项对于较小的内存系统特别有用。例如:要保留 128 MB 内存,请使用:
crashkernel=128M
您还可以根据安装的内存总量,将保留内存量设置为变量。变量内存保留的语法为 crashkernel=<range1>: <size1>,<range2>:<size2>
。例如:
crashkernel=512M-2G:64M,2G-:128M
如果系统内存总量为 512 MB 或高于 2 GB,则上述示例保留 64 MB 内存。如果内存总量超过 2 GB,则为 kdump 保留 128 MB。
有些系统需要使用特定的固定偏移保留内存。如果设置了偏移,则保留内存从此偏移开始。要偏移保留的内存,请使用以下语法:
crashkernel=128M@16M
上面的例子意味着 kdump 从 16 MB 开始保留 128 MB 内存(物理地址 0x01000000)。如果偏移参数设为 0 或完全省略,kdump 会自动偏移保留内存。如上所述,在设置变量内存保留时也可以使用此语法;在本例中,偏移始终被最后指定(例如 crashkernel=512M-2G:64M,2G-:128M@16M
)。
7.2.2.2. 配置 kdump 目标
当捕获内核崩溃时,核心转储可以作为文件存储在本地文件系统中,直接写入设备,或使用 NFS
(网络文件系统)或 SSH
(Secure Shell)协议通过网络发送。目前只能设置这些选项中的一个。默认选项是将 vmcore
文件存储在本地文件系统的 /var/crash
目录中。
要将
vmcore
文件存储在本地文件系统的/var/crash/
目录中,编辑/etc/kdump.conf
文件并指定路径:path /var/crash
选项
路径 /var/crash
代表kdump
保存vmcore
文件的文件系统路径。注意-
当您在
/etc/kdump.conf
文件中指定转储目标时,路径相对于 指定的转储目标。 -
当您没有在
/etc/kdump.conf
文件中指定转储目标时,该路径代表根目录 的绝对路径。
根据当前系统中挂载的内容,会自动执行转储目标和调整的转储路径。
例 7.1.
kdump
目标配置grep -v ^# etc/kdump.conf | grep -v ^$ ext4 /dev/mapper/vg00-varcrashvol path /var/crash core_collector makedumpfile -c --message-level 1 -d 31
此处指定转储目标(
ext4 /dev/mapper/vg00-varcrashvol
),因此path
选项也会设置为/var/crash
,因此kdump
会将vmcore
文件保存在/var/crash
/var/crash-
当您在
要更改转储位置,以 root
用户身份打开文本编辑器中的 /etc/kdump.conf
配置文件并编辑选项,如下所述。
要更改保存内核转储的本地目录,请从 #path /var/crash
行的开头删除 hash 符号("#"),并使用所需的目录路径替换值。
path /usr/local/cores
在 Red Hat Enterprise Linux 7 中,当 kdump systemd 服务启动 - 否则服务失败时,使用 path
指令定义为 kdump
目标的目录必须存在。此行为与早期版本的 Red Hat Enterprise Linux 不同,如果启动服务时不存在 目录,则会自动创建该目录。
另外,如果您要将文件写入不同的分区,请按照以 #ext4
开头的行之一执行相同的步骤。您可以在此处使用设备名称( #ext4 /dev/vg/lv_kdump
行)、文件系统标签( #ext4 LABEL=/boot
行)或 UUID( #ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
行)。将文件系统类型以及设备名称、标签或者 UUID 更改为所需值。
- 注意
-
指定 UUID 值的正确语法是
UUID="correct-uuid"'
和UUID=correct-uuid
。
例如:
ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
建议使用 LABEL= 或
指定存储设备。无法保证 UUID=
/dev/sda3
等磁盘设备名称在重启后保持一致。有关持久磁盘设备命名的详情,请查看 Red Hat Enterprise Linux 7 存储管理指南。
在 s390x 硬件中转储到 DASD 时,在继续前在 /etc/dasd.conf
中正确指定转储设备非常重要。
要将转储直接写入设备,请从 #raw /dev/vg/lv_kdump
行的开头删除哈希符号("#"),并使用所需的设备名称替换该值。例如:
raw /dev/sdb1
要使用 NFS
协议将转储保存到远程机器中,请从 #nfs my.server.com:/export/tmp
行的开头删除 hash 符号("#"),并使用有效的主机名和目录路径替换该值。例如:
nfs penguin.example.com:/export/cores
要使用 SSH
协议将转储保存到远程机器中,请从 #ssh user@my.server.com
行的开头删除 hash 符号(":user@my.server.com"),并将该值替换为有效的用户名和密码。要在配置中包含您的 SSH 密钥,请从 #sshkey /root/.ssh/kdump_id_rsa
行的开头删除哈希符号,并将值改为您要转储的服务器中有效密钥的位置。例如:
ssh john@penguin.example.com sshkey /root/.ssh/mykey
有关如何配置 SSH 服务器和设置基于密钥的身份验证的详情,请参考 Red Hat Enterprise Linux 7 系统管理员指南。
有关当前支持的和不受支持的目标的完整列表,请参阅 表 7.3 “支持的 kdump 目标”。
7.2.2.3. 配置内核收集器
要减少 vmcore
转储文件的大小,kdump 允许您
指定一个外部应用程序( 内核收集器)来压缩数据,并选择性地排除所有不相关的信息。目前,唯一完全支持的核心收集器是 makedumpfile
。
要启用核心收集器,以 root
用户身份打开文本编辑器中的 /etc/kdump.conf
配置文件,请从 #core_collector makedumpfile -l --message-level 1 -d 31
行的开头删除 hash 符号("#")。
要启用转储文件压缩,请添加 -l
参数。例如:
core_collector makedumpfile -l
要从转储中删除某些页面,请添加 -d value
参数,其中 值是您要省略的页面值总和,如 表 7.4 “支持的过滤级别” 所述。例如:要删除零和可用页面,请使用:
core_collector makedumpfile -d 17 -c
有关可用选项的完整列表,请参阅 makedumpfile(8)手册页
。
7.2.2.4. 配置默认操作
默认情况下,kdump
使用 kexec
系统调用在没有重启的情况下引导至第二个内核( 捕获内核),然后捕获崩溃内核的内存( 崩溃转储 或 vmcore)并将其保存到文件中。成功保存后,kdump
重启机器。
但是,当 kdump
无法在 第 7.2.2.2 节 “配置 kdump 目标” 中指定的目标位置创建内核转储时,kdump
会在不保存 vmcore 的情况下重启系统。要更改此行为,以 root
用户身份打开文本编辑器中的 /etc/kdump.conf
配置文件,从 #default shell
行的开头删除 hash 符号("#"),并将值替换为所需的操作,如 表 7.5 “支持的默认操作” 所述。
例如:
default reboot
7.2.2.5. 启用服务
要在引导时启动 kdump
守护进程,以 root
用户身份在 shell 提示符后输入以下内容:
systemctl
enable
kdump.service
这为 multi-user.target
启用服务。同样,按 systemctl
disable
kdump 可
禁用 kdump
。要在当前会话中启动该服务,以 root
用户身份运行以下命令:
systemctl
start
kdump.service
在 Red Hat Enterprise Linux 7 中,kdump systemd 服务启动时,定义为 kdump
目标的目录必须存在 - 否则服务失败。此行为与早期版本的 Red Hat Enterprise Linux 不同,如果启动服务时不存在 目录,则会自动创建该目录。
有关 systemd 和配置服务的更多信息,请参阅 Red Hat Enterprise Linux 7 系统管理员指南。
7.2.3. 在图形用户界面中配置 kdump
要启动 内核转储配置 实用程序,请 dumps,或者在 shell 提示符下键入 system-config-kdump
。因此,会出现一个窗口,如 图 7.1 “基本设置” 所示。
工具允许您配置 kdump
,并在引导时启用或禁用启动该服务。完成后,单击 。除非您已通过身份验证,否则请输入超级用户密码。实用程序向您发出一个提醒,您需要重新引导系统才能应用您对配置所做的任何更改。
在在强制模式中运行的 SELinux
的 IBM Z 或 PowerPC 系统中,启动内核转储配置程序前必须启用 kdumpgui_run_bootloader 布尔值。这个布尔值允许 system-config-kdump 在 bootloader_t SELinux 域中运行引导装载程序。要永久启用该布尔值,请以 root 用户身份运行以下命令:
# setsebool -P kdumpgui_run_bootloader 1
在 s390x 硬件中转储到 DASD 时,在继续前在 /etc/dasd.conf
中正确指定转储设备非常重要。
7.2.3.1. 配置内存用量
Basic Settings
标签页可让您配置为 kdump
内核保留的内存量。为此,可选择" 手动设置
"单选按钮,然后单击 新建 kdump Memory
字段旁边的向上和向下箭头按钮,以增加或减少要保留的内存量。请注意,Usable Memory
字段会相应地更改,显示可供系统使用的剩余内存。有关 kdump 内存要求的详情,请查看 第 7.1.2 节 “内存要求”。
图 7.1. 基本设置
7.2.3.2. 配置 kdump 目标
Target Settings
选项卡允许您指定 vmcore
转储的目标位置。转储可以作为文件存储在本地文件系统中,直接写入设备,或者使用 NFS
(网络文件系统)或 SSH
(Secure Shell)协议通过网络发送。
图 7.2. 目标设置
要将转储保存到本地文件系统,请选择 本地文件系统
单选按钮。另外,您还可以使用 Path
字段选择 分区
下拉列表和目标目录不同的分区来自定义设置。
在 Red Hat Enterprise Linux 7 中,kdump systemd 服务启动时,定义为 kdump
目标的目录必须存在 - 否则服务失败。此行为与早期版本的 Red Hat Enterprise Linux 不同,如果启动服务时不存在 目录,则会自动创建该目录。
要将转储直接写入设备,请选择 Raw 设备
单选按钮,然后从其旁边的下拉菜单中选择所需的目标设备。
要通过网络连接将转储发送到远程计算机,请选择 网络
单选按钮。要使用 NFS
协议,请选择 NFS
单选按钮,并填写 服务器名称和
目录路径
字段。要使用 SSH
协议,请选择 SSH
单选按钮,再将 Server name
、Path to directory
和 User name
字段分别填入远程服务器地址、目标目录和有效用户名。
有关如何配置 SSH 服务器和设置基于密钥的身份验证的详情,请参考 Red Hat Enterprise Linux 7 系统管理员指南。有关当前支持的目标的完整列表,请参阅 表 7.3 “支持的 kdump 目标”。
7.2.3.3. 配置内核收集器
Filtering Settings
选项卡允许您选择 vmcore
转储的过滤级别。
图 7.3. 过滤设置
要排除 零页面
、缓存页面
、缓存页面、
缓存、用户数据
或从转储中 可用页面
,请选中相应标签旁边的复选框。
7.2.3.4. 配置默认操作
要在 kdump
无法创建内核转储时选择要执行的操作,如果转储失败,请从操作
中选择一个适当的选项。可用选项有:
- 转储到 rootfs 并重启会尝试在本地保存内核,然后重新启动系统
- 重启重启系统的默认操作
- 启动 Shell 以显示具有相互活跃 shell 提示符的用户
- 停止系统
- poweroff 关闭系统
图 7.4. 过滤设置
要自定义传递给 makedumpfile
内核收集器的选项,编辑 Core 收集器
文本字段;如需更多信息,请参阅 第 7.2.2.3 节 “配置内核收集器”。
7.2.3.5. 启用服务
要在引导时启动 kdump
服务,点工具栏上的 按钮,然后点击 按钮。这为 multi-user.target
启用并激活服务。 "按钮以立即禁用该服务。
在 Red Hat Enterprise Linux 7 中,kdump systemd 服务启动时,定义为 kdump
目标的目录必须存在 - 否则服务失败。此行为与早期版本的 Red Hat Enterprise Linux 不同,如果启动服务时不存在 目录,则会自动创建该目录。
有关 systemd 目标和配置服务的更多信息,请参阅 Red Hat Enterprise Linux 7 系统管理员指南。