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