青島網(wǎng)站制作服務(wù)商/如何做好網(wǎng)站推廣優(yōu)化
1. kdump基本原理
1.1 內(nèi)核崩潰處理機(jī)制
當(dāng) Linux 系統(tǒng)內(nèi)核發(fā)生崩潰時(shí),通常會(huì)觸發(fā) panic,系統(tǒng)停止正常運(yùn)行。Kdump 在這種情況下:
- 使用一個(gè)備用的內(nèi)核(稱為 crash kernel)來(lái)啟動(dòng)最小化的環(huán)境。
- 從崩潰的主內(nèi)核中復(fù)制內(nèi)存內(nèi)容(轉(zhuǎn)儲(chǔ)文件)。
- 將轉(zhuǎn)儲(chǔ)文件保存到預(yù)定義的存儲(chǔ)位置(如本地磁盤、網(wǎng)絡(luò)服務(wù)器等)。
1.2 Crash Kernel 的作用
Kdump 的核心是依賴 Crash Kernel,這是一段預(yù)留的內(nèi)存和獨(dú)立的內(nèi)核,用于在主內(nèi)核崩潰后接管系統(tǒng)。
- 主內(nèi)核崩潰后,控制權(quán)切換到 Crash Kernel。
- Crash Kernel 通過(guò)訪問(wèn)主內(nèi)核的內(nèi)存(物理地址)生成轉(zhuǎn)儲(chǔ)文件。
2 Kdump 的工作流程
2.1 內(nèi)存預(yù)留
在系統(tǒng)啟動(dòng)時(shí),通過(guò)內(nèi)核參數(shù)(crashkernel)為 Crash Kernel 預(yù)留一部分內(nèi)存(通常是 128M 或更多)。
編輯 GRUB 配置文件,添加 crashkernel 參數(shù)預(yù)留內(nèi)存:
GRUB_CMDLINE_LINUX="crashkernel=256M"
2.2 Crash Kernel 加載
系統(tǒng)啟動(dòng)時(shí),Crash Kernel 和主內(nèi)核一起加載到內(nèi)存中,但 Crash Kernel處于非活動(dòng)狀態(tài)。
2.3 觸發(fā)崩潰
- 主內(nèi)核發(fā)生崩潰(如 panic)
- 或人為觸發(fā)崩潰(通過(guò) echo c > /proc/sysrq-trigger)
2.4 Crash Kernel 啟動(dòng)
系統(tǒng)重啟到 Crash Kernel 環(huán)境。
Crash Kernel 通過(guò)訪問(wèn)崩潰的主內(nèi)核內(nèi)存區(qū)域,捕獲內(nèi)存內(nèi)容并保存。
2.5 保存轉(zhuǎn)儲(chǔ)文件
Crash Kernel 將捕獲的內(nèi)存轉(zhuǎn)儲(chǔ)文件(vmcore)保存到本地磁盤、NFS、或其他預(yù)定義路徑。
3. Kdump 的配置
3.1 內(nèi)核支持
Kdump 的關(guān)鍵組件是 kexec,它允許系統(tǒng)在內(nèi)核崩潰時(shí)直接加載并啟動(dòng)一個(gè)新的內(nèi)核(Crash Kernel)。因此,標(biāo)準(zhǔn)內(nèi)核必須啟用 kexec 功能。
檢查是否啟用了 kexec
可以通過(guò)以下命令檢查是否啟用了 kexec:
$ grep CONFIG_KEXEC /boot/config-$(uname -r)CONFIG_KEXEC=y
如果沒(méi)有啟用,您需要重新編譯內(nèi)核并啟用該功能,或者安裝一個(gè)啟用了該功能的預(yù)編譯內(nèi)核。
檢查是否支持 crashkernel
通過(guò)檢查內(nèi)核配置文件(如 /boot/config-$(uname -r))確認(rèn)是否啟用支持:
$ grep CONFIG_CRASH_KEXEC /boot/config-$(uname -r)CONFIG_CRASH_KEXEC=y
## 或者
CONFIG_CRASH_DUMP=y
CONFIG_CRASH_CORE