目次
kexec は現在実行中のカーネルとは別のカーネルを起動するためのツールです。 これにより、ハードウエアの初期化作業を省略して、より高速なシステムの起動を 行なうことができます。またシステムがクラッシュした場合に備え、他のカーネルを 起動するための準備としても利用することができます。
kexec を利用することで、ハードウエア側の再起動を利用することなく、実行中の カーネルを入れ替えることができます。このツールは下記のような理由により、 便利な仕組みになっています:
より高速なシステム再起動のため
何らかの理由でシステムを定期的に再起動しなければならない場合、 kexec は再起動にかかる時間を削減することができます。
信頼できないファームウエアやハードウエアの回避のため
コンピュータのハードウエアは複雑なものになってしまっていて、 重大な問題がシステムの起動時に発生してしまう場合があります。このような 場合、即時に信頼のできないハードウエアを取り替える必要がありますが、 kexec を利用することで、ハードウエアが既に初期化された、制御可能な 状態でカーネルを起動することができます。これによって、システムの 起動が失敗してしまうリスクを最小限に抑えることができます。
クラッシュしたカーネルのダンプ保存のため
kexec は物理メモリ内の内容を保持するような仕組みになっています。 本番用 として使用しているカーネルの動作に何らかの 問題が発生した場合、 キャプチャ 専用のカーネル (予約された メモリの範囲内で動作する追加のカーネル) が動作して、問題が発生したときの状態を 保存することができます。保存されたイメージは、さらなる分析のために利用する ことができるようになります。
GRUB や LILO の設定を使用しない起動のため
kexec を利用してカーネルを起動する場合、ブートローダの手順を飛ばして 動作します。これにより、通常の起動処理が、ブートローダ側の設定ミスに よって失敗してしまうようなリスクを防ぐことができます。 kexec では、 既存のブートローダ設定を使用しません。
openSUSE® 上で kexec を再起動の高速化や潜在的なハードウエア
問題を避けるために使用したい場合は、 kexec-tools
パッケージをインストールする必要があります。このパッケージには
kexec-bootloader というスクリプトが含まれていて、ここから
ブートローダの設定を読み込み、 kexec を通常のブートローダが
行なうのと同じオプション設定でカーネルを起動することができます。
kexec-bootloader -h
を実行すると、
利用可能なオプション一覧を表示することができます。
カーネルクラッシュの際に、有益なデバッグ情報を取得できるように環境を設定
するには、さらに makedumpfile
パッケージを
インストールする必要があります。
openSUSE で kdump を使用する際には、 YaST の Kdump モジュールを使用
するのがお勧めです。シェルを起動して root
の状態になり、
zypper install yast2-kdump を実行し、
yast2-kdump
パッケージをインストールしてください。
kexec で最も重要なコンポーネントは /sbin/kexec
コマンドです。 kexec を利用してカーネルを読み込む際、 2 種類の方法で
読み込むことができます:
kexec -l
カーネルイメージ
として実行すると、通常の再起動のように、本番のカーネルが
存在するアドレス領域にカーネルを読み込むことができます。読み込んだ後は、
kexec -e
でカーネルを起動することが
できます。
kexec -p
カーネルイメージ
として実行すると、カーネルを予約領域内に読み込むことができます。
これにより、このカーネルはシステムクラッシュ時に自動起動されるように
なります。
システムがクラッシュした場合に他のカーネルを起動し、本番用としてそれまで
使用していたカーネルのデータを保持したい場合は、システムメモリ内に専用の
領域を予約しておく必要があります。このとき、本番用のカーネルはその領域を
使用することはなく、常に空けたままの状態にしておきます。この領域はキャプチャ
作業用のカーネルのもので、それまで使用していた本番カーネルの領域を保持
するために用意します。メモリ領域の予約を行なうには、本番カーネルの起動時に
crashkernel
= サイズ@オフセット
というパラメータを設定します。なお、このパラメータはキャプチャ作業用の
カーネルパラメータではありません。キャプチャカーネル側では kexec を使用
することはありません。
キャプチャカーネルは予約用の領域に読み込まれ、カーネルがクラッシュするのを 待機します。 kdump は本番カーネルがクラッシュすると、キャプチャカーネル側 を実行しようとします。これは本番用に使用していたカーネルは、その時点では 既に信頼できるものではないためです。このことから、場合によっては kdump が失敗する場合もあります。
キャプチャカーネルを読み込むには、カーネルの起動パラメータ内にそれらを設定
します。通常は初期 RAM ファイルシステム (initrd) を使用して設定します。
初期 RAM ファイルシステムは --initrd
=
ファイル名
の形式で指定します。また、
--append
= コマンドライン
のように指定すると、起動するカーネルに対してコマンドラインオプションを追加
することができます。これは本番用のカーネルに設定されていた、カーネルの起動に
必要なオプションを設定するのに便利な機能です。本番用のカーネルに設定されて
いるものをコピーするだけであれば --append
= "$(cat /proc/cmdline)"
と設定してもかまいません
し、 --append
= "$(cat /proc/cmdline)
追加オプション"
として追加のものを設定してもかまいません。
なお、読み込み済みのカーネルはいつでも読み込みを解除することができます。
-l
オプションで読み込んだカーネルの読み込みを解除する
には、 kexec -u
コマンドを使用します。
-p
オプションで読み込んだクラッシュカーネルの読み込みを
解除するには、 kexec -p
-u
コマンドを使用します。
お使いの kexec 環境が正しく動作することを確認するには、下記の手順を 実施します:
現在ログイン中のユーザが存在せず、重要なサービスについてもシステム上で 動作していないことを確認します。
root
でログインします。
telinit 1
を実行して、ランレベル 1
に移行します。
本番用のカーネル内にあるアドレス領域に対して、新しいカーネルを読み込む には、下記のように実行します:
kexec -l
/boot/vmlinuz
--append
="$(cat
/proc/cmdline)"
--initrd
=/boot/initrd
ルートファイルシステムを除き、すべてのマウント済みファイルシステム
のマウントを umount -a
で解除
します。
ルートファイルシステムのマウント解除について | |
---|---|
ファイルシステムのマウントを解除する場合、よく発生するのが
|
ルートファイルシステムを読み込み専用モードで再マウントします:
mount -o
remount,ro
/
kexec -e
を実行し、
ステップ 4 で読み込んでおいた
カーネルで起動を行ないます。
以前に読み書き可能な状態でマウントしていたディスクボリュームについて、
これらのマウントを解除する作業が重要な点です。これは、
reboot
のシステムコールが呼び出されるとすぐに
動作してしまうため、読み書き可能な状態で
マウントされているハードディスクドライブのボリュームが存在すると、自動では
同期もマウント解除も行なわれないためです。この場合は、新しいカーネルが
それらを 「汚れた」 状態にあるものとして認識します。読み込み
専用のディスクボリュームと、仮想的なファイルシステムについては、マウント
を解除する必要はありません。マウントを解除すべきファイルシステムの
一覧を得たい場合は、 /etc/mtab
ファイルをお読み
ください。
新しい方のカーネルは、古いほうのカーネル内のアドレス領域内に読み込まれた あと、古いカーネルを置き換えて動作し、即時に制御を獲得します。これにより、 通常の起動メッセージが表示されます。また、新しいカーネルが起動すると、 すべてのハードウエア初期化作業とファームウエアチェックが飛ばされます。 このとき、一切の警告メッセージが表示されないことを確認してください。 すべてのファイルシステムは、以前の段階でマウント解除されていれば、 正常な (汚れてはいない) 状態になります。
kexec は頻繁に再起動するような環境でしばしば使用されます。また、たとえば ハードウエアの検出ルーチンを実行するのに長い時間がかかる場合や、起動そのものが 信頼できないような環境でも使用します。
kexec を利用した再起動 | |
---|---|
openSUSE® の以前のバージョンでは、設定ファイル
|
なお、ブートローダとファームウエアについては、 kexec を利用した再起動の 際には使用されることはないことに注意してください。ブートローダに対して 行なった変更が存在する場合、実際の (ハードウエアの) 再起動を行なわない 限り、設定は無視されます。
kdump を使用することで、カーネルのダンプを保存することができます。カーネル がクラッシュした場合、クラッシュした環境内のメモリイメージをファイル システムにコピーしておくことで、カーネルクラッシュの原因を調べることが できるためです。これを 「コアダンプ」 と呼びます。
kdump は kexec (詳しくは 第18章 kexec と kdump をお読みください) に似た動作をします。キャプチャカーネルは本番用のカーネルがクラッシュした 後に動作し始めるもので、 kexec では本番用のカーネルがキャプチャカーネルに 置き換わる動作をしていましたが、 kdump ではクラッシュした本番用のカーネルが 存在するメモリ領域について、以前と同じくアクセスできるという点が異なります。 このことから、 kdump カーネルの環境内からクラッシュしたカーネルのメモリ スナップショットを採取することができるようになっています。
kdump は手作業で設定することができるほか、 YaST を利用して行なうことも できます。
kdump は自身の設定を /etc/sysconfig/kdump
ファイル
から読み込みます。お使いのシステムで kdump が動作することを確認するには、
まず既定の設定ファイルを利用して行なってください。 kdump を既定の設定の
まま使用するには、下記のような手順で行ないます:
お使いのブートローダの設定ファイルに、下記のようなカーネルのコマンドライン オプションを追加して、システムを再起動します:
crashkernel=
サイズ@オフセット
それぞれ サイズ
と オフセット
の値には、下記の表に書かれている値を指定します:
表18.1 追加のカーネルコマンドラインパラメータに対する推奨値
アーキテクチャ |
推奨値 | ||||
---|---|---|---|---|---|
i386 および x86-64 |
| ||||
IA64 |
crashkernel=256M (小規模システムの場合) または crashkernel=512M (大規模システムの場合) | ||||
ppc64 |
crashkernel=128M@4M または crashkernel=256M@M4 (大規模システムの場合) |
kdump 初期化スクリプトを有効にします:
chkconfig boot.kdump
on
/etc/sysconfig/kdump
内のオプション設定を修正する
こともできます。それぞれ値の意味については、それぞれコメント欄に
書かれている説明をお読みください。
rckdump start
の初期化
スクリプトを実行するか、もしくはシステムを再起動します。
kdump を既定値で設定したあとは、期待通りに動作することを確認します。 なお動作確認を行なう際には、お使いのシステムに誰もログインしていないこと、 および重要なサービスが動作していないことを確認しておいてください。 動作確認は下記のようにして行ないます:
telinit 1
を実行して、
ランレベル 1 に切り替えます。
ルートファイルシステムを除く、すべてのディスクのファイルシステムについて
マウントを解除します。これは umount -a
を実行すると実施することができます。
ルートファイルシステムについては、読み込み専用モードで再マウント
します: mount -o
remount,ro /
Magic SysRq キーに対する procfs
のインターフェイスを
利用して、 「カーネルパニック」 を発生させます:
echo c
>/proc/sysrq-trigger
カーネルダンプのサイズ | |
---|---|
|
キャプチャカーネルが起動すると、クラッシュしたほうのカーネルについて、
メモリのスナップショットがファイルシステム内に保存されます。保存先のパスは
KDUMP_SAVEDIR
オプションで設定し、既定では
/var/crash
に設定されています。また、
KDUMP_IMMEDIATE_REBOOT
を yes
に設定
すると、システムはその後本番用のカーネルを利用して再起動します。
再起動が完了したらログインを行なうと、 /var/crash
内のダンプを確認することができるようになります。
X11 セッション内での画面フリーズ | |
---|---|
X11 セッションにログインしている状態で kdump の制御下に移行すると、 画面には全く表示がなされないまま画面の動きが止まり (フリーズし) ます。 kdump の動きのうちのいくつかは表示から確認することができます (たとえば画面上に起動中のカーネルに関する形の崩れたメッセージが現われたり します) 。 このような場合でも、コンピュータをリセットしたりはしないでください。 kdump が動作を完了するのにしばらくの時間が必要であるためです。 |
kdump を YaST から設定するには、まず yast2-kdump
パッケージをインストールする必要があります。インストールが完了したら、
root
から YaST コントロールセンター の カテゴリ内にある
モジュールを起動するか、もしくは
コマンドラインで yast2 kdump と入力します。
まず
ウインドウでは、 を選択します。 kdump メモリについては既定値のままでかまいません。ほとんどの システムで十分な値になっているためです。次に左側の一覧で
を選択します。ここでは ダンプにどのページを含めるかを設定します。カーネルの問題をデバッグするに あたっては、下記のメモリ内容については含めなくてもかまいません:ゼロで埋められたページ
ページのキャッシュ
ユーザデータページ
使われていないページ
さらに
のウインドウでは、ダンプの保存先の種類 と保存先の URL を指定します。 FTP や SSH などのネットワークプロトコルを 選択した場合は、必要なアクセス情報についても設定を行なう必要があります。続いて
のウインドウでは、 kdump に対して 電子メールを介した通知を送信させるための設定を行なうことができます。 各項目を設定し終えたら、 を押してウインドウを閉じて ください。なお、 ウインドウを利用して より細かい設定を行なうこともできます。これで kdump の設定は完了です。ダンプファイルを採取したら、次はそれを解析する段階です。これにはいくつかの 方法があります。
ダンプを解析する際のもっとも原始的なツールが GDB です。もちろん最新の環境でも GDB を利用することができますが、いくつかの不都合や制限があります:
GDB はカーネルダンプのデバッグ用に特化した作りにはなっていません。
GDB は 32 ビットプラットフォームにおいて、 ELF64 バイナリには 対応していません。
GDB は ELF ダンプ以外の形式を解釈できません (圧縮ダンプにも対応して いません) 。
上記のような問題により、 crash ユーティリティが 作成されるようになりました。 crash ユーティリティは クラッシュダンプを解析するほか、動作中のシステムからでもデバッグを行なう ことができます。また、 Linux カーネルのデバッグ固有の機能も提供されて いて、より高度なデバッグ作業に便利な作りになっています。
Linux カーネルをデバッグしたい場合は、デバッグ情報のパッケージについても あらかじめインストールしておく必要があります。お使いのシステムに該当する パッケージがインストールされているかどうかを確認するには、 zypper se kernel | grep debug を実行してください。
デバッグ情報のパッケージリポジトリ | |
---|---|
お使いのシステムでオンライン更新の購読を行なっている場合、
「debuginfo」 パッケージは |
お使いのマシンで採取されたダンプを crash
で開くには、
下記のようなコマンドを実行します:
crash /boot/vmlinux-2.6.32.8-0.1-default.gz /var/crash/2010-04-23-11\:17/vmcore
最初のパラメータではカーネルイメージを指定します。 2 つめのパラメータでは
kdump で採取されたダンプファイルを指定します。ダンプファイルは、既定では
/var/crash
ディレクトリ内に保存されます。
Linux カーネルは Executable and Linkable Format (ELF) という形式で作成
されています。このファイルは通常 vmlinux
と呼ばれ、
コンパイル処理の際に直接作成されます。すべてのブートローダでサポート
されているというわけではありません (特に x86 環境 (i386, x86_64) 以外)
では ELF バイナリに対応しています。 openSUSE® でサポートされる
アーキテクチャでは、それぞれ下記のような解決方法があります。
多くは歴史上の経緯によるものですが、 Linux カーネルは 2 種類のパートから
構成されます: 1 つは Linux カーネルそれ自身 (vmlinux
) 、
もう 1 つはブートローダが実行するセットアップコードです。
これら 2 つのパートは bzImage
と呼ばれるファイルに
まとめられます。このファイルはカーネルのソースツリー内に存在するはずの
ものです。このファイルは現在では、 vmlinuz
(x
ではなく z
であることに注意
してください) とカーネルパッケージ内で呼ばれます。
ELF イメージは x86 環境では直接使用されることはありません。そのため、
カーネルパッケージの本体である vmlinux
ファイルは、
圧縮された vmlinux.gz
という形式で配置されます。
要約すると、 x86 環境の SUSE カーネルパッケージには、 2 種類の カーネルファイルが存在することになります:
ブートローダで実行される vmlinuz
ファイル。
crash や GDB で利用する圧縮 ELF イメージ
vmlinux.gz
ファイル。
IA64 アーキテクチャ上で Linux カーネルを起動するためのブートローダ
elilo
では、特に何らかの作業を行なわなくても
ELF 形式の読み込みに対応しています (圧縮されているものにも対応しています) 。
IA64 のカーネルパッケージには vmlinuz
と呼ばれる
圧縮 ELF イメージのファイルのみが含まれていて、これは x86 環境における
vmlinux.gz
ファイルと同じ形式のものになっています。
PPC 環境では yaboot
ブートローダを使用しますが、
このブートローダは ELF イメージの読み込みには対応しているものの、圧縮された
形式には対応していません。そのため、 PPC 版のカーネルパッケージには、
ELF 形式の Linux カーネルファイル vmlinux
だけが
存在しています。 crash を使用するにあたっては、
もっとも扱いやすいアーキテクチャであると言えます。
他のマシンでダンプを解析しようとしている場合は、まずコンピュータの アーキテクチャと、デバッグに必要なファイルが存在しているかどうかを確認 しなければなりません。
他のコンピュータでダンプを解析するにあたっては、そのマシンでは同じ
アーキテクチャの Linux システムを動作させる必要があります。互換性を確認
するには、両方のコンピュータで uname -i
を実行し、出力が同じであることを確認してください。
なお、他のコンピュータでダンプを解析する場合は、 kernel
や kernel debug
パッケージに含まれるファイルも
必要となることに注意してください。
まずはカーネルダンプと、 /boot
ディレクトリに
あるカーネルイメージを用意します。また、関連するデバッグ情報ファイルを
/usr/lib/debug/boot
ディレクトリから専用の
単一ディレクトリにコピーします。
あわせて /lib/modules/$(uname -r)/kernel/
ディレクトリにあるカーネルモジュールと、
/usr/lib/debug/lib/modules/$(uname -r)/kernel/
ディレクトリにある関連するデバッグ情報ファイルをコピーします。
コピー先は modules
というサブディレクトリに行なって
ください。
ダンプとカーネルイメージ、およびカーネルのデバッグ情報ファイル、そして
modules
サブディレクトリが存在する状態で、
crash ユーティリティを起動します: crash
vmlinux-(バージョン) vmcore
カーネルイメージに対するサポート | |
---|---|
圧縮されたカーネルイメージ (gzip による圧縮形式で、 bzImage ファイルは
除きます) への対応については、 SUSE パッケージでは openSUSE® 11 以降の
バージョンで対応しています。古いバージョンをお使いの場合は、
|
どのコンピュータでダンプの解析を行なう場合であっても、 crash ユーティリティは 下記のような出力を行ないます:
tux@mercury:~> crash /boot/vmlinux-2.6.32.8-0.1-default.gz /var/crash/2010-04-23-11\:17/vmcore crash 4.0-7.6 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc. Copyright (C) 2004, 2005, 2006 IBM Corporation Copyright (C) 1999-2006 Hewlett-Packard Co Copyright (C) 2005, 2006 Fujitsu Limited Copyright (C) 2006, 2007 VA Linux Systems Japan K.K. Copyright (C) 2005 NEC Corporation Copyright (C) 1999, 2002, 2007 Silicon Graphics, Inc. Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc. This program is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Enter "help copying" to see the conditions. This program has absolutely no warranty. Enter "help warranty" for details. GNU gdb 6.1 Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu"... KERNEL: /boot/vmlinux-2.6.32.8-0.1-default.gz DEBUGINFO: /usr/lib/debug/boot/vmlinux-2.6.32.8-0.1-default.debug DUMPFILE: /var/crash/2009-04-23-11:17/vmcore CPUS: 2 DATE: Thu Apr 23 13:17:01 2010 UPTIME: 00:10:41 LOAD AVERAGE: 0.01, 0.09, 0.09 TASKS: 42 NODENAME: eros RELEASE: 2.6.32.8-0.1-default VERSION: #1 SMP 2010-03-31 14:50:44 +0200 MACHINE: x86_64 (2999 Mhz) MEMORY: 1 GB PANIC: "SysRq : Trigger a crashdump" PID: 9446 COMMAND: "bash" TASK: ffff88003a57c3c0 [THREAD_INFO: ffff880037168000] CPU: 1 STATE: TASK_RUNNING (SYSRQ) crash>
コマンドの出力では、最初に有益な情報が出力されます。上記の例では、クラッシュ 時点で 42 個のタスクが存在していて、クラッシュの原因はプロセス ID (PID) 9446 による SysRq トリガーであることが示されています。また、原因となったプロセスは Bash プロセスであることが示されています。これは前述の例で、 echo コマンドという Bash シェルの内部コマンドを利用した ことによるものです。
crash ユーティリティはその後 GDB を起動し、多数の追加 コマンドを提供します。たとえば bt コマンドをパラメータ 無しで入力すると、クラッシュが発生した時点でのタスクに対して、バックトレースを 表示させることができます:
crash> bt PID: 9446 TASK: ffff88003a57c3c0 CPU: 1 COMMAND: "bash" #0 [ffff880037169db0] crash_kexec at ffffffff80268fd6 #1 [ffff880037169e80] __handle_sysrq at ffffffff803d50ed #2 [ffff880037169ec0] write_sysrq_trigger at ffffffff802f6fc5 #3 [ffff880037169ed0] proc_reg_write at ffffffff802f068b #4 [ffff880037169f10] vfs_write at ffffffff802b1aba #5 [ffff880037169f40] sys_write at ffffffff802b1c1f #6 [ffff880037169f80] system_call_fastpath at ffffffff8020bfbb RIP: 00007fa958991f60 RSP: 00007fff61330390 RFLAGS: 00010246 RAX: 0000000000000001 RBX: ffffffff8020bfbb RCX: 0000000000000001 RDX: 0000000000000002 RSI: 00007fa959284000 RDI: 0000000000000001 RBP: 0000000000000002 R8: 00007fa9592516f0 R9: 00007fa958c209c0 R10: 00007fa958c209c0 R11: 0000000000000246 R12: 00007fa958c1f780 R13: 00007fa959284000 R14: 0000000000000002 R15: 00000000595569d0 ORIG_RAX: 0000000000000001 CS: 0033 SS: 002b crash>
ここでようやく何が行なっているのかが明確になります。内部コマンドである
echo は /proc/sysrq-trigger
というファイルに対して文字を送信します。対応するハンドラがその文字を認識
し、 crash_kexec()
関数を呼び出します。この関数は
panic()
を呼び出し、 kdump がダンプを保存する動作を
行なっていたことになります。
基本的な GDB コマンドや bt の拡張版に加え、 crash ユーティリティでは Linux カーネルの構造に対応した数多くのコマンドが用意されて います。これらのコマンドは Linux カーネルの内部データ構造を理解するもので、 それらの内容を人間にとって読み取りやすい形式で表示します。たとえばクラッシュが 発生した時点でのタスク一覧を表示させたい場合は、 ps コマンドを利用します。また sym コマンドでは、すべての カーネルシンボル情報と対応するアドレスを一覧表示することができるほか、個別の シンボルに対してアドレスを表示することもできます。それ以外にも files コマンドでは、プロセスが開いているすべてのファイル ディスクリプタを表示することができます。さらに kmem では、 カーネルのメモリ使用に関する詳細な情報を得ることもできます。それ以外にも、 vm コマンドではプロセスの仮想メモリや個別のページマッピングに 対して調査を行なうことができます。これ以外にも便利なコマンドが多数用意されて いて、様々なオプション指定を行なうことができるようになっています。
上述のコマンドは、いずれも一般的な Linux コマンドである ps や lsof などの機能に対応しています。デバッガを利用して正確な イベント順序を調査したい場合は、 GDB の使い方に関する知識を得て、高度なデバッグ 技術を習得しておく必要があります。これらの知識や技術は本ドキュメントの範疇外で あるため、説明は行なっていません。加えて、 Linux カーネルに関する知識も必要と なります。いくつかの有益な参照情報源については、このドキュメントの末尾に示して います。
kdump の設定は /etc/sysconfig/kdump
ファイル内に保存されて
います。 YaST を利用して設定することもできます。 YaST を利用した設定を行なう
場合は、 YaST コントロールセンター から + を選択してください。それぞれ下記に示す kdump
オプションが便利でしょう:
カーネルダンプを出力するディレクトリを指定するには、 KDUMP_SAVEDIR
オプションを使用します。なお、カーネルダンプのファイルサイズは非常に大きくなる可能性が
あることに注意してください。 kdump は、ディスクの空き容量からダンプファイルの見積もり
サイズを引いた値が KDUMP_FREE_DISK_SIZE
オプションで指定した値
よりも少ない場合、ダンプの保存を拒否します。また、 KDUMP_SAVEDIR では URL 形式
(プロトコル://仕様
) で指定を行なうことができます。ここで
プロトコル
は file
,
ftp
, sftp
, nfs
,
cifs
のいずれかを指定し、 仕様
にはそれぞれの
プロトコルにあった指定を行ないます。たとえば FTP サーバ上にカーネルダンプを保存する
には、 ftp://ユーザ名:パスワード@ftp.example.com:123/var/crash
のように指定します。
カーネルダンプは前述の通り非常に大きくなるものであり、分析には不要な多くのページ情報が
含まれています。 KDUMP_DUMPLEVEL
オプションでは、不要なページ
情報を省略するかどうかを設定することができます。このオプションでは 0 から 31 までの
整数を指定します。 0
を指定した場合は、ダンプファイルが
最も大きくなります。逆に 31
を指定すると、最も小さい
ダンプファイルを生成する意味になります。指定可能な値に関する詳細情報については、
kdump のマニュアルページ (man 7 kdump)
をお読みください。
また、カーネルダンプのサイズを小さくする方法がもう 1 つあります。たとえばネットワーク
を介してダンプを転送する場合や、ダンプディレクトリにディスク領域を残しておきたいような
場合は、 KDUMP_DUMPFORMAT
に compressed
(圧縮する) を設定してください。 crash ユーティリティでは、圧縮された
ダンプに対する動的な展開にも対応しています。
kdump 設定ファイルの変更 | |
---|---|
|
本ドキュメントでは kexec や kdump の使用方法に関してすべての範囲を網羅できていません。 それぞれ下記に示す情報資源を参照して必要な情報を得てください:
kexec ユーティリティの使用方法については、 kexec のマニュアル ページ (man 8 kexec) をお読みください。
kexec に関する一般的な情報については、 http://www.ibm.com/developerworks/jp/linux/library/l-kexec/index.html をお読みください。リンク先の情報は少し古いものになっています。
kdump のうち、 SUSE Linux 固有の箇所に関する情報は、 http://ftp.suse.com/pub/people/tiwai/kdump-training/kdump-training.pdf (英語) をお読みください。
kdump の内部に関するより深い情報については、 http://lse.sourceforge.net/kdump/documentation/ols2oo5-kdump-paper.pdf (英語) をお読みください。
crash によるダンプ分析や、デバッグツールに関する詳細な情報は、 それぞれ下記をお読みください:
GDB の info ページ (info gdb) に加え、印刷もできる形式の ガイド資料が http://sourceware.org/gdb/documentation/ (英語) で公開されています。
crash ユーティリティの使用方法に関する説明用のホワイトペーパーが http://people.redhat.com/anderson/crash_whitepaper/ (英語) で公開されています。
crash ユーティリティでは完全なオンラインヘルプも用意されています。特定のコマンド
に対してオンラインヘルプを表示させたい場合は、
help コマンド
を実行してください。
必要な Perl 技術をお持ちの場合は、 Alicia を利用してデバッグを簡素化することも できます。この Perl ベースの crash ユーティリティ向けフロントエンドは、 http://alicia.sourceforge.net/ (英語) で公開されています。
Perl ではなく Python をご希望の場合は、 Pykdump というツールをインストールする こともできます。このパッケージは Python スクリプトから GDB を制御することが できるもので、 http://sf.net/projects/pykdump (英語) から ダウンロード可能です。
Linux カーネルの内部に関する広範囲の概要を知りたい場合は、 Daniel P. Bovet 氏と Marco Cesati 氏が書かれた 詳解 Linuxカーネル (原文: ISBN 978-0-596-00565-8) (日本語訳: ISBN 978-4873113135) を お読みください。