配置rhel系统kdump安装RHEL的debuginfo软件包

发布时间 2023-11-04 23:13:52作者: 呼长喜

7.1.1. 关于kdump

Kdump是一种内核碰撞倾销机制,可将系统内存的内容保存以供以后分析。它依赖于kexec,它可以用来从另一个内核的上下文中启动 Linux 内核,绕过 BIOS,并保留第一个内核内存的内容,否则会丢失。

在系统崩溃的情况下,kdump 使用 kexec 启动到第二个内核(捕获内核)。第二个内核位于系统内存的保留部分,第一个内核无法访问。然后,第二个内核捕获崩溃内核内存的内容(崩溃转储),并保存它。

重要

在发生故障时,内核崩溃转储是唯一可用的信息,在业务关键环境中拥有这些数据的重要性不可低估。红帽建议系统管理员定期更新和测试您的正常内核更新周期。当实现新的内核功能时,这一点尤为重要。kexec-tools

注意

HP 看门狗正时器(hpwdt)驱动程序已预加载在作为 RHEV 超遮阳板运行的 HP 系统中,因此这些系统可以消耗 NMI 监视器。更新的 kexec 工具包,从kexec 工具-2.0.15-33.el7.x86_64开始,已预加载hpwdt驱动程序。

如果驱动程序bnx2xbmx2fc未在kdump内核中列入黑名单,则第二个内核会导致恐慌,转储将不会被捕获。

7.1.2. 内存要求

为了使 kdump 能够捕获内核崩溃转储并将其保存以供进一步分析,系统内存的一部分必须永久保留给捕获内核。保留时,系统内存的这一部分不适用于主内核。

内存要求因某些系统参数而异。其中一个主要因素是系统的硬件架构。要找出机器架构的确切名称(例如),并将其打印到标准输出,请在外壳提示下键入以下命令:x86_64

uname -m

影响要保留的内存量的另一个因素是已安装的系统内存的总量。例如,在x86_64架构上,每 4 KB RAM 的保留内存量为 160 MB + 2 位。在安装总物理存储器为 1 TB 的系统上,这意味着 224 MB(160 MB = 64 MB)。有关基于系统架构和物理内存量的 kdump 内存要求的完整列表,请参阅第 7.8.1 节,"kdump 的内存要求"。

在许多系统上,kdump 可以估计所需的内存量并自动保留它。默认情况下启用此行为,但仅适用于可用内存总量超过一定量的系统,这些系统因系统架构而异。请参阅第 7.8.2 节,"自动内存预订的最低阈值",了解基于系统架构的自动内存预订的最低要求列表。

如果系统具有低于自动分配工作所需的最小内存量,或者如果您的用例需要不同的值,则可以手动配置保留内存量。有关如何在命令行上这样做的信息,请参阅第 7.2.2.1 节,"配置内存使用情况"。有关如何在图形用户界面中配置保留内存量的信息,请参阅第 7.2.3.1 节,"配置内存使用情况"。

重要

强烈建议在设置 kdump 服务后测试配置,即使在使用自动内存预订时也是如此。有关如何测试配置的说明,请参阅第 7.4 节"测试 kdump 配置"。

7.2. 安装和配置 kdump

7.2.1. 安装kdump

在许多情况下,该服务默认安装和激活新的红帽企业Linux 7安装。 Anaconda安装程序在使用图形或文本界面执行交互式安装时为 kdump 配置提供屏幕。安装屏幕的标题是,可从主屏幕,只允许有限的配置 - 你只能选择是否启用kdump和多少内存保留。有关 kdump 内存要求的信息可在第7.8.1 节中提供,"kdump 的内存要求"。安装程序中的 Kdump 配置屏幕记录在红帽企业 Linux 7 安装指南中kdumpKdumpInstallation Summary

注意

在红帽企业 Linux 之前的版本中,kdump 配置可在Firstboot实用程序中提供,该实用程序在安装完成自动执行,系统首次重新启动。从红帽企业 Linux 7.1 开始,kdump 配置已移动到安装程序中。

