Linux 内核崩溃测试,使用Kdump检查Linux内核崩溃

2a1a12d311cf2d8d529955a7c1c95474.png-wh_651x-s_2075779530.png

让我们先看一下 kdump 的根本应用办法,和 kdump/kexec 在内核中是若何实现。

kdump 是获取崩溃的 Linux 内核转储的一种办法,然则想找到解释其应用和内部构造的文档可能有点艰苦。在本文中,我将研究 kdump 的根本应用办法,和 kdump/kexec 在内核中是若何实现。

kexec 是一个 Linux 内核到内核的引导加载法度榜样,可以赞助大年夜第一个内核的高低文引导到第二个内核。kexec 会封闭第一个内核,绕过 BIOS 或固件阶段,并跳转到第二个内核。是以,在没有 BIOS 阶段的情况下,从新启动变得更快。

kdump 可以与 kexec 应用法度榜样一路应用 —— 例如,当第一个内核崩溃时第二个内核启动,第二个内核用于复制第一个内核的内存转储,可以应用 gdb 和 crash 等对象分析崩溃的原因。(在本文中,我将应用术语“第一内核”作为当前运行的内核,“第二内核” 作为应用 kexec 运行的内核,“捕获内核” 表示在当前内核崩溃时运行的内核。)

kexec 机制在内核以及用户空间中都有组件。内核供给了几个用于 kexec 重启功能的体系调用。名为 kexec-tools 的用户空间对象应用这些调用,并供给可履行文件来加载和引导“第二内核”。有的发行版还会在 kexec-tools 上添加封装器,这有助于捕获并保存各类转储目标设备的转储。在本文中,我将应用名为 distro-kexec-tools 的对象来避免上游 kexec 对象和特定于发行版的 kexec-tools 代码之间的混淆。我的例子将应用 Fedora Linux 发行版。

Fedora kexec-tools 对象

kexec_load():kexec_load() 体系调用加载一个可以在之后经由过程 reboot() 履行的新的内核。其原型定义如下:

应用 dnf install kexec-tools 敕令在 Fedora 机械上安装 fedora-kexec-tools。在安装 fedora-kexec-tools 后可以履行 systemctl start kdump 敕令来启动 kdump 办事。当此办事启动时,它将创建一个根文件体系(initramfs),个中包含了要挂载到目标地位的资本,以保存 vmcore,以及用来复制和转储 vmcore 到目标地位的敕令。然后,该办事将内核和 initramfs 加载到崩溃内核区域内的合适地位,以便在内核崩溃时可以履行它们。

Fedora 封装器供给了两个用户设备文件:/etc/kdump.conf 指定修改后须要重建 initramfs 的设备参数。例如,如不雅将转储目标大年夜本地磁盘更改为 NFS 挂载的磁盘,则须要由“捕获内核”所加载的 NFS 相干的内核模块。

/etc/sysconfig/kdump 指定修改后不须要从新构建 initramfs 的设备参数。例如,如不雅只需修改传递给“捕获内核”的敕令行参数,则不须要从新构建 initramfs。

具体信息请参阅 man makedumpfile。

kexec-tools 对象

编译 kexec-tools 的源代码获得了一个名为 kexec 的可履行文件。这个同名的可履行文件可用于加载和履行“第二内核”,或加载“捕获内核”,它可以在内核崩溃时履行。

加载“第二内核”的敕令:# kexec -l kernel.img--initrd=initramfs-image.img –reuse-cmdline

--reuse-command 参数表示应用与“第一内核”雷同的敕令行。应用 --initrd 传递 initramfs。 -l 注解你正在加载“第二内核”,其可以由 kexec 应用法度榜样本身履行(kexec -e)。应用 -l 加载的内核不克不及在内核崩溃时履行。为了加载可以在内核崩溃时履行的“捕获内核”,必须传递参数 -p 代替 -l。

