7 カーネル・ダンプの使用

Kdump機能は、Oracle Linuxでカーネル・クラッシュ情報ダンプ・メカニズムを提供します。kdumpサービスは、後で分析するためにシステムのメモリーの内容を保存します。2番目のカーネルは、システム・メモリーの予約済部分にあります。

Kdumpは、kexecシステム・コールを使用して2番目のカーネル(キャプチャ・カーネル)をブートし、システムをリブートしなくても、停止したカーネルのメモリーの内容をクラッシュ・ダンプ(vmcore)として取得して保存します。vmcoreクラッシュ・ダンプは、誤動作の原因を検出するのに役立ちます。

システム障害が発生した場合に使用可能な唯一の情報源がクラッシュ・ダンプである可能性があるため、Kdump機能を有効にすることをお薦めします。Kdumpは、ミッション・クリティカルな多くの環境において不可欠です。

Kdumpを有効にする前に、システムがKdumpを使用するためのすべてのメモリー要件を満たしていることを確認してください。カーネル・クラッシュ・ダンプを取得し、さらに分析するためにそれを保存するには、システムのメモリーの一部をその目的のために永続的に予約します。そのようにすると、システムのメモリーのその部分をメイン・カーネルで使用できなくなります。

次の表に、システムのアーキテクチャおよび使用可能なメモリー量に基づいて、Kdumpを使用するために必要な予約済メモリーの最小量を示します。

表7-1 Kdumpのメモリー要件

アーキテクチャ 使用可能なメモリー 最小予約済メモリー

x86_64

1 GBから64 GB

160 MBのRAM

64 GBから1 TB

256 MBのRAM

1 TB以上

512 MBのRAM

Arm (aarch64)

2 TB以上

512 MBのRAM

Cockpit Webコンソールの使用によるKdumpの構成については、Oracle Linux: Cockpit Webコンソールの使用を参照してください

ノート:

Kdumpは、OCFS2ファイル・システムを使用するクラスタ設定でのトラブルシューティングにも使用できます。詳細は、Oracle Linux 9: 共有ファイル・システムの管理Kdumpによるフェンス・ノードの動作の構成を参照してください。

Kdumpのインストール

グラフィック形式のインストーラを使用したOracle Linuxの対話型インストール中に、Kdumpを有効にし、Kdump用に予約されるシステム・メモリー量を指定できます。インストーラ画面にはKdumpというタイトルが付けられ、インストーラのメインの「インストール・サマリー」画面からアクセスできます。

インストール時にKdumpを有効にしない場合、またはインストール時にKdumpがデフォルトで有効になっていない場合は、カスタム・キックスタート・インストールの場合と同様に、コマンドラインを使用して機能をインストールして有効にできます。

コマンドラインを使用してKdumpをインストールおよび構成する前に、システムが必要なメモリー仕様をすべて満たしていることを確認してください。詳細は、表7-1を参照してください。

  1. kdumpパッケージをインストールします:

    sudo dnf install kexec-tools
  2. 適切な管理特権で/etc/default/grubファイルを編集し、crashkernel=オプションを必要な値に設定します。

    たとえば、次のように64 MBのメモリーを予約します。

    crashkernel=64M

    次の構文を使用して、予約済メモリーの量を変数として設定することもできます: crashkernel=range1:size1,range2:size2

    たとえば、次のようにメモリーを変数として設定できます。

    crashkernel=512M-2G:64M,2G-:128M
  3. (オプション)予約済メモリーのオフセット値の定義を検討します。

    crashkernelの予約はブート・プロセスの早い段階で発生するため、一部のシステムでは特定の固定オフセットでメモリーを予約する必要があります。固定オフセットを指定すると、予約されたメモリーはその場所で開始します。たとえば、次のように16 MBから開始する128 MBのメモリーを予約します。

    crashkernel=128M@16M

    オフセット値を設定しない場合は、Kdumpにより、予約済メモリーが自動的にオフセットされます。

  4. grub構成をリフレッシュして変更を適用します。

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  5. システムをリブートし、Kdumpの構成を終了します。

    手順については、Kdump出力場所の構成を参照してください。

  6. 次のように、kdumpサービスを有効にします。

    sudo systemctl enable --now kdump.service

Kdumpの構成

Kdumpをインストールおよび構成すると、次のファイルが変更されます。

  • /boot/grub2/grub.cfg: カーネル行にcrashkernelオプションを追加して、予約済メモリーの容量とオフセット値を指定します。

  • /etc/kdump.conf: ダンプ・ファイルを書き込むことができる場所、makedumpfileコマンドのフィルタ・レベル、およびダンプに失敗した場合に実行するデフォルトの動作を設定します。有効なパラメータの詳細は、ファイル内のコメントを参照してください。

