初期の kdump サポートとは?
CentOS/RHEL (5/6/7) の以前のバージョンでは、kdump サービスはブート シーケンスの非常に遅い時間に開始されました。そのため、初期のクラッシュ情報は起動中に失われます。 CentOS/RHEL 8 以降、この問題に対処するために「初期 kdump サポート」と呼ばれる新しい kdump メカニズムが導入されました。初期の Kdump は、ブート カーネルの initramfs 内にクラッシュ カーネルの vmlinuz と initramfs を保存し、初期のブート段階で予約済みメモリ (crashkernel) に直接ロードします。
「kexec-tools」パッケージには、起動中のカーネルのカーネル クラッシュ ダンプを取得するために、ブート シーケンスのできるだけ早い段階でクラッシュ カーネルと initramfs をロードするための 2 つの追加モジュールが含まれています。
/usr/lib/dracut/modules.d/99earlykdump/early-kdump.sh /usr/lib/dracut/modules.d/99earlykdump/module-setup.sh
# dracut --list-modules | grep earlykdump earlykdump
初期の kdump サポートはデフォルトで無効になっており、手動で有効にする必要があります。また、CentOS/RHEL 5、6、7 の以前の kdump 構成でサポートされていたすべてのダンプ ターゲットと構成パラメーターもサポートしています。
kdump サービスを構成する
1. 以下の kdump 構成投稿を参照して、kdump を構成し、kdump サービスが実行中の状態であることを確認してください。
CentOS / RHEL 7 :kdump# systemctl enable --now kdump.serviceの設定方法
# systemctl status kdump.service ● kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2019-08-19 23:42:11 IST; 16h ago Main PID: 1255 (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 26213) Memory: 0B CGroup: /system.slice/kdump.service Aug 19 23:42:09systemd[1]: Starting Crash recovery kernel arming... Aug 19 23:42:11 kdumpctl[1255]: Kdump already running: [WARNING] Aug 19 23:42:11 systemd[1]: Started Crash recovery kernel arming.
2. システムで利用可能な初期ダンプ モジュールを一覧表示します
# dracut --list-modules | grep earlykdump earlykdump
3. パラメータ rd.earlykdump を追加します カーネルオプトへ /boot/grub2/grubenv の行 ファイル:
# cat /boot/grub2/grubenv # GRUB Environment Block saved_entry=4eb68bf18e86437d9c957ff4863a3288-4.18.0-80.el8.x86_64 kernelopts=root=/dev/mapper/ol-root ro crashkernel=auto resume=/dev/mapper/ol-swap rd.lvm.lv=ol/root rd.lvm.lv=ol/swap rd.earlykdump boot_success=0 ################################################################################################### ################################################################################################### ###################################################################################################
initramfs を再作成
1. 次のステップは、初期 kdump モジュールを追加するために initramfs を再作成することです:
# lsinitrd | grep -i early
# dracut -f --add earlykdump
例:
# lsinitrd |grep -i early Arguments: -f --add 'earlykdump' earlykdump -rwxr-xr-x 1 root root 1940 Jun 17 10:29 usr/lib/dracut/hooks/cmdline/00-early-kdump.sh
2.ボックスを再起動して変更をロードします
# reboot
3. サーバーがオンラインに戻ったら、early-kdump のステータスを確認します。
# journalctl -x |grep -i early-kdump Aug 20 16:08:09 [HOSTNAME] dracut-cmdline[196]: early-kdump is enabled. Aug 20 16:08:10 [HOSTNAME] dracut-cmdline[196]: kexec: loaded early-kdump kernel
early-kdump のテスト
それでは、カスタム systemd ユニット ファイルを使用して Early-kdump をテストし、SysRq クラッシュを使用してパニックを発生させましょう。
1. ユニット ファイル名 /etc/systemd/system/test_early_kdump.service を作成します .
# touch /etc/systemd/system/test_early_kdump.service
2. 適切な権限を付与します:
# chmod 664 /etc/systemd/system/test_early_kdump.service
ユニット ファイルは次のようになります。
# cat /etc/systemd/system/test_early_kdump.service [Unit] Description=test_early_kdump Service Before=kdump.service [Service] ExecStart=/usr/local/test_early_kdump.sh Type=simple [Install] WantedBy=default.target
3. 次に別のスクリプト /usr/local/test_early_kdump.sh を作成します sysrq クラッシュ コマンドを渡すファイル:
# cat /usr/local/test_early_kdump.sh #!/bin/bash /usr/bin/echo c > /proc/sysrq-trigger
4. スクリプトに実行権限を付与します:
# chmod +x /usr/local/test_early_kdump.sh
5. systemd デーモンをリロードします:
# systemctl daemon-reload重要 :test_early_kdump.service (テスト クラッシュ) サービスを開始しないでください。そうしないと、システムがすぐにクラッシュします。
6. ブート レベルでこの test_early_kdump サービスを有効にします。
# systemctl enable test_early_kdump.service
7. システムを再起動します:
# reboot注意 :カスタム テスト スクリプトに従ってシステムを起動すると、クラッシュが発生し、再起動が繰り返されます。
8. カスタム ユニットとスクリプト ファイルを無効にし、テスト後に削除します。 「systemd.unit=rescue.target」を使用してシステムをレスキュー モードで起動します。 起動時に「test_early_kdump」サービスを無効にします。
# systemctl disable test_early_kdump.service
上記のコマンドは、カスタム ユニット ファイルを無効にします。次回はシステムが正常に起動します。
CentOS/RHEL 7 および 8 で Systemd を介してレスキュー モードまたは緊急モードで起動する方法9. テスト クラッシュが完了したら、カスタム ユニット ファイルとクラッシュ スクリプト ファイルを削除します。
# rm /etc/systemd/system/test_edump.service rm: remove regular file '/etc/systemd/system/test_edump.service'? y
# rm /usr/local/test_early_kdump.sh
10. /var/crash/ を確認します vmcore について言及されている kdump.conf (パス /var/crash) のフォルダー:
# ls -l /var/crash/127.0.0.1-2019-08-20-17:09:23 total 56648 -rw-------. 1 root root 57959829 Aug 20 17:09 vmcore -rw-r--r--. 1 root root 41452 Aug 20 17:09 vmcore-dmesg.txt