Kdump

kdumpLinux内核的一个功能,可在发生内核错误时创建核心转储。当被触发时,kdump会导出一个内存映像(也称为vmcore),该映像可用于调试和确定崩溃的原因。 主内存的转储映像作为可执行与可链接格式(ELF)对象导出,可以在处理内核崩溃时通过/proc/vmcore直接访问,也可以自动保存到本地可访问的文件系统、 裸设备或通过网络访问的远程系统。[1][2]

内部

一个“双核”布局,kdump使用kexec来启动另一个内核并获得内存转储。:10

在内核崩溃的情况下,kdump通过引导另一个Linux内核(称为转储捕获内核)并使用它来导出和保存内存转储来保持系统一致性。因此,系统将会启动到一个干净、可靠的环境,而不是依赖已经崩溃的内核,(继续使用已崩溃的内核)这可能会导致各种问题,例如在写入内存转储文件时导致文件系统损坏。为了实现这个“双内核”布局,kdump在内核崩溃后立即使用kexec引导到转储捕获内核,使用kexec引导“覆盖”当前运行的内核,同时避免执行bootloader和硬件初始化系统固件(BIOS或UEFI)。转储捕获内核可以是专门为此目的而构建的单独的Linux内核映像,也可以在支持可重定位内核的系统架构上重用主内核映像。[1][3][4][5]:5–6

通过预先保留少量RAM来引导并运行转储捕获内核时,主内存(RAM)的内容得以保留,转储捕获内核预先加载到此内存中,因此主内核使用的RAM都不是在处理内核崩溃时被覆盖。这些保留的RAM仅由转储捕获内核使用,在正常系统操作期间未被使用。某些架构(包括x86和ppc64)需要RAM的一个小的固定位置部分来引导内核,而不管它在哪里加载;在这种情况下,kexec会创建该部分RAM的副本,以便转储捕获内核也可以访问它。RAM保留部分的大小和可选位置通过内核启动参数crashkernel指定,并且在主内核启动之后使用kexec控制台应用程序来将转储捕获内核映像及其关联的initrd映像预加载到保留部分的RAM。[1][3][4]

除了作为Linux内核一部分的功能外,其他用户空间实用程序也支持kdump机制,包括上述的kexec实用程序。 除了作为kexec用户空间实用程序套件的补丁提供的官方实用程序外,某些Linux发行版还提供了其他实用程序,可简化kdump操作的配置,包括自动保存内存转储文件的设置。[6][7][8] 可以使用GNU Debugger(gdb)或Red Hat的专用崩溃实用程序分析创建的内存转储文件。[9][10]

历史

kdump功能与kexec一起被合并到内核版本2.6.13的Linux内核主线中,该版本于2005年8月29日发布 [11]

参见

  • debugfs英语debugfs – Linux一个专门为调试目的而设计的基于RAM的文件系统
  • kdump (BSD)英语kdump (BSD) – 用于查看由ktrace实用程序生成的跟踪文件的BSD实用程序
  • Linux内核oops – 一个潜在的非致命性偏离正确的行为Linux内核

参考文献

  1. ^ 1.0 1.1 1.2 Jonathan Corbet. Crash dumps with kexec. LWN.net. October 27, 2004 [August 9, 2014]. (原始内容存档于2020-04-01). 
  2. ^ 13.2 About Kdump (Chapter 13: Support Diagnostic Tools). Oracle Corporation. 2012 [August 9, 2014]. (原始内容存档于2019-04-22). 
  3. ^ 3.0 3.1 Vivek Goyal; Eric W. Biederman; Hariprasad Nellitheertha. Kdump: A Kexec-based Kernel Crash Dumping Mechanism (PDF). lse.sourceforge.net. June 14, 2006 [August 9, 2014]. (原始内容存档 (PDF)于2017-08-22). 
  4. ^ 4.0 4.1 Linux kernel documentation: Documentation/kdump/kdump.txt. kernel.org. August 12, 2013 [August 9, 2014]. (原始内容存档于2020-08-06). 
  5. ^ Takashi Iwai. Debugging using Kdump (PDF). SUSE. July 26, 2006 [August 9, 2014]. (原始内容存档 (PDF)于2016-11-30). 
  6. ^ 29.2.2. Using the Kernel Dump Configuration Utility (Red Hat Enterprise Linux 6 Deployment Guide). Red Hat. [August 9, 2014]. (原始内容存档于2017-07-05). 
  7. ^ kexec and kdump: Basic kdump Configuration (System Analysis and Tuning Guide). SUSE. April 25, 2014 [August 9, 2014]. (原始内容存档于2016-03-04). 
  8. ^ How to use kdump to debug kernel crashes. Fedora. April 9, 2014 [August 9, 2014]. (原始内容存档于2020-11-12). 
  9. ^ David Anderson. White Paper: Red Hat Crash Utility. Red Hat. August 27, 2010 [August 9, 2014]. (原始内容存档于2018-12-10). 
  10. ^ kexec and kdump: Analyzing the Crash Dump (System Analysis and Tuning Guide). SUSE. April 25, 2014 [August 9, 2014]. (原始内容存档于2016-03-04). 
  11. ^ Linux kernel 2.6.13. August 29, 2005 [August 9, 2014]. (原始内容存档于2020-10-19). 

外部链接

  • 官方网站
  • Kdump, a Kexec-based Kernel Crash Dumping Mechanism (页面存档备份,存于互联网档案馆), IBM, 2005, by Vivek Goyal, Eric W. Biederman, and Hariprasad Nellitheertha


组织
内核
支持
技术
调试
  • CRIU英语CRIU
  • ftrace英语ftrace
  • kdump
  • Linux内核oops
  • SystemTap英语SystemTap
启动过程
ABI
API
用户空间
FS守护进程
封装库
内核部分
系统调用接口
内核内
  • ALSA
  • DRI
  • Video4Linux
  • New API英语New API
  • Crypto API英语Crypto API (Linux)
内核组件
  • 安全模块AppArmor
  • Exec Shield英语Exec Shield
  • grsecurity英语grsecurity
    • PaX英语PaX
  • seccomp英语seccomp
  • SELinux
  • Smack
  • TOMOYO Linux英语TOMOYO Linux
  • Linux PAM英语Linux PAM
  • initramfs
  • kexec
  • kGraft英语kGraft
  • kpatch英语kpatch
  • Ksplice
变种
虛擬化
采用
使用范围
采用者
  • Linux采用者列表
  • GENIVI联盟
  • Linux专有软件
人物
  • 分类 分类
  • 共享资源页面 共享资源
  • 维基百科图书 教科书
  • 维基学院页面 学院
  • 主题 主题
概述
  • 宣传英语Operating system advocacy
  • 比较英语Comparison of operating systems
  • 鑑識软件工程英语Forensic software engineering
  • 历史
  • 爱好者开发英语Hobbyist operating system development
  • 列表
  • 年表
  • 份额
内核
组件
行程管理
概念
调度算法
記憶體管理和資源保护
存储访问和文件系统
操作系统列表
其他概念