[Linux] 開啟 kdump 來保留 kernel crash dump
一樣是因為在準備公司 Debug Hacks 的讀書會報告,所以碰到了 kdump 這個東西~
一直以來我都是在應用程式層開發居多,沒有去碰過 kernel,
所以雖然有聽過 kdump,但並不知道要如何使用它~
藉著讀書會的機會,學習了一下如何開啟 kdump,
之後應該也會學到如何去看 kernel dump,這次的讀書會感覺不錯呢~^^
參考資料:
CONFIGURING KDUMP ON THE COMMAND LINE
1. 編輯 /etc/default/grub
在 /etc/default/grub 檔案裡,找到 GRUB_CMDLINE_LINUX 這一行,
如果裡面沒有 crashkernel 的字的話,加上 crashkernel=128M,
表示要保留 128 MB 的記憶體供 kdump 使用:
GRUB_TIMEOUT=5 GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet crashkernel=128M" GRUB_DISABLE_RECOVERY="true"
接著執行 grub2-mkconfig 根據我們的修改,產生新的設定檔:
grub2-mkconfig -o /boot/grub2/grub.cfg
設定檔產生後,要記得重開機,才能繼續下一步~
要注意修改 grub 這一步是必須的,不然接下來就算啟動 kdump service,
也一樣會報告錯誤喔~
2. 啟動 kdump 服務
執行下面的指令,讓 kdump service 除了現在啟動之外,之後也會自動啟動:
systemctl enable kdump.service
systemctl start kdump.service
3. 測試 kdump 是否設定成功
要測試 kdump 是否設定成功,最準確的方法就是產生一個 kernel crash,
看看 kdump 是不是會捕捉到錯誤並產生 dump 檔~
執行下面的指令,讓 kernel 立刻產生一個 crash,
會看到 console 畫面上秀出一些 kdump 的訊息,
當 dump 建立好之後,就會重開機了~
echo "c" > /proc/sysrq-trigger
重開機後,到 /var/crash 目錄,
如果有看到接近現在時間的目錄,應該就有成功產生 kernel dump 了,
目錄裡面的 vmcore 就是 kernel dump 檔:
[root@localhost ~]# ll /var/crash/127.0.0.1-2015.09.20-02\:23\:55/ total 24016 -rw-------. 1 root root 24553243 Sep 20 02:23 vmcore -rw-r--r--. 1 root root 35823 Sep 20 02:23 vmcore-dmesg.txt
至於要如何從這個 dump 檔裡面查出 crash 的原因…
現在還沒學到,之後學到了再來分享吧 XD~