某些安装选项(如自定义启动安装)不必在默认情况下安装或启用 kdump。如果系统中出现这种情况,并且您希望额外安装 kdump,请按照外壳提示执行以下命令:root

# yum install kexec-tools

上面的命令确保安装 kdump 和所有其他必要的包,假设您的系统具有活动订阅或包含系统架构的 kexec 工具包的自定义存储库。

注意

如果您不知道是否在系统上安装了 kdump,则可以检查使用:rpm

$
rpm -q kexec-tools

此外,还提供图形配置工具,但如果您使用上述命令,则默认不会安装。要安装此实用程序(第7.2.3 节中描述)"在图形用户界面中配置 kdump",请使用以下命令作为:root

# yum install system-config-kdump

有关如何使用百胜包管理器在红帽企业 Linux 7 中安装新封装的更多信息,请参阅红帽企业 Linux 7 系统管理员指南

重要

从红帽企业Linux 7.4开始,驱动程序得到支持。当运行来自版本 7.3 或更早的内核时,建议禁用支持。Intel IOMMUkdumpIntel IOMMU

7.2.2. 在命令行上配置 kdump

7.2.2.1. 配置内存使用情况

在系统启动期间,始终保留为 kdump 内核保留的内存,这意味着系统引导加载器配置中指定了内存量。

要指定为 kdump 内核保留的内存,将选项设置为所需的值。例如,要保留 128 MB 的内存,请使用以下:crashkernel=

crashkernel=128M

有关如何使用GRUB2引导加载器更改 AMD64 和英特尔 64 系统和 IBM 电源系统服务器上的选项以及使用zipl在 IBM Z 上更改选项的信息,请参阅第 3.1.1 节,"设置内核命令行参数"。crashkernel=

该选项可以以多种方式定义。该值可按照第 7.8.1 节"kdump 的内存要求"中描述的准则,根据系统中内存总量自动配置保留内存。较大的内存系统,最高可达操作系统的既定限制,根据具有选项的架构进行计算。crashkernel=autocrashkernel=auto

用特定的内存替换值以更改此行为。auto

 

  1. Open the /etc/default/grub configuration file as root using a plain text editor such as vim or Gedit.
  2. In this file, locate the line beginning with GRUB_CMDLINE_LINUX similar to the following:
    GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap crashkernel=auto rd.lvm.lv=rhel/root rhgb quiet"
  3. Change the value of the required kernel command-line parameter. Then, save the file and exit the editor.
  4. Regenerate the GRUB2 configuration using the edited default file. If your system uses BIOS firmware, execute the following command:
    # grub2-mkconfig -o /boot/grub2/grub.cfg

    On a system with UEFI firmware, execute the following instead:

    # grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

rhel6 编辑/etc/grub.conf, 在内核行的最后添加修改"crashkernel=128M"

 

该选项对于较小的内存系统特别有用。例如,要保留 128 MB 的内存,请使用以下:crashkernel=

crashkernel=128M

您还可以根据安装的内存总数将保留内存的量设置为可变。可变内存预订的语法是。例如:crashkernel=<range1>:<size1>,<range2>:<size2>

crashkernel=512M-2G:64M,2G-:128M

如果系统内存总量为 512 MB 或更高且低于 2 GB,则上述示例保留 64 MB 的内存。如果内存总量超过 2 GB,则保留 128 MB 用于 kdump。

某些系统需要用一定的固定偏移来保留内存。如果设置偏移,则保留内存从那里开始。要抵消保留的内存,请使用以下语法:

crashkernel=128M@16M

上述示例表示 kdump 从 16 MB 开始保留 128 MB 的内存(物理地址0x01000000)。如果偏移参数设置为 0 或完全省略,kdump 会自动抵消保留的内存。在设置上述可变内存保留时,还可用于此语法:在这种情况下,偏移总是最后指定的(例如)。crashkernel=512M-2G:64M,2G-:128M@16M

