kdump是獲取崩潰的 Linux 內(nèi)核轉(zhuǎn)儲的一種方法驼壶。
kexec是一個 Linux 內(nèi)核到內(nèi)核的引導(dǎo)加載程序,可以幫助從第一個內(nèi)核的上下文引導(dǎo)到第二個內(nèi)核缺亮。kexec 會關(guān)閉第一個內(nèi)核新荤,繞過 BIOS 或固件階段象缀,并跳轉(zhuǎn)到第二個內(nèi)核。因此,在沒有 BIOS 階段的情況下,重新啟動變得更快缕坎。
?? kdump 可以與 kexec 應(yīng)用程序一起使用 —— 例如,當(dāng)?shù)谝粋€內(nèi)核崩潰時第二個內(nèi)核啟動篡悟,第二個內(nèi)核用于復(fù)制第一個內(nèi)核的內(nèi)存轉(zhuǎn)儲谜叹,可以使用 gdb 和 crash 等工具分析崩潰的原因。
??kexec 機(jī)制在內(nèi)核以及用戶空間中都有組件搬葬。內(nèi)核提供了幾個用于 kexec 重啟功能的系統(tǒng)調(diào)用荷腊。名為 kexec-tools 的用戶空間工具使用這些調(diào)用,并提供可執(zhí)行文件來加載和引導(dǎo)“第二內(nèi)核”急凰。有的發(fā)行版還會在 kexec-tools 上添加封裝器女仰,這有助于捕獲并保存各種轉(zhuǎn)儲目標(biāo)配置的轉(zhuǎn)儲。
?? 使用 dnf install kexec-tools 命令在 Fedora 機(jī)器上安裝 fedora-kexec-tools抡锈。安裝 fedora-kexec-tools 后可以執(zhí)行 systemctl start kdump 命令來啟動 kdump 服務(wù)疾忍。當(dāng)此服務(wù)啟動時,它將創(chuàng)建一個根文件系統(tǒng)(initramfs)床三,其中包含了要掛載到目標(biāo)位置的資源一罩,以保存 vmcore,以及用來復(fù)制和轉(zhuǎn)儲 vmcore 到目標(biāo)位置的命令撇簿。然后擒抛,該服務(wù)將內(nèi)核和 initramfs 加載到崩潰內(nèi)核區(qū)域內(nèi)的合適位置,以便在內(nèi)核崩潰時可以執(zhí)行它們补疑。
?? Fedora 封裝器提供了兩個用戶配置文件:
?? ?? /etc/kdump.conf 指定修改后需要重建 initramfs 的配置參數(shù)歧沪。例如,如果將轉(zhuǎn)儲目標(biāo)從本地磁盤更改為 NFS 掛載的磁盤莲组,則需要由“捕獲內(nèi)核”所加載的 NFS 相關(guān)的內(nèi)核模塊诊胞。
?? ?? /etc/sysconfig/kdump 指定修改后不需要重新構(gòu)建 initramfs 的配置參數(shù)。
?? 例如,如果只需修改傳遞給“捕獲內(nèi)核”的命令行參數(shù)撵孤,則不需要重新構(gòu)建 initramfs迈着。
?? 如果內(nèi)核在 kdump 服務(wù)啟動之后出現(xiàn)故障,那么“捕獲內(nèi)核”就會執(zhí)行邪码,其將進(jìn)一步執(zhí)行 initramfs 中的 vmcore 保存過程裕菠,然后重新啟動到穩(wěn)定的內(nèi)核。
?? 加載當(dāng)前使用kexec內(nèi)核的命令:
kexec -l kernel.img --initrd=initramfs-image.img –reuse-cmdline
--reuse-command 參數(shù)表示使用與當(dāng)前運(yùn)行內(nèi)核相同的命令行闭专。使用 --initrd 傳遞 initramfs奴潘。 -l 表明你正在加載使用kexec的內(nèi)核,其可以由 kexec 應(yīng)用程序本身執(zhí)行(kexec -e)影钉。使用 -l 加載的內(nèi)核不能在內(nèi)核崩潰時執(zhí)行画髓。為了加載可以在內(nèi)核崩潰時執(zhí)行的當(dāng)前內(nèi)核崩潰時運(yùn)行的內(nèi)核,必須傳遞參數(shù) -p 取代 -l平委。
?? 加載當(dāng)前內(nèi)核運(yùn)行崩潰時運(yùn)行的內(nèi)核:
kexec -p kernel.img --initrd=initramfs-image.img –reuse-cmdline
echo c > /pros/sysrq-trigger
可用于使內(nèi)核崩潰以進(jìn)行測試奈虾。