カーネルダンプツールkdumpの使い方とそれの解析方法

  • 手順
    • Documentation/kdump/kdump.txt に手順があるらしいのでkernel-docをインストール
# rpm -ivh kernel-doc-2.6.18-164.el5.noarch.rpm
$ rpm -ql kernel-doc | grep kdump
/usr/share/doc/kernel-doc-2.6.18/Documentation/kdump
/usr/share/doc/kernel-doc-2.6.18/Documentation/kdump/gdbmacros.txt
/usr/share/doc/kernel-doc-2.6.18/Documentation/kdump/kdump.txt
    • 使えるかの確認
// CONFIG_KEXEC, CONFIG_DEBUG_INFO がyesのカーネル?
# grep KEXEC /boot/config-2.6.18-164.el5
CONFIG_KEXEC=y
# grep DEBUG_INFO /boot/config-2.6.18-164.el5
CONFIG_DEBUG_INFO=y
    • インストール
# rpm -ivh kexec-tools-1.102pre-77.el5.i386.rpm --test
エラー: 依存性の欠如:
busybox >= 1.2.0 は kexec-tools-1.102pre-77.el5.i386 に必要とされています
# rpm -ivh busybox-1.2.0-7.el5.centos.i386.rpm \
           kexec-tools-1.102pre-77.el5.i386.rpm --test
// http://people.redhat.com/anderson/ にすべての場合のdebuginfoが存在する。
// ↓は調べるマシンにあれば良い
# wget  \
  ftp://ftp.redhat.com/pub/redhat/\
  linux/enterprise/5Server/en/os/\
  i386/Debuginfo/kernel-debuginfo-2.6.18-164.el5.i686.rpm
# wget ftp://ftp.redhat.com/pub/redhat/\
  linux/enterprise/5Server/en/os/\
  i386/Debuginfo/kernel-debuginfo-common-2.6.18-164.el5.i686.rpm
# rpm -ivh kernel-debuginfo-2.6.18-164.el5.i686.rpm \
           kernel-debuginfo-common-2.6.18-164.el5.i686.rpm

# vi /boot/grub/grub.conf
 kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 -以下に
 kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 crashkernel=128M@16M +変更
# chkconfig --list | grep kdump
kdump           0:off   1:off   2:off   3:off   4:off   5:off   6:off
# chkconfig kdump on --level 3
# chkconfig --list | grep kdump
kdump           0:off   1:off   2:off   3:on    4:off   5:off   6:off
# reboot (service kdump restartではダメ)

# cat /proc/iomem
00100000-1ffeffff : System RAM
  00400000-0061aaa7 : Kernel code
  0061aaa8-006fb9db : Kernel data
  01000000-08ffffff : Crash kernel <- dump用に確保された
    • kernel panicのテスト。
# echo 1 > /proc/sys/kernel/sysrq
# echo c > /proc/sysrq-trigger
(ここでkernel panicが起きて自動的に再起動する)
    • 解析
○Sysmap(動作中のメモリマップ)
# ls /boot/System.map-2.6.18-164.el5

○vmlinuz(kernel-debuginfoに含まれる)
# rpm -qpl kernel-debuginfo-2.6.18-164.el5.i686.rpm  | grep vmlinux
警告: kernel-debuginfo-2.6.18-164.el5.i686.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 37017186
/usr/lib/debug/lib/modules/2.6.18-164.el5/vmlinux

○core dump(panicしたときのcoredump)
# ls /var/crash/2010-04-30-16\:30/vmcore
/var/crash/2010-04-30-16:30/vmcore

 crash System.map vmlinux vmcore の書式で〜
# crash /boot/System.map-2.6.18-164.el5 \
        /usr/lib/debug/lib/modules/2.6.18-164.el5/vmlinux \
        /var/crash/2010-04-30-16:30/vmcore
        
Linux crash dump 読み方入門(pdf)参照
crash> log
Bluetooth: HIDP (Human Interface Emulation) ver 1.1
NET: Registered protocol family 10
lo: Disabled Privacy Extensions
IPv6 over IPv4 tunneling driver
SysRq : Trigger a crashdump              <- SysRq が確認できた!
crash> bt
PID: 2221   TASK: dff45aa0  CPU: 0   COMMAND: "bash"
 #0 [dc676f08] crash_kexec at c0443093
 #1 [dc676f50] __handle_sysrq at c0544841
 #2 [dc676f78] write_sysrq_trigger at c04a72f9  <- sysrq_triggerが確認できた!
 #3 [dc676f84] vfs_write at c04744c5
 #4 [dc676f9c] sys_write at c0474ab4
 #5 [dc676fb8] system_call at c0404f10
    EAX: ffffffda  EBX: 00000001  ECX: b7c22000  EDX: 00000002
    DS:  007b      ESI: 00000002  ES:  007b      EDI: b7c22000
    SS:  007b      ESP: bfa8f9f8  EBP: bfa8fa18
    CS:  0073      EIP: 00e88402  ERR: 00000004  EFLAGS: 00000246