Linux內核崩潰轉存機制
kdump概念:
當系統崩潰時,kdump 使用 kexec 啟動到第二個內核,第二個內核通常叫做捕獲內核,以很小內存啟動以捕獲轉儲鏡像。第一個內核保留了內存的一部分給第二內核啟動用。由於 kdump 利用 kexec 啟動捕獲內核,繞過了 BIOS,所以第一個內核的內存得以保留。這是內核崩潰轉儲的本質。
繼續學習:https://link.jianshu.com?t=http://www.ibm.com/developerworks/cn/linux/l-cn-kdump1/index.html#major3
kdump正常運行的條件:
1. 系統中開啟kdump服務
2. 啟動文件配置中,合理分配了崩潰內存容量
檢查系統中kdump狀態的方法:
CentOS6: service kdump status
CentOS7: systemctl status kdump.service
開啟系統中kdump的方法:
1. Centos6.x操作說明:
(1) grub修改預留內存
a. 切換至root用戶
b. vi /etc/grub.conf
c. 找到title 條目后我們要使用的系統及內核項
d. 找到條目中kernel配置項下的“crashkernel=????”字段(如果沒有則手動添加)
e. 將=????修改為合適的大小
可選大小:
crashkernel=128M:
crashkernel=256M: 建議值
crashkernel=512M:
crashkernel=auto: 如果系統的內存 <= 8 GB 對kdump kernel不會保留任何內容(等同於關閉kdump),如果系統的內存> 8 GB但是<= 16 GB,crashkernel=auto會保留256M,等同於crashkernel=256M,如果系統內存> 16GB, crashkernel=auto會保留512M, 等同於crashkernel=512M.
f. 保存文件后退出
(2) 開啟kdump服務
a. 設置開機啟動: chkconfig kdump on
b. 啟動kdump: service kdump start
c. 查看dkump狀態: service kdump status
(3) 檢查
a. 重新啟動系統
b. 查看dkump狀態: service kdump status
c. 檢查grub: cat /proc/cmdline 內容與步驟1中修改的內容相同即為操作成功
(4) 測試
a. 查看log目錄內容: ls /var/crash/
b. 觸發系統崩潰: echo c > /proc/sysrq-trigger
此時系統崩潰,進行轉儲,轉儲后系統自動重啟
c. 查看是否生成新的崩潰文件,同步驟a,有新文件生成則kdump運行正常
2. Centos7.x操作說明:
(1) grub修改預留內存
a. 切換至root用戶
b. vi /etc/default/grub
c. 找到GRUB_CMDLINE_LINUX項
d. 將配置項中的“crashkernel=????”字段(如果沒有則手動添加)
e. 將=????修改為合適的大小
可選大小:
crashkernel=128M:
crashkernel=256M: 建議值
crashkernel=512M:
crashkernel=auto: 如果系統的內存 <= 8 GB 對kdump kernel不會保留任何內容(等同於關閉kdump),如果系統的內存> 8 GB但是<= 16 GB,crashkernel=auto會保留256M,等同於crashkernel=256M,如果系統內存> 16GB, crashkernel=auto會保留512M, 等同於crashkernel=512M.
f. 保存文件后退出
g. 執行命令: grub2-mkconfig -o /boot/grub2/grub.cfg
h. 再執行命令: grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
(g和h為冗余項,分別對應不同的系統安裝方式,這里為了簡化操作,所以全部執行)
(2) 開啟kdump服務
a. 啟動kdump: systemctl start kdump.service
b. 設置開機啟動: systemctl enable kdump.service
c. 查看dkump狀態: systemctl status kdump.service
(3) 檢查
a. 重新啟動系統
b. 查看dkump狀態: systemctl status kdump.service
c. 檢查grub: cat /proc/cmdline 內容與步驟1中修改的內容相同即為操作成功
(4) 測試
a. 查看log目錄內容: ls /var/crash/
b. 觸發系統崩潰: echo c > /proc/sysrq-trigger
此時系統崩潰,進行轉儲,轉儲后系統自動重啟
c. 查看是否生成新的崩潰文件,同步驟a,有新文件生成則kdump運行正常
修改kdump默認配置:
vim /etc/kdump.conf
coredump文件目錄 path /var/crash
加上-c表示壓縮,原文件中沒有 core_collector makedumpfile -c -l -message-level 1 -d 31
生成coredump后,重啟系統 default reboot
echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger