Linux – kdump

測試環境為 CnetOS 7 x86_64 (虛擬機)

安裝完系統後會詢問是否要開啟 Enable kdump (Kernel dump) 的功能,什麼是 kdump?

kdump 是 Linux kernel 的一個功能,當 kernel crash 時 kdump 會把目前核心的記憶體情況儲存起來至 /var/crash/timestamp/vmcore ,之後可以透過 crash 這支程式來分析該這映像檔用以除錯.

當啟動 kdump 時,系統需要重新開機,新開機的系統會有兩個 kernel 存在,一個就是一般的 system kernel 另外一個就是 kdupm 的 crash kernel (須預留一塊記憶體空間使用).

如果在安裝過程中沒有啟動 kdump ,要啟動可以透過下面的設定.

先檢查目前 kdump 的狀態

[root@localhost ~]# systemctl status kdump

沒有的話需要在 GRUB2 新增 crashkernel 參數,透過編輯 /etc/default/grub 設定開機參數 GRUB_CMDLINE_LINUX .關於使用 GRUB2 請參考 – http://benjr.tw/95009

增加 crashkernel=128M,保留 128 MB 的記憶體給 kdump 來使用.

[root@localhost ~]# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet crashkernel=128M"
GRUB_DISABLE_RECOVERY="true"

grub 檔案內任何設定修改後都需要執行 grub-mkconfig 將修改的內容回寫至 /boot/grub/grub.cfg

[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

需要重新開機讓設定生效.

[root@localhost ~]# reboot

重新開機檢查後檢查 kdump 的狀態.

[root@localhost ~]# systemctl enable kdump
[root@localhost ~]# systemctl status kdump
● kdump.service - Crash recovery kernel arming
   Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
   Active: active (exited) since 五 2018-08-10 04:25:53 EDT; 1min 39s ago
  Process: 1053 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)
 Main PID: 1053 (code=exited, status=0/SUCCESS)
    Tasks: 0
   CGroup: /system.slice/kdump.service

 8月 10 04:25:47 localhost.localdomain systemd[1]: Starting Crash recovery k...
 8月 10 04:25:53 localhost.localdomain kdumpctl[1053]: kexec: loaded kdump k...
 8月 10 04:25:53 localhost.localdomain kdumpctl[1053]: Starting kdump: [OK]
 8月 10 04:25:53 localhost.localdomain systemd[1]: Started Crash recovery ke...
Hint: Some lines were ellipsized, use -l to show in full.

透過下面的指令來測試看看 kdump 是否真的有設定成功.

[root@localhost ~]# echo 1 > /proc/sys/kernel/sysrq
[root@localhost ~]# echo c > /proc/sysrq-trigger

預設 sysrq-trigger 是 enable 的,設定 1 代表 enable all functions of sysrq,詳細參數請參考 https://fedoraproject.org/wiki/QA/Sysrq
透過 sysrq-trigger 讓系統進行 kexec crashdump 的 reboot.

重開機後可以看到 /var/crash/timestamp/ 有產生檔案.

[root@localhost ~]# ll /var/crash/127.0.0.1-2018-08-10-03\:13\:56/
總計 46776
-rw------- 1 root root 47764177  8月 10 03:13 vmcore
-rw-r--r-- 1 root root   129016  8月 10 03:13 vmcore-dmesg.txt

可以透過 crash 這支程式來分析該這映像檔用以除錯,需要透過 yum 安裝套件 crash 與 debuginfo-install 安裝 kernel 詳細使用方式請參考 http://benjr.tw/22406

[root@localhost ~]# yum install crash
[root@localhost ~]# debuginfo-install kernel
[root@localhost ~]# crash /usr/lib/debug/lib/modules/`uname -r`/vmlinux /var/crash/127.0.0.1-2018-08-10-03\:13\:56/vmcore
沒有解決問題,試試搜尋本站其他內容

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料