CentOS 7でクラッシュダンプ(kdump)を有効にしてみました。
カーネルクラッシュダンプガイド
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/kernel_administration_guide/kernel_crash_dump_guide
重要
カーネルクラッシュダンプは、障害時に唯一利用可能な情報である可能性があるので、ビジネスに不可欠な環境ではこのデータの重要性を過小評価してはいけません。Red Hat は、システム管理者に対して、通常のカーネル更新サイクルで kexec-tools を定期的に更新、テストすることを推奨します。これは、新しいカーネル機能が実装された場合に特に重要です。
過小評価してたなぁ(^^;;
- kdump のインストール
- メモリー使用量の設定
- /etc/default/grubの編集
- GRUB2メニューの再作成
- /etc/kdump.confの編集
- kdumpの有効化
- 再起動
- 動作確認
最小構成インストールでもkexec-toolsはインストールされていました。
1 2 |
# rpm -qa | grep kexec-tools kexec-tools-2.0.15-21.el7.x86_64 |
インストールされていない場合はyumでインストールして下さい。
1 |
# yum install kexec-tools |
kdumpカーネル用に予約されるメモリーサイズを指定します。
最適なメモリーを自動設定してくれそうなcrashkernel=autoを取り合えず設定してみます。
1 2 3 4 5 6 7 8 9 |
# vi /etc/default/grub # cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet" GRUB_DISABLE_RECOVERY="true" |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-957.5.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-957.5.1.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-957.1.3.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-957.1.3.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-327.36.3.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-327.36.3.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-c4ec8a978ee746e09e40ce6ef7a9a79c Found initrd image: /boot/initramfs-0-rescue-c4ec8a978ee746e09e40ce6ef7a9a79c.img done |
crashkernel=autoが追加されています。
1 2 3 4 5 6 |
# grep crashkernel /boot/grub2/grub.cfg linux16 /vmlinuz-3.10.0-957.5.1.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet linux16 /vmlinuz-3.10.0-957.1.3.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet linux16 /vmlinuz-3.10.0-327.36.3.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet linux16 /vmlinuz-0-rescue-c4ec8a978ee746e09e40ce6ef7a9a79c root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet |
/etc/kdump.confでコアダンプの保存先やクラッシュした場合の動作を指定します。
クラッシュした場合のデフォルト動作はrebootです。
1 2 3 |
path /var/crash core_collector makedumpfile -l --message-level 1 -d 31 default reboot |
1 2 |
# systemctl enable kdump Created symlink from /etc/systemd/system/multi-user.target.wants/kdump.service to /usr/lib/systemd/system/kdump.service. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# systemctl is-active kdump active # systemctl status kdump ● kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled) Active: active (exited) since 火 2019-03-12 21:32:50 JST; 1min 14s ago Process: 10030 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS) Main PID: 10030 (code=exited, status=0/SUCCESS) 3月 12 21:32:49 centos7.rootlinks.net dracut[11587]: drwxr-xr-x 2 root root 0 Mar 12 21:3...sia 3月 12 21:32:49 centos7.rootlinks.net dracut[11587]: -rw-r--r-- 1 root root 292 Jan 9 05:2...kyo 3月 12 21:32:49 centos7.rootlinks.net dracut[11587]: drwxr-xr-x 2 root root 0 Mar 12 21:32 var 3月 12 21:32:49 centos7.rootlinks.net dracut[11587]: lrwxrwxrwx 1 root root 11 Mar 12 21:3...ock 3月 12 21:32:49 centos7.rootlinks.net dracut[11587]: lrwxrwxrwx 1 root root 6 Mar 12 21:3...run 3月 12 21:32:49 centos7.rootlinks.net dracut[11587]: =====================================================...=== 3月 12 21:32:49 centos7.rootlinks.net dracut[11587]: *** Creating initramfs image file '/boot/initramfs-3....*** 3月 12 21:32:50 centos7.rootlinks.net kdumpctl[10030]: kexec: loaded kdump kernel 3月 12 21:32:50 centos7.rootlinks.net kdumpctl[10030]: Starting kdump: [OK] 3月 12 21:32:50 centos7.rootlinks.net systemd[1]: Started Crash recovery kernel arming. Hint: Some lines were ellipsized, use -l to show in full. # ls -l /var/crash/ 合計 0 |
カーネルクラッシュを引き起こしてテストします。クラッシュして再起動になりました。
1 2 |
# echo 1 > /proc/sys/kernel/sysrq # echo c > /proc/sysrq-trigger |
再起動後にダンプファイルが出力されているか確認します。
1 2 3 4 5 6 7 8 9 10 11 12 |
# ls -la /var/crash/ 合計 4 drwxr-xr-x. 3 root root 42 3月 12 21:38 . drwxr-xr-x. 20 root root 4096 3月 1 17:02 .. drwxr-xr-x 2 root root 42 3月 12 21:38 127.0.0.1-2019-03-12-21:38:13 # ls -la /var/crash/127.0.0.1-2019-03-12-21\:38\:13/ 合計 47800 drwxr-xr-x 2 root root 42 3月 12 21:38 . drwxr-xr-x. 3 root root 42 3月 12 21:38 .. -rw------- 1 root root 48810153 3月 12 21:38 vmcore -rw-r--r-- 1 root root 134335 3月 12 21:38 vmcore-dmesg.txt |
2019年3月15日追記
kdumpが起動時に予約したメモリーサイズがdmesgで確認できました。
検証環境では4GBの物理メモリでcrashkernel=autoです。
1 2 3 4 5 |
# dmesg | grep crash [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-957.5.1.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet [ 0.000000] Reserving 161MB of memory at 688MB for crashkernel (System RAM: 4095MB) [ 0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.10.0-957.5.1.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap crashkernel=auto rhgb quiet [ 0.910917] crash memory driver: version 1.1 |