Solaris のシステム管理

第 69 章 システムクラッシュ情報の生成と保存

この節では、クラッシュダンプを有効または無効にする方法と、システムメッセージを表示または収集する方法について説明します。

この章で説明する手順は次のとおりです。

システムクラッシュ

システムクラッシュは、ハードウェアの誤動作、電源の異常、入出力の障害、およびソフトウェアのエラーが原因で発生します。ソフトウェアの突然異常 (たとえば、オペレーティングシステムのバグによる致命的なカーネルエラーなど) によってシステムがクラッシュした場合、システムはその物理メモリーのイメージを、ディスクのスワップスライスの最後に core ファイルとして書き込みます。このファイルはカーネルの状態のスナップショットであり、クラッシュ時に捕捉されたプログラムのテキスト、データ、および制御構造体を含んでいます。

クラッシュダンプ (または core) ファイル

UNIX システムがクラッシュしたときに書き込まれるクラッシュダンプ、つまり core ファイルは、カーネルのデバッグに熟練した人が使用すれば、クラッシュの原因を突き止める鍵となります。しかし、システムで core ファイルをクラッシュダンプファイルに保存することを有効にしていなければ、UNIX システムがクラッシュ後にリブートすると、通常の場合は、生成されていた core ファイルが上書きされてしまいます。

システムがクラッシュダンプファイルを保存することを有効にする方法の詳細は、「クラッシュダンプの使用方法の作業マップ」を参照してください。クラッシュダンプファイルは非常に大きくなる可能性があるため、不要なものは削除してください。

クラッシュダンプの保存

制御構造体、アクティブなテーブル、動作中またはクラッシュしたシステムカーネルのメモリーのイメージなど、カーネルの動作についての情報を調べるには、crash ユーティリティを使用します。crash を完全に使いこなすには、カーネルについての詳細な知識が必要ですが、このマニュアルでは扱いません。crash ユーティリティの動作の詳細は、crash(1M) のマニュアルページを参照してください。

また、crash で保存したクラッシュダンプを購入先に送って、システムがクラッシュした原因を解析してもらうことも可能です。購入先にクラッシュダンプファイルを送る場合は、「クラッシュダンプの使用方法の作業マップ」にリストされている最初の 3 つの作業を実行してください。

クラッシュダンプの使用方法の作業マップ

表 69-1 作業マップ: クラッシュダンプの使用方法
 

作業 

 

説明 

 

手順の説明 

 

クラッシュダンプディレクトリを作成する 

 

/var/crash/system-name ディレクトリを作成して、クラッシュダンプファイルを格納する。

 

「クラッシュダンプディレクトリを作成する方法」

 
        
 

クラッシュダンプファイル用の容量を確保する 

 

クラッシュダンプファイル用に割り当てるディスク容量を決定する。 

 

「クラッシュダンプファイル用の容量を確保する方法」

 
          
 

クラッシュダンプファイルを有効にする 

 

/etc/init.d/sysetup ファイルを編集して、クラッシュダンプファイルの保存を有効にする。

 

「クラッシュダンプファイルを有効にする方法」

 
          
 

クラッシュダンプファイルを調査する 

 

crash コマンドを使用して、クラッシュダンプファイルを表示する。

 

「クラッシュダンプを調査する方法」

 
          
 

クラッシュダンプファイルを無効にする 

 

(省略可能) 

/etc/init.d/sysetup ファイルを編集して、クラッシュダンプファイルの保存を無効にする。

 

「クラッシュダンプファイルを無効にする方法」

 
   

クラッシュダンプの有効化と無効化

システムにクラッシュダンプを保存させるには、次の手順に従ってください。

システムにクラッシュダンプを保存させないようにするには、この逆の手順に従います。

クラッシュダンプディレクトリを作成する方法

  1. スーパーユーザーになります。

  2. /var/crash ディレクトリを作成します。

    # mkdir /var/crash
    

  3. /var/crash ディレクトリに移動します。

    # cd /var/crash
    
  4. システム名でディレクトリを作成します。

    # mkdir system-name
    

    system-name

    クラッシュダンプファイルを保存するシステム 

  5. ディレクトリが作成されていることを確認します。

    # ls system-name
    

