2006年07月05日

Linuxでクラッシュダンプを採取(1) 〜 kexec + kdump を使ってみる 〜

はてなブックマークに登録

専用パーティーションを切らずにシステムを構築してしまったがために、クラッシュダンプを採取できなくて苦しんでいる人(って私ですが)にとってはとっても魅力的な仕組みがカーネルに取り込まれたみたいです。導入手順も Documentation/kdump/kdump.txt に非常にわかりやすく書かれているので、比較的スムーズに組み込むことができそうな予感がします。


この仕組みは、カーネルパニック時に kexec の機能を利用して別のカーネル(kdumpを組み込んだもの)を起動すると、/proc/vmcore から元のカーネルのクラッシュダンプを採取できるというものなので、通常利用するカーネル(以下、ファーストカーネル)と、パニック時に動き始めるカーネル(以下、セカンドカーネル)の二つのカーネルを作る必要があります。

以下、kdump.txt より抜粋


A) First kernel or regular kernel:
----------------------------------
a) Enable "kexec system call" feature (in Processor type and features).
CONFIG_KEXEC=y
b) Enable "sysfs file system support" (in Pseudo filesystems).
CONFIG_SYSFS=y




B) Second kernel or dump capture kernel:
---------------------------------------
a) For i386 architecture enable Highmem support
CONFIG_HIGHMEM=y
b) Enable "kernel crash dumps" feature (under "Processor type and features")
CONFIG_CRASH_DUMP=y
c) Make sure a suitable value for "Physical address where the kernel is
loaded" (under "Processor type and features"). By default this value
is 0x1000000 (16MB) and it should be same as X (See option d above),
e.g., 16 MB or 0x1000000.
CONFIG_PHYSICAL_START=0x1000000
d) Enable "/proc/vmcore support" (Optional, under "Pseudo filesystems").
CONFIG_PROC_VMCORE=y



まずはファーストカーネルを作ってみます。
一見面倒そうですが、やることは既存のカーネルに

CONFIG_SYSFS=y
CONFIG_KEXEC=y

を追加するだけなので、すでに kexec が利用可能な環境であれば不要な作業です。


# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz
# tar zxvf linux-2.6.16.tar.gz
# mv linux-2.6.16.23 linux-2.6.16.23-first
# cd linux-2.6.16.23-first
# make menuconfig
# make;make make_modules_install
# cp System.map /boot/System.map-2.6.16.23
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.16.23-first
# ln -snf System.map-2.6.16.23 /boot/System.map
# ln -snf vmlinuz-2.6.16.23-first /boot/vmlinuz




同様にセカンドカーネルを作ります。
ここで注意すべき点は、NICHDDを認識できる必要最低限のドライバのみを組み込んでおく点です。セカンドカーネルの目的は、「クラッシュダンプをできるだけ確実に別の媒体に保存すること」なので不要な機能はできるだけ削ってしまいましょう。


# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz
# tar zxvf linux-2.6.16.tar.gz
# mv linux-2.6.16.23 linux-2.6.16.23-second
# cd linux-2.6.16.23-second
# make menuconfig
# make
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.16.23-second
# ln -snf vmlinuz-2.6.16.23-second /boot/vmlinuz-second




次に kexec-tools + kdump patch をインストールします。


# wget http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-1.101.tar.gz
# wget http://lse.sourceforge.net/kdump/patches/kexec-tools-1.101-kdump9.patch
# tar -zxvf kexec-tools-1.101.tar.gz
# cd kexec-tools-1.101
# patch -p1 < ../kexec-tools-1.101-kdump9.patch
# ./configure
# make
# make install




次にブートローダの設定ファイルを編集して、起動オプションにcrashkernel=64M@16M を追加します。

/boot/grub/menu.lst の内容

default=0
timeout=10

title Linux
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda3 crashkernel=64M@16M



ここまでで、下ごしらえはほとんどおわりです。
再起動して vmlinuz-2.6.16.23-first カーネルで起動できれば一安心です。

あとは、kexecコマンドでセカンドカーネルを読み込ませて、パニックをさせてみるとなんとなく動きそうな気もしますが、実際の運用を想定するといろいろ課題が残ってそうです。セカンドカーネルを立ち上げっぱなしにしておくわけにもいきませんし・・・
要はセカンドカーネルが起動された際には /proc/vmcoreをどっかに保存して再起動するなどの仕組みを入れる必要があると思いますが、その辺については次回までに考えておきたいと思います。


klab_gijutsu2 at 22:30│Comments(0)TrackBack(1)

トラックバックURL

この記事へのトラックバック

1. メモリダンプ、取得、場所、設定・・・w  [ らびっと・か〜ねるのじぉろぐ ]   2007年05月25日 15:30
ぃや、業務でね。 メモリダンプってのをサポートに送付するハメになったので^^; ちょっとだけ、お勉強をしましたょっとb 利用しているOSはRedhatなんです。 Googleさんで検索していたトキには netdump ってのしか無いとか思ってますた。 けど、サ...

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント
最新トラックバック
Archives