これらのファイルを編集した場合、変更を反映するためにシステムをリブートする必要があります。

詳細は、kdump.conf(5)マニュアル・ページを参照してください。

Kdump出力場所の構成

Kdumpのインストール後、結果の出力を保存する場所を定義できます。Oracle Linuxの場合、Kdumpファイルはデフォルトで/var/crashディレクトリに格納されます。

NFSマウント、外部マウントされたドライブ、リモート・ファイル・サーバーなどの他の場所に結果を保存するには、/etc/kdump.confファイルを編集し、有効にする各行の先頭にある#コメント文字を削除します。

たとえば、新しいディレクトリの場所を追加するには、pathキーワードで接頭辞を付けます。

path /usr/local/cores

/devディレクトリ内の特定のデバイスに直接出力するには、rawを使用します。ラベル、名前、またはUUIDを使用して、特定のデバイスの出力ファイル・システムを手動で指定することもできます。次に例を示します。

ext4 UUID=5b065be6-9ce0-4154-8bf3-b7c4c7dc7365

次の例に示すように、Kdumpファイルをセキュア・シェル接続経由で転送することもできます。

ssh user@example.com
sshkey /root/.ssh/mykey

互換性のあるネットワーク共有にエクスポートするようにKdumpファイルを設定することもできます。

nfs example.com:/output

Kdumpの出力場所の構成が終了したら、kdumpサービスを有効にします。

sudo systemctl enable --now kdump.service

デフォルトのKdump障害状態の構成

デフォルトでは、kdumpで、構成されている出力場所への結果の送信に失敗すると、サーバーが再起動されます。このアクションにより、ダンプ用に収集されたデータがすべて削除されます。これが起こらないようにするには、次のように、/etc/kdump.confファイル内のdefault値をコメント解除して変更できます。

default dump_to_rootfs

dump_to_rootfsオプションは、結果をローカル・ディレクトリに保存しようとします。これは、ネットワーク共有にアクセスできない場合に便利です。かわりにshellを使用して、コマンドラインからデータを手動でコピーできます。

ノート:

poweroffrestartおよびhaltオプションは、デフォルトのkdump障害状態でも有効です。ただし、これらのアクションを実行すると、収集されたデータが失われます。

Kdump出力の分析

crashユーティリティを使用して、シェル・プロンプトでkdumpコア・ダンプの内容を分析できます。これは、問題のトラブルシューティング時に役立ちます。

  1. crashパッケージをインストールします:

    sudo dnf install crash
  2. 実行中のカーネルを特定します。次に例を示します。

    uname -r

    前のコマンドの出力は、次のようになります。

    4.18.0-80.el8.x86_64
  3. crashユーティリティへのパラメータとして、カーネルのdebuginfoモジュールの場所、およびコア・ダンプの場所を指定します。次に例を示します。

    sudo crash /usr/lib/debug/lib/modules/4.18.0-80.el8.x86_64/vmlinux \
     /var/crash/127.0.0.1-2019-10-28-12:38:25/vmcore

    前のコマンドで、4.18.0-80.el8.x86_64は実行中のカーネルで、127.0.0.1-2019-10-28-12:38:25ipaddress-timestampを表します。

  4. logコマンドの使用方法について情報を確認するには、crashシェル内でhelp logコマンドを使用します。

    btpsvmおよびfilesコマンドを使用して、コア・ダンプに関する詳細情報を取得することもできます。

  5. コア・ダンプの分析が完了したら、シェルを終了します。

crashユーティリティの使用の詳細は、crash(8)マニュアル・ページを参照してください。

または、drgnを使用してコア・ダンプを分析することもできます。「drgnカーネル・デバッグ・ユーティリティの使用」を参照してください。

early Kdumpの使用

Early Kdumpは、早期の誤動作のvmcore情報を取得するのに十分な早さでクラッシュ・カーネルおよびinitramfsをロードします。

kdumpサービスは起動が遅すぎるため、早期の誤動作によってkdumpカーネルが起動されることはなく、診断情報の取得が妨げられます。その問題に対処するには、クラッシュ・カーネルとinitramfsができるだけ早くロードされるように、dracutモジュールを追加することでearly Kdumpを有効にできます。

ノート:

次の制限事項がearly Kdumpに適用されます。

  • この機能は、Fadumpでは機能しません。

  • early Kdumpは、システムのinitramfsの処理が開始された瞬間にアクティブになります。その時点より前に発生した誤動作は、early Kdumpが有効になっている場合でも取得されません。

early Kdumpの構成の詳細は、/usr/share/doc/kexec-tools/early-kdump-howto.txtファイルの手順を参照してください。