例 - クラッシュダンプファイルを保存するディレクトリを作成する

次の例は、システム saturn のクラッシュダンプファイルを保存するディレクトリを作成する方法を示しています。

# mkdir /var/crash
# cd /var/crash
# mkdir saturn
# ls saturn

クラッシュダンプファイル用の容量を確保する方法

  1. 表 69-1 に示している必要な作業を完了していることを確認します。

  2. スーパーユーザーになります。

  3. /var/crash/system-name ディレクトリに移動します。

    # cd /var/crash/system-name
    

    system-name

    クラッシュダンプファイルを保存するシステム 

  4. 任意のエディタで、クラッシュダンプ用に確保しておく最小利用可能空き領域の最小値を指定する数 (単位はキロバイト) を含む、minfree という名前のファイルを作成します。

  5. ファイルを終了して、変更を保存します。

例 - クラッシュダンプファイル用に容量を確保する

次の例は、システム saturn のクラッシュダンプファイルを保存するための、500K バイトの利用可能な空き領域を確保する、minfree ファイルの内容を示しています。

$ more /var/crash/saturn/minfree
500

クラッシュダンプファイルを有効にする方法

  1. 表 69-1 に示している必要な作業を完了していることを確認します。

  2. スーパーユーザーになります。

  3. 任意のエディタで、/etc/init.d/sysetup ファイルを編集し、クラッシュダンプを有効にする行の先頭からコメント記号 (#) を削除して、これらの行を有効にします。

  4. 変更を保存し、編集を終了します。

例 - クラッシュダンプファイルを有効にする

次の例は、クラッシュダンプを有効にするように編集した /etc/init.d/sysetup ファイルの該当セクションを示しています。

##
## Default is to not do a savecore
##
if [ ! -d /var/crash/`uname -n` ]
then mkdir -m 0700 -p /var/crash/`uname -n`
fi
     echo 'checking for crash dump...¥c '
savecore /var/crash/`uname -n`
     echo ''

クラッシュダンプを調査する方法

  1. スーパーユーザーになります。

  2. crash ユーティリティを使用して、クラッシュダンプを調査します。

    # /usr/sbin/crash [-d crashdump-file] [-n name-list] [-w output-file]

    -d crashdump-file

    システムのメモリーイメージが格納されているファイルを指定する。デフォルトのクラッシュダンプファイルは /dev/mem である

    -n name-list

    システムのメモリーイメージへシンボルでアクセスを調査する場合、シンボルテーブル情報が格納されるテキストファイルを指定する。デフォルトのファイル名は /dev/ksyms である

    -w output-file

    クラッシュセッションからの出力を格納するファイルを指定する。デフォルトは標準出力である 

  3. クラッシュ状態情報を表示します。

    # /usr/sbin/crash
    dumpfile = /dev/mem, namelist = /dev/ksyms, outfile = stdout
    > status
       .
       .
       .
    > size buf proc queue
       .
       .
       .

例 - クラッシュダンプを調査する

次の例は、crash ユーティリティからのサンプル出力を示しています。状態とバッファについての情報、プロセス、および待ち行列のサイズが表示されています。

# /usr/sbin/crash
dumpfile = /dev/mem, namelist = /dev/ksyms, outfile = stdout
> status
system name:    SunOS
release:        5.6
node name:      saturn
version:        Generic
machine name:   sun4m
time of crash:  Fri Jan 10 14:14:39 1997
age of system:  60 day, 5 hr., 24 min.
panicstr:
panic registers:
        eip: 0     esp: 0
> size buf proc queue
120
1552
88

クラッシュダンプファイルを無効にする方法

  1. スーパーユーザーになります。

  2. /etc/init.d/sysetup ファイルを編集して、次に示すように各行の先頭にコメント記号 (#) を挿入します。

    #if [ ! -d /var/crash/`uname -n` ]
    #then mkdir -p /var/crash/`uname -n`
    #fi
    #                echo `checking for crash dump...¥c `
    #savecore /var/crash/`uname -n`
    #                echo ''
  3. 変更を保存します。

  4. /var/crash ディレクトリからクラッシュダンプ用のファイルを削除します。

    # rm -rf /var/crash/system-name
    

    system-name

    クラッシュダンプファイルの保存を無効にするシステム名