7.2.2.2. 配置 kdump 类型

捕获内核崩溃时,核心转储可以作为文件存储在本地文件系统中,直接写入设备,也可以使用 (网络文件系统) 或 (安全外壳) 协议通过网络发送。目前只能设置其中一个选项。默认选项是将文件存储在本地文件系统的目录中。NFSSSHvmcore/var/crash

将文件存储在本地文件系统的目录中:vmcore/var/crash/

  • 编辑文件并指定路径:/etc/kdump.conf
    path /var/crash

    该选项表示保存文件的文件系统路径。当您在文件中指定转储目标时,则该目标相对于指定的转储目标。path /var/crashkdumpvmcore/etc/kdump.confpath

    如果您没有在文件中指定转储目标,则该目标表示根目录中的绝对路径。根据当前系统中安装的内容,自动采取转储目标和调整后的转储路径。/etc/kdump.confpath

警告

当转储目标安装在目录中时,该文件将保存在目录中,并且选项也设置为文件中。例如,在下示例中,文件系统已安装在以下情况下,并且还设置为:kdumpvmcore/var/crash/var/crash/var/crashpath/var/crash/etc/kdump.confext4/var/crashpath/var/crash

grep -v ^# etc/kdump.conf | grep -v ^$
ext4 /dev/mapper/vg00-varcrashvol
path /var/crash
core_collector makedumpfile -c --message-level 1 -d 31

这会导致路径。要解决此问题,请使用选项而不是/var/crash/var/crashpath /path /var/crash

要更改转储位置,请在文本编辑器中打开配置文件并编辑下面描述的选项。root/etc/kdump.conf

要更改要保存核心转储的本地目录,请从行的开头删除哈希符号 ("#"),然后用所需的目录路径替换值。#path /var/crash

path /usr/local/cores
重要

在红帽企业 Linux 7 中,使用指令定义为 kdump 目标的目录必须在系统服务启动时存在 - 否则服务将失败。此行为与红帽企业 Linux 的早期版本不同,该目录在启动服务时不存在,则会自动创建目录。pathkdump

可选地,如果您希望将文件写到不同的分区,请按照相同的程序从其中一行开始。在这里,您可以使用设备名称(行)、文件系统标签(行)或 UUID(行)。将文件系统类型以及设备名称、标签或 UUID 更改为所需的值。例如:#ext4#ext4 /dev/vg/lv_kdump#ext4 LABEL=/boot#ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937

ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937
重要

使用或建议指定存储设备。磁盘设备名称(如无法保证在重新启动时保持一致)。有关持久磁盘设备命名的信息,请参阅红帽企业 Linux 7 存储管理指南LABEL=UUID=/dev/sda3

重要

在 s390x 硬件上向 DASD 倾销时,在继续之前必须正确指定转储设备。/etc/dasd.conf

要将转储直接写入设备,请从行的开头删除哈希符号 ("#"),然后用所需的设备名称替换值。例如:#raw /dev/vg/lv_kdump

raw /dev/sdb1

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

nfs penguin.example.com:/export/cores

要使用协议将转储存储到远程计算机,请从行的开头取出哈希符号 ("#"),并用有效的用户名和主机名替换值。要在配置中包括您的 SSH 密钥,请从行的开头删除哈希符号,并将值更改为您要转储到的服务器上有效密钥的位置。例如:SSH#ssh user@my.server.com#sshkey /root/.ssh/kdump_id_rsa

ssh john@penguin.example.com
sshkey /root/.ssh/mykey

有关如何配置 SSH 服务器并设置基于密钥的身份验证的信息,请参阅红帽企业 Linux 7 系统管理员指南

有关按类型排序的当前支持和未支持目标的完整列表,请参阅表7.3,"支持 kdump 目标"。

7.2.2.3. 配置核心收集器

为了缩小转储文件的大小,允许您指定外部应用程序(核心收集器)来压缩数据,并可选地将所有不相关信息排除在外。目前,唯一完全支持的核心收藏家是。vmcorekdumpmakedumpfile

