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驱动程序。
如果驱动程序bnx2x和bmx2fc未在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 安装指南中。kdump
Kdump
Installation 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 IOMMU
kdump
Intel 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=
auto
crashkernel=auto
用特定的内存替换值以更改此行为。auto
Open the
/etc/default/grub
configuration file asroot
using a plain text editor such as vim or Gedit.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"Change the value of the required kernel command-line parameter. Then, save the file and exit the editor.
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.cfgOn a system with UEFI firmware, execute the following instead:
来源: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/kernel_administration_guide/listing_of_kernel_parameters_and_values#sect-setting-kernel-parameters#
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 类型
捕获内核崩溃时,核心转储可以作为文件存储在本地文件系统中,直接写入设备,也可以使用 (网络文件系统) 或 (安全外壳) 协议通过网络发送。目前只能设置其中一个选项。默认选项是将文件存储在本地文件系统的目录中。NFS
SSH
vmcore
/var/crash
将文件存储在本地文件系统的目录中:vmcore
/var/crash/
- 编辑文件并指定路径:
/etc/kdump.conf
path /var/crash
该选项表示保存文件的文件系统路径。当您在文件中指定转储目标时,则该目标相对于指定的转储目标。
path /var/crash
kdump
vmcore
/etc/kdump.conf
path
如果您没有在文件中指定转储目标,则该目标表示根目录中的绝对路径。根据当前系统中安装的内容,自动采取转储目标和调整后的转储路径。
/etc/kdump.conf
path
当转储目标安装在目录中时,该文件将保存在目录中,并且选项也设置为文件中。例如,在下示例中,文件系统已安装在以下情况下,并且还设置为:kdump
vmcore
/var/crash/var/crash
/var/crash
path
/var/crash
/etc/kdump.conf
ext4
/var/crash
path
/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/crash
path /
path /var/crash
要更改转储位置,请在文本编辑器中打开配置文件并编辑下面描述的选项。root
/etc/kdump.conf
要更改要保存核心转储的本地目录,请从行的开头删除哈希符号 ("#"),然后用所需的目录路径替换值。#path /var/crash
path /usr/local/cores重要
在红帽企业 Linux 7 中,使用指令定义为 kdump 目标的目录必须在系统服务启动时存在 - 否则服务将失败。此行为与红帽企业 Linux 的早期版本不同,该目录在启动服务时不存在,则会自动创建目录。path
kdump
可选地,如果您希望将文件写到不同的分区,请按照相同的程序从其中一行开始。在这里,您可以使用设备名称(行)、文件系统标签(行)或 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 [email protected]
#sshkey /root/.ssh/kdump_id_rsa
ssh [email protected] sshkey /root/.ssh/mykey
有关如何配置 SSH 服务器并设置基于密钥的身份验证的信息,请参阅红帽企业 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
要启用转储文件压缩,请添加参数。例如:-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 中描述的"支持默认操作"中描述的所需操作替换值。kdump
kdump
root
/etc/kdump.conf
#default shell
例如:
default reboot
7.2.2.5. 启用服务
要在启动时启动"daemon",请在外壳提示下键入以下提示::kdump
root
systemctl
enable
kdump.service
这启用了 服务。同样,键入禁用。要在当前会话中启动服务,请使用以下命令作为:multi-user.target
systemctl
disable
kdump
kdump
root
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个选项来获取debuginfo
RHEL 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内核作为软件包:
- 使用您的用户名和密码登录到Red Hat Customer Portal。
- 点击页面顶部的下载链接。
- 单击Red Hat Enterprise Linux链接以访问该产品的软件包。
- 单击“软件包”选项卡,将页面顶部的“版本和体系结构”下拉框更改为正确的主要版本和体系结构,然后在过滤器框中输入内核。
- 您将看到一个搜索结果列表。向下滚动直到在Red Hat Enterprise Linux $ VER Server(RPM)标题下找到内核,然后单击它(将$ VER替换为适当的主要版本,例如5、6或7)。除非您正在寻找Beta软件包,否则请确保标题不表示这些软件包是针对Beta版本的。您可能需要移出搜索结果的第一页,才能在适当的标题下找到内核列表。
- 加载内核页面后,更改“版本和体系结构”下拉框以匹配所需的内核版本和体系结构。
- 向下滚动到“下载”部分,然后单击“立即下载”按钮以下载所需的debuginfo软件包。