Overview
Kdump 是 Linux 核心的一個特殊功能,可在發生 kernel panic 時建立 Core Dump。當出現異常導致 Kdump 被觸發時,kernel 會匯出一個記憶體的 image,其在 Linux 上通稱為 vmcore。該 image 可用於除錯和確定崩潰的原因。這個 image 會以 ELF 格式匯出,可以在處理核心崩潰時通過 /proc/vmcore 直接存取,或者可以也可將其自動儲存到本地或遠端檔案系統。
Kdump 大致的運作方式是: 在 kernel panic 的情況下,Kdump 會引導另一個 Linux kernel(稱為 dump-capture kernel),用它來匯出和儲存記憶體狀態。這麼做的目的是讓系統啟動到一個乾淨、可靠的環境,而不是依賴已經崩潰的 kernel,因為後者可能會引發其他問題反而破壞了原本的異常環境。例如,在寫入記憶體轉儲檔案時導致檔案系統損壞。
為了實現這個「雙核心」的環境,Kdump 在核心崩潰後會立即使用 kexec booting 到 dump-capture kernel,使用 kexec 引導「覆蓋」當前執行的核心,這做法同時避免執行 bootloader 和系統韌體(BIOS/UEFI)的硬體初始化行為。
整體的運作即如下附圖所展示:
image