要启用核心收集器,请打开文本编辑器中的配置文件,从行的开头删除哈希符号 ("#"),并编辑下面描述的命令行选项。root/etc/kdump.conf#core_collector makedumpfile -l --message-level 1 -d 31

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

core_collector makedumpfile -l

要从转储中删除某些页面,添加参数,其中是要省略的页面值的总和,如表 7.4 中描述的"支持过滤级别"。例如,要删除零页和免费页面,请使用以下内容:-d value

core_collector makedumpfile -d 17 -c

有关可用选项的完整列表,请参阅该男子页面。makedumpfile(8)

7.2.2.4. 配置默认操作

默认情况下,当未能在第7.2.2.2 节指定的目标位置创建核心转储时,"配置 kdump 类型",则重新启动系统而不保存 vmcore。要更改此行为,请打开文本编辑器中的配置文件,从行的开头删除哈希符号 ("#"),并使用表 7.5 中描述的"支持默认操作"中描述的所需操作替换值。kdumpkdumproot/etc/kdump.conf#default shell

例如:

default reboot

7.2.2.5. 启用服务

要在启动时启动"daemon",请在外壳提示下键入以下提示::kdumproot

systemctl
enable
kdump.service

这启用了 服务。同样,键入禁用。要在当前会话中启动服务,请使用以下命令作为:multi-user.targetsystemctldisablekdumpkdumproot

systemctl
start
kdump.service
重要

在红帽企业 Linux 7 中,当系统服务启动时,定义为 kdump 目标的目录必须存在 - 否则服务将失败。此行为与红帽企业 Linux 的早期版本不同,该目录在启动服务时不存在,则会自动创建目录。kdump

有关系统化和配置服务的更多信息,请参阅红帽企业 Linux 7 系统管理员指南

测试配置是否有效

可以通过 kexec 加载内核镜像,让系统准备好去捕获一个崩溃时产生的 vmcore。可以通过 sysrq 强制系统崩溃。(慎重使用,会重启设备)

# echo 1 > /proc/sys/kernel/sysrq

# echo c > /proc/sysrq-trigger

这造成内核崩溃,如配置有效,系统将重启进入 kdump 内核,当系统进程进入到启动 kdump 服务的点时,vmcore 将会拷贝到你在 kdump 配置文件中设置的位置。RHEL 的缺省目录是 : /var/crash

通过以下命令来分析crash的日志

#[root@FJXM-DM2-HP-GYAPP-03 ~]# crash /usr/lib/debug/lib/modules/2.6.32-131.0.15.el6.x86_64/vmlinux /var/crash/127.0.0.1-2015-03-23-16\:24\:17/vmcore

 

来源: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/kernel_administration_guide/kernel_crash_dump_guide?spm=a2c4g.11186623.2.8.58174472rQX6Is

环境

  • 红帽企业Linux
  • 红帽客户门户
  • 红帽网络(RHN)
  • 红帽卫星

问题

  • 如何下载debuginfo软件包?
  • 如何下载像kernel-debuginfo这样的debug-info包?
  • 为什么ftp站点上没有提供Red Hat Enterprise Linux 6(RHEL6)的调试信息包ftp.redhat.com
  • 是否有客户可访问的地方,/usr/lib/debug可以找到某些软件包的合并集合?

解析度

对于Red Hat Enterprise Linux 8

  • 首先启用debug频道:
# subscription-manager repos --enable=rhel-8-for-x86_64-baseos-debug-rpms --enable=rhel-8-for-x86_64-appstream-debug-rpms

然后安装所需的debuginfo软件包:

# yum install kernel-debuginfo kernel-debuginfo-common-x86_64
===================================================================================================================
 Package                         Architecture  Version                 Repository                             Size
===================================================================================================================
Installing:
 kernel-debuginfo                x86_64        4.18.0-147.5.1.el8_1    rhel-8-for-x86_64-baseos-debug-rpms   417 M
 kernel-debuginfo-common-x86_64  x86_64        4.18.0-147.5.1.el8_1    rhel-8-for-x86_64-baseos-debug-rpms    54 M

