8 カーネル・ダンプの使用
Kdump機能は、Oracle Linuxでカーネル・クラッシュ情報ダンプ・メカニズムを提供します。kdump
サービスは、後で分析するためにシステムのメモリーの内容を保存します。2番目のカーネルは、システム・メモリーの予約済部分にあります。
Kdumpは、kexecシステム・コールを使用して2番目のカーネル(キャプチャ・カーネル)をブートし、システムをリブートしなくても、停止したカーネルのメモリーの内容をクラッシュ・ダンプ(vmcore
)として取得して保存します。vmcore
クラッシュ・ダンプは、誤動作の原因を検出するのに役立ちます。
システム障害が発生した場合に使用可能な唯一の情報源がクラッシュ・ダンプである可能性があるため、Kdump機能を有効にすることをお薦めします。Kdumpは、ミッション・クリティカルな多くの環境において不可欠です。
Kdumpを有効にする前に、システムがKdumpを使用するためのすべてのメモリー要件を満たしていることを確認してください。カーネル・クラッシュ・ダンプを取得し、さらに分析するためにそれを保存するには、システムのメモリーの一部をその目的のために永続的に予約します。そのようにすると、システムのメモリーのその部分をメイン・カーネルで使用できなくなります。
次の表に、システムのアーキテクチャおよび使用可能なメモリー量に基づいて、Kdumpを使用するために必要な予約済メモリーの最小量を示します。
表8-1 Kdumpのメモリー要件
アーキテクチャ | 使用可能なメモリー | 最小予約済メモリー |
---|---|---|
|
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 8: 共有ファイル・システムの管理のKdumpによるフェンス・ノードの動作の構成を参照してください。
Kdumpのインストール
グラフィック形式のインストーラを使用したOracle Linuxの対話型インストール中に、Kdumpを有効にし、Kdump用に予約されるシステム・メモリー量を指定できます。インストーラ画面にはKdumpというタイトルが付けられ、インストーラのメインの「インストール・サマリー」画面からアクセスできます。
インストール時にKdumpを有効にしない場合、またはインストール時にKdumpがデフォルトで有効になっていない場合は、カスタム・キックスタート・インストールの場合と同様に、コマンドラインを使用して機能をインストールして有効にできます。
コマンドラインを使用してKdumpをインストールおよび構成する前に、システムが必要なメモリー仕様をすべて満たしていることを確認してください。詳細は、表8-1を参照してください。
-
kdump
パッケージをインストールします:sudo dnf install kexec-tools
-
適切な管理特権で
/etc/default/grub
ファイルを編集し、crashkernel=
オプションを必要な値に設定します。たとえば、次のように64 MBのメモリーを予約します。
crashkernel=64M
次の構文を使用して、予約済メモリーの量を変数として設定することもできます:
crashkernel=range1:size1,range2:size2
たとえば、次のようにメモリーを変数として設定できます。
crashkernel=512M-2G:64M,2G-:128M
-
(オプション)予約済メモリーのオフセット値の定義を検討します。
crashkernel
の予約はブート・プロセスの早い段階で発生するため、一部のシステムでは特定の固定オフセットでメモリーを予約する必要があります。固定オフセットを指定すると、予約されたメモリーはその場所で開始します。たとえば、次のように16 MBから開始する128 MBのメモリーを予約します。crashkernel=128M@16M
オフセット値を設定しない場合は、Kdumpにより、予約済メモリーが自動的にオフセットされます。
-
grub構成をリフレッシュして変更を適用します。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
-
システムをリブートし、Kdumpの構成を終了します。
手順については、Kdump出力場所の構成を参照してください。
-
次のように、
kdump
サービスを有効にします。sudo systemctl enable --now kdump.service
Kdumpの構成
Kdumpをインストールおよび構成すると、次のファイルが変更されます。
-
/boot/grub2/grub.cfg
: カーネル行にcrashkernel
オプションを追加して、予約済メモリーの容量とオフセット値を指定します。 -
/etc/kdump.conf
: ダンプ・ファイルを書き込むことができる場所、makedumpfileコマンドのフィルタ・レベル、およびダンプに失敗した場合に実行するデフォルトの動作を設定します。有効なパラメータの詳細は、ファイル内のコメントを参照してください。
これらのファイルを編集した場合、変更を反映するためにシステムをリブートする必要があります。
詳細は、kdump.conf(5)
マニュアル・ページを参照してください。
デフォルトのKdump障害状態の構成
デフォルトでは、kdump
で、構成されている出力場所への結果の送信に失敗すると、サーバーが再起動されます。このアクションにより、ダンプ用に収集されたデータがすべて削除されます。これが起こらないようにするには、次のように、/etc/kdump.conf
ファイル内のdefault
値をコメント解除して変更できます。
default dump_to_rootfs
dump_to_rootfs
オプションは、結果をローカル・ディレクトリに保存しようとします。これは、ネットワーク共有にアクセスできない場合に便利です。かわりにshell
を使用して、コマンドラインからデータを手動でコピーできます。
ノート:
poweroff
、restart
およびhalt
オプションは、デフォルトのkdump
障害状態でも有効です。ただし、これらのアクションを実行すると、収集されたデータが失われます。
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出力の分析
crash
ユーティリティを使用して、シェル・プロンプトでkdump
コア・ダンプの内容を分析できます。これは、問題のトラブルシューティング時に役立ちます。
-
crash
パッケージをインストールします:sudo dnf install crash
-
実行中のカーネルを特定します。次に例を示します。
uname -r
前のコマンドの出力は、次のようになります。
4.18.0-80.el8.x86_64
-
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:25
はipaddress-timestampを表します。 -
logコマンドの使用方法について情報を確認するには、
crash
シェル内でhelp logコマンドを使用します。bt、ps、vmおよびfilesコマンドを使用して、コア・ダンプに関する詳細情報を取得することもできます。
-
コア・ダンプの分析が完了したら、シェルを終了します。
crashユーティリティの使用の詳細は、crash(8)
マニュアル・ページを参照してください。
または、drgn
を使用してコア・ダンプを分析することもできます。「drgnカーネル・デバッグ・ユーティリティの使用」を参照してください。
early Kdumpの使用
Oracle Linux 8以降、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
ファイルの手順を参照してください。