kdumpLinux內核的一個功能,可在發生內核錯誤時創建核心轉儲。當被觸發時,kdump會導出一個內存映像(也稱為vmcore),該映像可用於調試和確定崩潰的原因。 主內存的轉儲映像作為可執行與可鏈接格式(ELF)對象導出,可以在處理內核崩潰時通過/proc/vmcore直接訪問,也可以自動保存到本地可訪問的文件系統、 裸設備或通過網絡訪問的遠程系統。[1][2]

內部

編輯
 
一個「雙核」布局,kdump使用kexec來啟動另一個內核並獲得內存轉儲。:10

在內核崩潰的情況下,kdump通過引導另一個Linux內核(稱為轉儲捕獲內核)並使用它來導出和保存內存轉儲來保持系統一致性。因此,系統將會啟動到一個乾淨、可靠的環境,而不是依賴已經崩潰的內核,(繼續使用已崩潰的內核)這可能會導致各種問題,例如在寫入內存轉儲文件時導致文件系統損壞。為了實現這個「雙內核」布局,kdump在內核崩潰後立即使用kexec引導到轉儲捕獲內核,使用kexec引導「覆蓋」當前運行的內核,同時避免執行bootloader和硬件初始化系統固件(BIOSUEFI)。轉儲捕獲內核可以是專門為此目的而構建的單獨的Linux內核映像,也可以在支持可重定位內核的系統架構上重用主內核映像。[1][3][4][5]:5–6

通過預先保留少量RAM來引導並運行轉儲捕獲內核時,主內存(RAM)的內容得以保留,轉儲捕獲內核預先加載到此內存中,因此主內核使用的RAM都不是在處理內核崩潰時被覆蓋。這些保留的RAM僅由轉儲捕獲內核使用,在正常系統操作期間未被使用。某些架構(包括x86ppc64)需要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). 

外部連結

編輯