はじめに (対象読者・この記事でわかること)
この記事は、RHEL8を運用しているシステム管理者や、Linuxシステムのクラッシュダンプ取得に興味がある方を対象としています。特に、kdump機能の設定やトラブルシューティングに実務経験が少ない方にも役立つ内容です。
この記事を読むことで、kdump.serviceが起動しない問題の主な原因を特定する方法、kdumpの正しい設定手順、起動時のトラブルシューティング方法を学ぶことができます。また、システムクラッシュ時に確実にダンプを取得するためのベストプラクティスも理解できます。これにより、システム障害発生時の原因究明時間を短縮し、システムの安定性を向上させるための知識を得られるでしょう。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。 - Linuxの基本的なコマンド操作 - systemdの基本的な概念とサービス管理方法 - RHEL8の基本的なシステム管理知識 - カーネルパラメータの設定方法(grub-editenv等) - テキストエディタ(vim, nano等)の基本的な操作
kdumpとはなぜ重要か
kdumpはLinuxカーネルクラッシュ時にメモリダンプを取得するための機能です。システムがクラッシュした際に、通常のカーネルではなく、別途準備されたクラッシュカーネルを起動し、クラッシュ直前のメモリ状態をダンプファイルとして保存します。このダンプファイルは、クラッシュの原因を特定するための貴重な情報源となります。
RHEL8では、kdumpサービスはsystemdによって管理されており、kdump.serviceという名前で提供されています。しかし、実際の運用では、このサービスが起動しない、あるいはクラッシュ時に正しくダンプを取得できないといった問題が発生することがあります。
kdumpが動作しないと、システムクラッシュの原因究明が困難になるだけでなく、長時間のシステム停止や予期せぬ再起動につながる可能性があります。特に、ミッションクリティカルな環境では、kdumpの適切な動作は必須と言えるでしょう。
kdump.serviceが起動しない主な原因と解決策
kdumpの有効化と基本設定
まず、kdumpがシステムで有効化されているか確認します。
Bash# kdumpサービスの有効化状態を確認 $ systemctl is-enabled kdump.service # kdumpが有効になっていない場合は有効化 $ sudo systemctl enable kdump.service # kdumpサービスの起動状態を確認 $ sudo systemctl status kdump.service
kdumpを有効にした後は、/etc/kdump.confファイルを編集して、ダンプの保存先やフォーマットなどを設定します。
Bash# kdump設定ファイルの編集 $ sudo vi /etc/kdump.conf
設定ファイル内で、以下の主要なパラメータを確認・設定します:
path: ダンプファイルの保存先パスcore_collector: ダンプの保存形式(例:makedumpfile --mem-xy core.%(pid)s)default: クラッシュカーネルの指定(通常はデフォルトのままで問題ありません)
設定後は、kdumpサービスを再起動して設定を反映させます。
Bash$ sudo systemctl restart kdump.service
メモリ確保の設定
kdumpが動作するためには、クラッシュカーネル用にメモリを確保する必要があります。RHEL8では、以下のいずれかの方法でメモリを確保できます。
- GRUB起動オプションでの指定:
/etc/default/grubファイルのGRUB_CMDLINE_LINUXにcrashkernel=autoを追加します。
Bash$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
設定後は、grub設定を更新して再起動します。
Bash$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg $ sudo reboot
- 手動でのメモリ確保量指定:
crashkernelパラメータに具体的なメモリ量を指定することも可能です。例えば、1GBを確保する場合はcrashkernel=1Gとします。
メモリ確保量はシステムのメモリ容量によって調整する必要があります。一般的な目安は以下の通りです:
- システムメモリが2GB未満:128MB
- システムメモリが2GB以上:256MB以上
- 大規模システム:1GB以上
カーネルパラメータの調整
kdumpの動作には、いくつかのカーネルパラメータが影響します。特に重要なのは以下のパラメータです:
nr_cpus: クラッシュ時に使用するCPUコア数irqaffinity: 割り込み affinity の設定enforce_cpuspeed: CPU速度の固定
これらのパラメータは、/etc/sysctl.confや/etc/sysctl.d/配下のファイルで設定できます。
Bash# sysctl設定ファイルの編集 $ sudo vi /etc/sysctl.d/99-kdump.conf
# クラッシュ時に使用するCPUコア数を1に限定
kernel.nr_cpus = 1
# 割り込み affinity の設定
kernel.irqaffinity = 0
# CPU速度の固定
kernel.enforce_cpuspeed = 1
設定後は、sysctlを再読み込みします。
Bash$ sudo sysctl -p /etc/sysctl.d/99-kdump.conf
クラッシュカーネルの準備
kdumpは、クラッシュ時に通常のカーネルとは別のカーネル(クラッシュカーネル)を使用します。このクラッシュカーネルが正しく準備されているか確認する必要があります。
Bash# クラッシュカーネルの確認 $ sudo ls -l /boot/vmlinuz-* | grep crash
クラッシュカーネルが存在しない場合は、以下の手順で準備します:
Bash# クラッシュカーネルのインストール $ sudo yum install kernel-debug # initramfsの再作成 $ sudo dracut -f /boot/initramfs-$(uname -r).kdump.img $(uname -r)
起動時の問題解決
kdump.serviceが起動しない場合のトラブルシューティング手順を以下に示します:
ステップ1: サービス起動ログの確認
まず、kdumpサービスの起動ログを確認します。
Bash$ sudo journalctl -u kdump.service -b -p err
ログにエラーが表示されていない場合は、以下のコマンドで詳細なログを確認します。
Bash$ sudo journalctl -u kdump.service -b -n 100
ステップ2: kdumpサービスの手動起動
サービスを手動で起動し、エラー内容を確認します。
Bash$ sudo systemctl start kdump.service $ echo $?
戻り値が0でない場合は、エラーが発生しています。エラー内容を確認するために以下のコマンドを実行します。
Bash$ sudo systemctl status kdump.service
ステップ3: kdumpのテスト実行
kdumpが正常に動作するかテストします。
Bash$ sudo kdumpctl test
このコマンドは、実際にシステムクラッシュをシミュulateするわけではありませんが、kdumpの初期化とダンプ領域の確保が正常に行われるかを確認します。
ステップ4: メモリ不足の確認
システムメモリが不足している場合、kdumpが起動しないことがあります。メモリ使用状況を確認します。
Bash$ free -h
必要なメモリが確保できない場合は、crashkernelパラメータの値を調整するか、システムメモリを増設する必要があります。
ステップ5: ディスク容量の確認
ダンプ保存先のディスクに十分な容量があるか確認します。
Bash$ df -h
容量不足の場合は、ダンプファイルの保存先を変更するか、ディスク容量を増設する必要があります。
解決策
kdump.serviceが起動しない問題に対する具体的な解決策を以下に示します:
解決策1: kdump設定ファイルの修正
kdump設定ファイル(/etc/kdump.conf)に誤りがある場合、修正が必要です。特に、以下の設定を確認します:
pathディレクティブで指定したパスが存在し、書き込み可能であることcore_collectorディレクティブのフォーマットが正しいこと- 必要なディレクトリが作成されていること
Bash# ダンプ保存先ディレクトリの作成 $ sudo mkdir -p /var/crash $ sudo chmod 1777 /var/crash
解決策2: initramfsの再作成
initramfsが破損している場合、kdumpが起動しないことがあります。initramfsを再作成します。
Bash# 現在のカーネル用initramfsの再作成 $ sudo dracut -f -v # 特定のカーネル用initramfsの再作成 $ sudo dracut -f -v /boot/initramfs-$(uname -r).img $(uname -r)
解決策3: セキュリティポリシーの調整
SELinuxが有効な場合、kdump関連のファイルに適切なコンテキストが設定されていないと起動に失敗することがあります。
Bash# SELinuxの一時的な無効化(テスト用) $ sudo setenforce 0 # kdumpサービスの再起動 $ sudo systemctl restart kdump.service # もしサービスが起動した場合、SELinux関連の問題が疑われる
SELinux関連の問題を永続的に解決するには、以下のコマンドでkdump関連のファイルのコンテキストを修正します。
Bash# kdump関連ファイルのSELinuxコンテキストを修正 $ sudo restorecon -R -v /usr/bin/kdumpctl /etc/kdump.conf /var/crash
解決策4: ファイアウォール設定の確認
ファイアウォールがkdumpの動作を妨害している可能性があります。必要に応じてファイアウォール設定を調整します。
Bash# firewalldが有効な場合 $ sudo firewall-cmd --permanent --add-service=kdump $ sudo firewall-cmd --reload
解決策5: カーネルパラメータの最適化
一部のシステムでは、特定のカーネルパラメータがkdumpの動作に影響を与えることがあります。以下のパラメータを試してみてください:
Bash# /etc/sysctl.d/99-kdump.conf に以下を追加 vm.panic_on_oom = 1 kernel.panic = 10 kernel.panic_on_unrecovered_nmi = 1 kernel.panic_on_io_nmi = 1
設定後は、sysctlを再読み込みします。
Bash$ sudo sysctl -p /etc/sysctl.d/99-kdump.conf
まとめ
本記事では、RHEL8でkdump.serviceが起動しない問題の原因と解決策について解説しました。kdumpはシステムクラッシュ時に重要な情報を取得するための機能であり、適切に設定しておくことが重要です。
- kdumpの有効化と基本設定はシステムクラッシュ時のダンプ取得の基本です
- メモリ確保の設定はkdump動作の前提条件であり、システム環境に応じた調整が必要です
- カーネルパラメータの調整はkdumpの安定性向上に寄与します
- クラッシュカーネルの準備はkdump機能の核となる部分です
- 起動時の問題解決では、ログ確認から具体的な解決策までを網羅的に説明しました
この記事を通して、kdump.serviceが起動しない問題に対する体系的なアプローチ方法を理解できたことでしょう。今後は、kdumpで取得したダンプファイルの分析方法や、大規模環境でのkdump運用に関するベストプラクティスについても記事にする予定です。
参考資料
- Red Hat Enterprise Linux 8 ドキュメント - kdumpの設定
- Red Hat Enterprise Linux 8 ドキュメント - kdumpのトラブルシューティング
- kdump(8) - Linux man page
- dracut(8) - Linux man page
