Kdump 是一種的新的crash dump捕獲機制,用來捕獲kernel crash時候產生的crash dump。Kdump需要配置兩個不同目的的kernel,其中一個我們在這里稱作standard(production) kernel;另外一個稱之為Crash(capture)kernel。
standard(production)kernel,是指我正在使用的kernel,當standard kernel在使用的過程中出現crash的時候, kdump會切換到crash kernel, 簡單來說,standard kernel會正運行時發生crash,而crash(capture) Kernel 會被用來捕獲production kernel crash時候產生的crash dump。
捕獲crash dump是在新的crash(capture) kernel 的上下文中來捕獲的,而不是在standard kernel上下文進行。
具體是當standard kernel方式crash的時候,kdump通過kexec(后面介紹)自動啟動進入到crash kernel當中。如果啟動了kdump服務,standard kernel會預留一部分內存, 這部分內存用來啟動crash kernel。
kdump機制主要包括兩個組件:kdump和kexec
kexec 是一個快速啟動kernel的機制,它運行在某一正在運行的kernel中,啟動一個新的kernel(這里是crash kernel),而且不用重新經過BIOS 就可以完成啟動。因為一般BIOS都會花費很長的時間,尤其是在大型並且同時連接許多外部設備的Server上的環境下,BIOS會花費更多的時間。
目前RHEL5、6 的linux distribution都會默認安裝kdump,kdump的具體配置方法如下:
1、kdump服務退避區以所用磁盤設置
kdump退避區大小為:(memory容量+2GB)*2以上
kdump退避區磁盤的文件格式: 要求與根目錄的格式一樣,通常為ext3格式,但RHEL6系統支持ext4格式。
2、分區后dump規避域的label設置
此處sda5作為退避去為例:
# e2label /dev/sdb5 /dump #設置
# e2label /dev/sdb5 #確認
/dump
3、 Kdump服務相關包的安裝確認
- busybox
- kexec-tools
- kernel-debuginfo
- kernel-debuginfo-common
- kernel-devel
- FJSVdumptools (只有RHEL6系列上測試kdump時需要安裝)
4、kernel信息的設置
需要在/etc/sysctl.conf文件中,做如下修改:
kernel.sysrq = 1
kernel.panic_on_oops = 1
kernel.panic = 1
kernel.panic_on_unrecovered_nmi = 1 *
kernel.unknown_nmi_panic = 1 *
注意:在IA64上設置時,不要設置*標記的兩項。
5、kdump配置文件的設置
在文件/etc/kdump.conf中,做一下設置:
ext3 LABEL=/dump ①
path /
core_collector makedumpfile
default reboot②
注:①dump采集區域中定義/dump和標簽,並將該標簽定義為dump退避域。
②采集dump后的動作指定為reboot。采集dump后的動作只能是重啟系統。
6、kdump服務的設置
設置kdump開機啟動,通過以下命令設置:
# chkconfig kdump on
設置結果確認,通過以下命令確認:
# chkconfig --list kdump
kdump 0:off 1:off 2:on 3:on 4:on 5:on 6:off
7、grub的相關配置
x86和x64上設置文件/etc/grub.conf(即/boot/grub/grub.conf文件),ia64上設置文件/etc/efi/efi/redhat/elilo.conf,對文件中系統啟動項對應的kernel參數進行如下設置:
kernel ・・・nmi_watchdog=0 crashkernel=128M@16M ①
注:
①在RHEL5系列的系統中,指定格式為“128M@16M”(在RHEL6系中由於存在BUG,格式只能為128M)。其中128M表示分配給kdump使用的內存大小,16M表示所分配內存在物理內存中的起點。
Kdump保留內存大小 = 128MB + (LUN數x80KB + )CPU數x1.2MB
8、重啟系統,查看Kdump服務是否成功
# service kdump status
Kdump is operational
9、測試,通過sysrq強制系統崩潰,方法如下:
# echo “c” > /proc/sysrq-trigger
這造成kernel panic,緊跟着系統重啟kdump內核。當啟動進程進入到啟動kdump服務器時,vmcore將會被拷貝到你所設定的退避去的位置。