はじめに
あなたはearly kdump
をご存じですか?
恥ずかしながら私はつい先日、カーネルパニック起因の障害調査をした際に存在を知りました...。
調べるうちにearly kdumpはサーバ構築の標準設定にするべきとわかりましたが、
まともに紹介している記事がRHEL公式ドキュメントぐらいしかなかったため、周知も含めて本記事でおすすめさせてください。
目次
1.early-kdumpとは
「early kdump」は、kdumpの一部として実装されている機能です。
名前通りサービス起動までの時間が重視された機能であり、
OS起動段階でカーネルクラッシュが発生した場合のクラッシュダンプ取得
を目的に、
RHEL8から導入された比較的新しめの機能です。
kdump サービスが起動していないと、起動段階でカーネルがクラッシュし、クラッシュしたカーネルメモリーの内容を取得して保存できません。
そのため、トラブルシューティングの重要な情報は失われます。
この問題を対処するために、RHEL 8 では、early kdump 機能が kdump サービスの一部として導入されました。
2.設定すると何が嬉しいか
前述の通りkdumpサービスの一機能のため、サービス起動までの時間が早いこと以外の違いはありません。
しかしこの起動時間がかなり重要で、以下条件で確認した限りでは10倍
の差があります。
検証条件
項目 | 条件 |
---|---|
実行環境 | EC2 |
インスタンスタイプ | t2.micro |
OS | RHEL 9.2 |
検証結果
(1)サーバ起動時間
Oct 29 14:25:19 ip-10-0-1-10 kernel: The list of certified hardware and cloud instances for Red Hat Enterprise Linux 9 can be viewed at the Red Hat Ecosystem Catalog, https://catalog.redhat.com.
(2)kdump起動時間
Oct 29 14:25:29 ip-10-0-1-10 kdumpctl[939]: kdump: kexec: loaded kdump kernel
⇒kdump起動まで、約10秒
(1)サーバ起動時間
Oct 29 14:38:59 ip-10-0-1-10 kernel: The list of certified hardware and cloud instances for Red Hat Enterprise Linux 9 can be viewed at the Red Hat Ecosystem Catalog, https://catalog.redhat.com.
(2)early-kdump起動時間
Oct 29 14:39:00 ip-10-0-1-10 dracut-cmdline[247]: kdump: kexec: loaded early-kdump kernel
⇒early-kdump起動まで、約1秒
上記はあくまで一例のため、サーバ構成によって短縮される時間はまちまちです。
しかしkdump起動前にカーネルパニックが発生して、クラッシュダンプ(/var/crash)が取れなかった...。
という事態を可能な限り避けるためにも、標準設定としてサーバ構築時に設定するべきかと思います。
3.設定方法
基本的には公式ドキュメント記載の手順で問題なく設定できます。
early kdumpの有効化-公式ドキュメント
(1) まずkdumpが有効でアクティブであることを確認します。
そもそもkdumpが無効化されている、またはインストールされていない場合は以下手順で有効化してください。
kdumpインストール-公式ドキュメント
$ systemctl is-enabled kdump.service && systemctl is-active kdump.service
enabled
active
(2) 起動カーネルの initramfs イメージを、early kdump 機能で再構築してください。
$ dracut -f --add earlykdump
(3) rd.earlykdump カーネルコマンドラインパラメーターを追加してください。
$ grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="rd.earlykdump"
(4) rd.earlykdump が正常に追加され、early kdump 機能が有効になっていることを確認します。
cmdlineにrd.earlykdump
が含まれており、
journalctlでearly-kdump is enabled.
,loaded early-kdump kernel
が含まれていれば、有効化されています。
$ cat /proc/cmdline
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-187.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet rd.earlykdump
$ journalctl -x | grep early-kdump
Mar 20 15:44:41 redhat dracut-cmdline[304]: early-kdump is enabled.
Mar 20 15:44:42 redhat dracut-cmdline[304]: kexec: loaded early-kdump kernel
ユーザーデータの利用について
実行環境がEC2の場合はユーザーデータに設定することで、インスタンス作成段階で有効化することをおすすめします。
※再起動を伴うため、他にユーザーデータの記述がある場合は必ず最後に記載してください
#!/bin/bash
sudo dracut -f --add earlykdump
sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="rd.earlykdump"
sudo systemctl reboot