kdumpとは
kexecを使って起動中のメモリ領域に、kernel panic時に移行する先のカーネルをロードさせておき、kernel panicした時にはその領域からリブートすることでクラッシュダンプを取っておける仕組み。
情報
基本的には
http://dsas.blog.klab.org/archives/50558228.html
Documentation/kdump/kdump.txt
の内容に従う。
環境
2.6.18-8.el5 CentOS5のデフォルトのカーネル。
「方針」であげたページにある要件は、/boot/config-2.6.18-8.el5を見る限り充たしているはず。
ブートオプションには
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
clock=pit noapic nolapic console=ttyS0,9600n8 crashkernel=64M@16M
というように
crashkernel=64M@16M
を追加。
http://dsas.blog.klab.org/archives/50558228.html
を参考に、バニラカーネルを、カーネルオプションをいじってからからビルド。
CONFIG_PHYSICAL_START=0x1000000という設定をmenuconfigで行った*1。
- kexec-tools + kdump patchを入れる
試す
firstカーネルにて
- secondカーネルに飛び込んでみる
kexec SECOND_KERNEL_BUILD_ROOT/arch/i386/boot/bzImage 必要なパラメータがずらずら
成功*2。
kexec -l SECOND_KERNEL_BUILD_ROOT/arch/i386/boot/bzImage 必要なパラメータがずらずら
成功。とりあえずエラーメッセージは出ない。
kexec -p SECOND_KERNEL_BUILD_ROOT/arch/i386/boot/bzImage 必要なパラメータがずらずら
すると
[root@dhcp-100-004 boot]# kexec -p bzImage
Could not find a free area of memory of 9000 bytes...
locate_hole failed
とエラー
ちなみに/proc/iomemは↓のようになっている
[root@dhcp-100-004 boot]# less /proc/iomem
00000000-0009f7ff : System RAM
00000000-00000000 : Crash kernel
0009f800-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000ca000-000cafff : Adapter ROM
000f0000-000fffff : System ROM
00100000-7ceeffff : System RAM
00400000-005fed40 : Kernel code
005fed41-006d292f : Kernel data
7cef0000-7cefefff : ACPI Tables
7ceff000-7cefffff : ACPI Non-volatile Storage
7cf00000-7cffffff : System RAM
80000000-8000ffff : 0000:00:11.0
80010000-80017fff : 0000:00:0f.0
80018000-8001bfff : 0000:00:10.0
e8000000-e87fffff : 0000:00:0f.0
e8800000-e8800fff : 0000:00:10.0
f0000000-f7ffffff : 0000:00:0f.0
fec00000-fec0ffff : reserved
fee00000-fee00fff : reserved
fffe0000-ffffffff : reserved
エラーについて
https://lists.linux-foundation.org/pipermail/fastboot/2007-April/013841.html
kexec-toolsの不都合?
考えられる可能性
- crashkerneオプションとCONFIG_PHYSICAL_STARTで指定している値がおかしい(これが一番怪しい)
- kexec-toolsの不都合
- 単純なミスをどこかで犯している
結構頑張ったんだけど最後のエラーが未だに解決できていません。
誰かエロい人教えてください。