測試環境為 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 請參考 – https://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 詳細使用方式請參考 https://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