Kdump
kdump是Linux内核的一个功能,可在发生内核错误时创建核心转储。当被触发时,kdump会导出一个内存映像(也称为vmcore),该映像可用于调试和确定崩溃的原因。 主内存的转储映像作为可执行与可链接格式(ELF)对象导出,可以在处理内核崩溃时通过/proc/vmcore
直接访问,也可以自动保存到本地可访问的文件系统、 裸设备或通过网络访问的远程系统。[1][2]
内部
在内核崩溃的情况下,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 – Linux一个专门为调试目的而设计的基于RAM的文件系统
- kdump (BSD) – 用于查看由ktrace实用程序生成的跟踪文件的BSD实用程序
- Linux内核oops – 一个潜在的非致命性偏离正确的行为Linux内核
参考文献
- ^ 1.0 1.1 1.2 Jonathan Corbet. Crash dumps with kexec. LWN.net. October 27, 2004 [August 9, 2014]. (原始内容存档于2020-04-01).
- ^ 13.2 About Kdump (Chapter 13: Support Diagnostic Tools). Oracle Corporation. 2012 [August 9, 2014]. (原始内容存档于2019-04-22).
- ^ 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.0 4.1 Linux kernel documentation: Documentation/kdump/kdump.txt. kernel.org. August 12, 2013 [August 9, 2014]. (原始内容存档于2020-08-06).
- ^ Takashi Iwai. Debugging using Kdump (PDF). SUSE. July 26, 2006 [August 9, 2014]. (原始内容存档 (PDF)于2016-11-30).
- ^ 29.2.2. Using the Kernel Dump Configuration Utility (Red Hat Enterprise Linux 6 Deployment Guide). Red Hat. [August 9, 2014]. (原始内容存档于2017-07-05).
- ^ kexec and kdump: Basic kdump Configuration (System Analysis and Tuning Guide). SUSE. April 25, 2014 [August 9, 2014]. (原始内容存档于2016-03-04).
- ^ How to use kdump to debug kernel crashes. Fedora. April 9, 2014 [August 9, 2014]. (原始内容存档于2020-11-12).
- ^ David Anderson. White Paper: Red Hat Crash Utility. Red Hat. August 27, 2010 [August 9, 2014]. (原始内容存档于2018-12-10).
- ^ kexec and kdump: Analyzing the Crash Dump (System Analysis and Tuning Guide). SUSE. April 25, 2014 [August 9, 2014]. (原始内容存档于2016-03-04).
- ^ 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