2012年10月1日月曜日

kdump でクラッシュダンプを取得しよう

ご無沙汰しています。サイオステクノロジーの鎌田です。

OSS よろず相談室でよくお問い合わせいただくものの中に、OS がハングアップしたり、kernel がクラッシュしてシステムが停止する事例があります。画面上やログに、その問題が起きた形跡が記録されていると、ある程度調査を行うことは可能ですが、より詳細に調査を行うためにはクラッシュダンプが必要になります。

今回は、そのクラッシュダンプを取得する方法である kdump について書きたいと思います。

kdump の設定方法

kdump は、クラッシュダンプ取得用の特別の kernel を起動させるため、実メモリの一部を kdump 用に確保する必要があります。確保するサイズとしては 128 MB が一般的ですので、昨今のメモリ容量が豊富にある状況では特に問題にならないと思います。

それでは、実際の設定方法を紹介しようと思いますが、前提として以下の動作を検証した環境は CentOS 6.3 (x86_64) です。RHEL 系であれば RHEL 5 から kdump が提供されていますので、適宜読み替えてください。

kdump の設定には、kexec-tools パッケージがインストールされている必要があります。インストールしていない場合は、以下のコマンドで kexec-tools パッケージをインストールしましょう。

# yum install kexec-tools

次に、kernel の起動パラメータに kdump 用に確保するメモリ領域の設定をします。デフォルトの自動のままで構わないと思いますが、環境によっては大きめに設定する必要があるかもしれませんので、変更する場合はkernel行にcrashkernel=512Mのように記述します。

title CentOS (2.6.32-279.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-279.el6.x86_64 <中略> crashkernel=auto
        initrd /initramfs-2.6.32-279.el6.x86_64.img

次は、クラッシュダンプを出力する先の設定方法について、出力先ごとに設定方法を記載します。

クラッシュダンプ出力用のストレージ領域を別途用意できる場合

kdump を設定するホストに、クラッシュダンプの出力先として別のディスクや空き領域を用意できる場合、この設定方法を採用できます。クラッシュダンプを出力する際は、用意したストレージ領域に一旦書き込みを行い、OS 再起動後に書き込んだクラッシュダンプを読み込んで、/var/crashディレクトリ配下にvmcoreファイルを保存します。

parted等で領域を確保した後、/etc/kdump.confに以下の設定を記述してください。

raw /dev/sdb1

クラッシュダンプを特定のファイルシステムに出力する場合

kdump を設定するホストに、実メモリの容量以上に空いている領域がある場合、クラッシュダンプの出力先としてその領域が設定できます。指定できるファイルシステムとして、ext4、ext3、ext2 や、LVM 上などにも出力できます。以下は、ext4 のファイルシステムに出力する例です。/etc/kdump.confに設定を記述してください。

ext4 /dev/sdb1

クラッシュダンプを NFS 経由で他のホストに出力する場合

kdump では、クラッシュダンプの出力先をローカルホスト内に限らず、ネットワーク越しの出力も設定することができます。その一つとして、NFS を使ったクラッシュダンプの出力を行うことができます。NFS 経由で他のホストにクラッシュダンプを出力する場合、/etc/kdump.confに以下の設定を記述してください。

net nfsserver.example.com:/path/to/dir

クラッシュダンプを SSH 経由で他のホストに出力する場合

ネットワーク越しにクラッシュダンプを出力するもう一つの方法として、SSH 経由で出力する方法があります。/etc/kdump.confに以下の設定を記述してください。

net kdumpuser@sshserver.example.com

なお、SSH 経由でクラッシュダンプを出力する設定を行う場合、事前に SSH 鍵の登録作業が必要になります。以下のコマンドを実行して、SSH 鍵を登録しておいてください。

# service kdump propagate

以上で kdump の設定は終了です。kernel の起動オプションにcrashkernelを設定後、OS を再起動していない場合は OS を再起動し、既に OS を再起動している場合は、kdump サービスを再起動してください。

# service kdump restart

これで、万が一 kernel がクラッシュしてもクラッシュダンプが出力され、原因の詳細な調査を行うことができます。

0 件のコメント:

コメントを投稿