加载捕获内核的敕令:# kexec -p kernel.img--initrd=initramfs-image.img –reuse-cmdline

echo c > /pros/sysrq-trigger 可用于使内核崩溃以进行测试。有关 kexec-tools 供给的选项的具体信息,请参阅 man kexec。在转到下一?部分之前,请看这个 kexec_dump 的演示:

kdump: 端到端流

如不雅内核在 kdump 办事启动之后出现故障,那么“捕获内核”就会履行,其将进一步履行 initramfs 中的 vmcore 保存过程,然后从新启动到稳定的内核。

下图展示了流程图。必须在引导“第一内核”时代为捕获内核保存 crashkernel 的内存。您可以在内核敕令行中传递 crashkernel=Y@X,个中 @X 是可选的。crashkernel=256M 实用于大年夜多半 x86_64 体系;然而,为崩溃内核选择恰当的内存取决于很多身分,如内核大年夜小和 initramfs,以及 initramfs 中包含的模块和应用法度榜样运行时的内存需求。有关传递崩溃内核参数的更多办法,请参阅 kernel-parameters 文档。

3ab4393cd39196a490dc98661531b44e.png

pratyush_f1.png

您可以将内核和 initramfs 镜像传递给 kexec 可履行文件,如(kexec-tools)部分的敕令所示。“捕获内核”可以与“第一内核”雷同,也可以不合。平日,一样即可。Initramfs 是可选的;例如,当内核应用 CONFIG_INITRAMFS_SOURCE 编译时,您不须要它。平日,大年夜第一个 initramfs 中保存一个不一样的捕获 initramfs,因为在捕获 initramfs 中主动履行 vmcore 的副本能获得更好的效不雅。当履行 kexec 时,它还加载了 elfcorehdr 数据和 purgatory 可履行文件(LCTT 译注:purgatory 就是一个引导加载法度榜样,是为 kdump 定作的。它被付与了“炼狱”如许一个古怪的名字应当只是一种奚弄)。 elfcorehdr 具有关于体系内存组织的信息,而 purgatory 可以在“捕获内核”履行之前履行并验证第二阶段的二进制或数据是否具有精确的 SHA。purgatory 也是可选的。

推荐阅读

【51CTO.com原创稿件】7月26日,2017 “云•执掌将来”AWS技巧峰会在北京国度会议中间┞焚开。大年夜会覆盖了基本办事、架构、安然、IoT、大年夜数据、AI等多个热点主题,>>>详细阅读

地址:http://www.17bianji.com/lsqh/36514.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
kdump是一个在Linux内核崩溃时收集dump信息的工具。它的设计目标是在遇到内核崩溃时,能够提供完整的内核转储信息,以便开发人员进行分析和调试。 kdump的工作原理是在系统启动时,设置一个保护内存区域,用于在内核崩溃时存储dump信息。当系统出现崩溃时,kdump会触发一个内核崩溃的路径,将所有的内核状态信息存储在这个保护区域中。然后,kdump会加载一个独立的小内核,这个小内核只包含了最小的功能,仅仅用于将之前存储的内核状态信息写入磁盘。这样,即使主内核发生崩溃,kdump仍然能够将dump信息保存下来。 kdump所收集的dump信息包含了内核的堆栈、寄存器的状态、内核模块列表、内核代码和数据段等。这些信息对于开发人员分析和调试内核问题非常有帮助。无论是内核中的软件错误、硬件故障还是系统配置错误,都能够通过kdump的信息来定位和解决问题。 为了使用kdump,我们首先需要安装kexec工具,然后对系统进行一些配置,如设置内存保护区域的大小、crashkernel参数等。配置完成后,重新启动系统,当系统崩溃时,kdump就会自动工作。 总结来说,kdump是一个非常有用的Linux内核调试工具,能够在内核崩溃时提供完整的dump信息,为开发人员提供了方便的分析和调试手段。它能够帮助我们快速定位和解决各种内核问题,提高系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值