对于Red Hat Enterprise Linux 7

  • 首先获得调试包可用的通道
[root@rhelserver tmp]#   subscription-manager repos --list | grep -i server-debug-rpms

Repo ID:   jb-eap-6-for-rhel-7-server-debug-rpms
Repo ID:   jb-eap-7-for-rhel-7-server-debug-rpms
Repo ID:   rhel-7-server-debug-rpms
<redacted the rest of the output>

  • 获得要使用的通道的“回购ID”后,只需启用它即可。
[root@rhelserver tmp]#  subscription-manager repos --enable=rhel-7-server-debug-rpms

此时,您可以使用以下命令安装内核debuginfo软件包:

[root@rhelserver tmp]#  yum install kernel-debuginfo kernel-debuginfo-common

In order to match the kernel-debuginfo with your kernel version you would instead run:
[root@rhelserver tmp]#  yum install kernel-debuginfo-$(uname -r)

或者

[root@rhelserver tmp]#  yum install kernel-debuginfo-3.10.0-327.36.2.el7 kernel-debuginfo-common-3.10.0-327.36.2.el7

或者,请参阅附录,以获取有关如何从Red Hat Customer Portal手动下载debuginfo文件的指导。

对于Red Hat Enterprise Linux 5.8+和6

  • 随着RHEL 6的发行,不再通过Red Hat公共FTP站点提供debuginfo软件包。他们改用Red Hat Network(RHN)经典版或Red Hat Satellite下载。

  • 随着RHEL 5.8的发布,所有RHEL 5 debuginfo软件包都可以通过Red Hat Network或Red Hat Satellite获得。注意:卫星客户需要激活RHEL 5.8发行后生成的卫星证书,以便能够同步调试通道。

  • 现在,每个基本Red Hat通道都有一个调试子通道。例如,

rhel-i386-client-6
   rhel-i386-client-6-debuginfo
rhel-i386-client-5
   rhel-i386-client-5-debuginfo
rhel-i386-server-6
   rhel-i386-server-6-debuginfo
rhel-x86_64-server-6
   rhel-x86_64-server-6-debuginfo
  • 如果系统是通过subscription-manager注册的,则相关的重新存储目录标签以“ debug-rpms”结尾。使用yum-config-manager或启用它subscription-manager,例如
[root@rhelserver tmp]#   yum-config-manager --enable rhel-6-workstation-debug-rpms
[root@rhelserver tmp]#   subscription-manager repos --enable rhel-6-workstation-debug-rpms

[root@rhelserver tmp]#   yum-config-manager --enable rhel-6-server-debug-rpms
[root@rhelserver tmp]#   subscription-manager repos --enable rhel-6-server-debug-rpms
  • 如果系统已注册到RHN Classic,则将频道添加到客户门户中的系统配置文件中,或使用rhn-channel
[root@rhelserver tmp]#   rhn-channel -a -c rhel-$(uname -i)-client-6-debuginfo -u <Red Hat login> -p <Password>

[root@rhelserver tmp]#   rhn-channel -a -c rhel-$(uname -i)-server-6-debuginfo -u <Red Hat login> -p <Password>
  • 注意:如果rhn-channel指出该频道不存在,请使用以下命令来验证可用频道列表中的正确频道标签:
[root@rhelserver tmp]#   rhn-channel -L

在可用频道列表中验证正确的频道名称。

此外,RHN用户界面已更改为debuginfo从相应的二进制RPM链接到软件包。例如:

https://rhn.redhat.com/rhn/software/packages/details/Overview.do?pid=590664

请注意,底部的“关联的调试信息包”链接直接指向该debuginfo包,而不是ftp.redhat.com

或者,请参阅附录,以获取有关如何从Red Hat Customer Portal手动下载debuginfo文件的指导。

对于Red Hat Enterprise Linux 5.7和更早版本

