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). 

外部連結