当前有3个选项来获取debuginfoRHEL 5.7和更早版本的软件包:

  • 通过RHN classic或Red Hat Satellite,请参阅上面的推荐解决方案。

  • RHEL 5已预先配置了yum存储库信息,该信息是轻松下载debuginfo软件包所必需的。此信息位于中/etc/yum.repos.d/rhel-debuginfo.repo。要下载特定的debuginfo软件包,请键入

# debuginfo-install --enablerepo rhel-debuginfo <debuginfo-package>

或者

# yum --enablerepo rhel-debuginfo install <debuginfo-package>

其中debuginfo-package是要下载和安装的debuginfo软件包的名称。

注意:debuginfo-install首选,用于自动解决依赖关系。要使用debuginfo-install,需要在系统上安装yum-utils软件包。

该debuginfo软包可能需要包含的版本信息,以确保安装正确的软件包。例如,要准备一个系统来分析由运行2.6.18-8.el5内核的系统创建的vmcore文件,该命令

# debuginfo-install --enablerepo rhel-debuginfo kernel

或者

# yum --enablerepo rhel-debuginfo install kernel-debuginfo-2.6.18-8.el5

会自动下载并安装与给定版本相对应的kernel-debuginfo软件包。

  • 或者,根据体系结构和发行版本(“客户端”或“服务器”),在此地址手动下载适用于RHEL 5.7及更早版本的debuginfo软件包:

https://ftp.redhat.com/pub/redhat/linux/enterprise/5{Client,Server}/en/os/{arch}/Debuginfo

或者,请参阅附录,以获取有关如何从Red Hat Customer Portal手动下载debuginfo文件的指导。

对于Red Hat Enterprise Linux 2.1、3和4

  • 对于初始版本,根据RHEL的特定版本,可在此地址使用debuginfo软件包:

https://ftp.redhat.com/pub/redhat/linux/enterprise/{2.1{AS,AW,ES,WS},3,4}/en/os/{arch}/Debuginfo/

  • 对于RHEL 2.1、3和4的后续发行版,可在此地址使用debuginfo软件包(同样,取决于特定的风格):

https://ftp.redhat.com/pub/redhat/linux/updates/enterprise/{2.1{AS,AW,ES,WS},3{AS,ES,WS,Desktop},4{AS,WS,ES ,Desktop}} / en / os / Debuginfo / {arch} /

或者,请参阅附录,以获取有关如何从适用于Red Hat Enterprise Linux 4和更高版本的Red Hat Customer Portal手动下载debuginfo文件的指导。

附录

存在一个不受支持但有用的工具,用于在ftp站点上查找Red Hat Enterprise Linux 3、4和5的调试信息包。请参阅Red Hat Enterprise Linux 3、4和5的不受支持的Debuginfo工具

也可以按照以下步骤中的说明,通过Red Hat Customer Portal的Web界面下载软件包。在本示例中,我们使用OS的服务器变体中的Red Hat Enterprise Linux内核作为软件包:

  1. 使用您的用户名和密码登录到Red Hat Customer Portal
  2. 点击页面顶部的下载链接。
  3. 单击Red Hat Enterprise Linux链接以访问该产品的软件包。
  4. 单击“软件包”选项卡,将页面顶部的“版本体系结构”下拉框更改为正确的主要版本和体系结构,然后在过滤器框中输入内核
  5. 您将看到一个搜索结果列表。向下滚动直到在Red Hat Enterprise Linux $ VER Server(RPM)标题下找到内核,然后单击它(将$ VER替换为适当的主要版本,例如5、6或7)。除非您正在寻找Beta软件包,否则请确保标题不表示这些软件包是针对Beta版本的。您可能需要移出搜索结果的第一页,才能在适当的标题下找到内核列表。
  6. 加载内核页面后,更改“版本体系结构”下拉框以匹配所需的内核版本和体系结构。
  7. 向下滚动到“下载”部分,然后单击“立即下载”按钮以下载所需的debuginfo软件包。