ひよっこエンジニアの備忘録

日常とかSEとしての備忘を書いていきます。

ESXiがPSODした場合に自動で再起動させる

私は自宅での勉強/検証のためMinisforum製のミニPCにVMware ESXi 70u3(以降ESXiと表記)をインストールして使用していますが、偶にPSOD(Purple Screen of Death)が発生してESXiが停止することがあります。


PSODとはWindowsでいうBSOD(Blue Screen of Death / 通称ブルースクリーン)みたいなものでハードウェアやカーネルに異常が発生したときに発生する可能性がありPSODになるとシステムが停止してしまいます。
この状態になると基本的には何らかの方法(物理的な電源OFF/ONやiLO/iDRAC等を利用してリモート操作)で再起動するまで停止したままの状態となり、当然PSODになったESXi上で動いている仮想マシンも影響を受けることになります。

本来PSODが発生した場合はESXiになんらかの異常が疑われるのでBroadcom社のサポートやサーバベンダのサポートにチケットを上げて調査することが望ましいでしょう。

もしiLO/iDRAC等でリモート接続できるのであれば、PSOD発生時にどこでクラッシュしたのかダンプが表示されていると思いますので再起動前にサポートへの情報提供用にスクリーンショットを取っておくことをおすすめします。
※ESXiは結構互換性に厳しく、Broadcom社のCompatibility Guideを参照して互換性のある物理サーバの型番、CPU、NICなどなどを確認したうえで互換性の取れている物理サーバにESXiにインストールすることが大前提になります。

なおCompatibility Guideの確認方法はこちらのBroadcom社KBに記載されています。
knowledge.broadcom.com


しかしながら私の環境では個人利用となるためメーカとの契約もありませんし、ハードウェアやドライバの互換性は完全に無視して無理やりESXiを利用しているので調査は不可能です。。
根本的な解決が難しいことは当然理解していますが、上記の通りESXiが止まると仮想マシンも同時に止まってしまいESXiの再起動が必須になります。
自宅にいるときであれば物理的に再起動することができますが、そもそも監視用のZabbixを仮想マシンとして稼働させているのでESXiが停止してもすぐに気づけずこの状態で外出先で利用不可に気づくと対処が不可能になります。。

同じスペックのミニPCが複数あるのでHAを組んで影響を最小化するという方法も考えましたが、ミニPCということもありCPUコア数にほとんど余裕なくHAを組むことは断念…
ということで割と困っていたのですが色々と情報を漁り回避方法を見つけたのでメモしておきます。




[利用環境]

VMware ESXi 7.0.3 build-21686933
VMware ESXi 7.0 Update 3
Minisforum MS-01 (CPU:Intel® Core™ i9-13900H/ベアボーン)

[対応方法]

対処方法はシンプルでPSODした際のタイムアウトを設定します。
タイムアウトを設定することでタイムアウト後に自動的にESXiが再起動するようにします。


補足:
この設定で再起動する対象はESXiのみです。仮想マシンはESXi復旧後にvSphereClientやHostClientから別途起動させる必要があります。
仮想マシンもESXiと合わせて自動起動させたい方は、vSphereClient> 対象のESXiを選択 > 構成 > 仮想マシンの起動およびシャットダウン から仮想マシン自動起動設定を忘れずに行いましょう。
また、この手順はあくまでもPSODの原因調査よりもとにかく復旧を優先することを前提としています。
もし本当にESXiにハードウェア故障や致命的な問題が発生していた場合、自動再起動するとPSOD-->再起動-->またPSODのようにPSODがループする可能性もありますので有効な契約がある場合にはPSOD発生時点で調査をすることが望ましいでしょう。


なお既存のタイムアウト設定は`esxcfg-advcfg -g /Misc/BlueScreenTimeout`コマンドで確認することができます。

私の環境で実行した結果は以下でタイムアウト値が0になっていることが分かります。

[root@esxi1:~] esxcfg-advcfg --get /Misc/BlueScreenTimeout
Value of BlueScreenTimeout is 0 <<<<<<<<<<
[root@esxi1:~]

0はタイムアウトが無効であることを表しており、つまりPSODしても手動で再起動しない限りはシステムが停止したままとなります。
ここからタイムアウト60秒を設定してみます。

[root@esxi1:~] esxcfg-advcfg --set 60 /Misc/BlueScreenTimeout
Value of BlueScreenTimeout is 60 <<<<<<<<<<
[root@esxi1:~]

タイムアウトが60秒に書き換わっていることを確認。

[root@esxi1:~] esxcfg-advcfg --get /Misc/BlueScreenTimeout
Value of BlueScreenTimeout is 60 <<<<<<<<<<
[root@esxi1:~]



[テスト]

タイムアウトが機能するようになったかテストしてみます。
実は` vsish -e set /reliability/crashMe/Panic 1`というコマンドを使うと意図的にESXiをPSOD状態することができます。
(このコマンドはHA構成後もテストにも使うことができます。)


疎通確認用サーバからタイムスタンプ付きでPingを実行し、
この状態でESXiに vsish -e set /reliability/crashMe/Panic 1を実行してみます。

ESXi

[root@esxi1:~] vsish -e set /reliability/crashMe/Panic 1

疎通確認用サーバ

testuser@test-ubuntu:~$ ping esxi1 | xargs -I_ date +'[%c] _'
[Sun 16 Feb 2025 02:48:21 PM JST] PING esxi1 (192.168.1.51) 56(84) bytes of data.
[Sun 16 Feb 2025 02:48:21 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=1 ttl=64 time=0.695 ms
[Sun 16 Feb 2025 02:48:22 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=2 ttl=64 time=0.883 ms
[Sun 16 Feb 2025 02:48:23 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=3 ttl=64 time=0.919 ms
[Sun 16 Feb 2025 02:48:24 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=4 ttl=64 time=0.861 ms <<<<<<<<<< ここでPSOD
ping: sendmsg: No route to host 
[Sun 16 Feb 2025 02:49:22 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=58 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:22 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=59 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:22 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=60 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:26 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=62 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:26 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=63 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:26 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=64 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:29 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=65 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:29 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=66 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:29 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=67 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:32 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=68 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:32 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=69 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:32 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=70 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:35 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=71 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:35 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=72 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:35 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=73 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:38 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=74 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:38 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=75 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:38 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=76 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:41 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=77 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:41 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=78 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:41 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=79 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:44 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=80 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:44 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=81 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:44 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=82 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:47 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=83 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:47 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=84 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:47 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=85 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:51 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=86 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:51 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=87 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:51 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=88 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:54 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=89 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:54 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=90 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:54 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=91 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:57 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=92 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:57 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=93 Destination Host Unreachable
[Sun 16 Feb 2025 02:49:57 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=94 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:00 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=95 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:00 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=96 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:00 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=97 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:03 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=98 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:03 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=99 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:03 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=100 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:06 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=101 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:06 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=102 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:06 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=103 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:09 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=104 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:09 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=105 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:09 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=106 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:12 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=107 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:12 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=108 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:12 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=109 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:15 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=110 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:15 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=111 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:15 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=112 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:18 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=113 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:18 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=114 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:18 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=115 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:21 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=116 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:21 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=117 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:21 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=118 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:24 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=119 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:24 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=120 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:24 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=121 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:27 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=122 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:27 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=123 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:27 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=124 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:30 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=125 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:30 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=126 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:30 PM JST] From test-ubuntu (192.168.1.21) icmp_seq=127 Destination Host Unreachable
[Sun 16 Feb 2025 02:50:32 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=129 ttl=64 time=307 ms <<<<<<<<<< 復旧
[Sun 16 Feb 2025 02:50:32 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=130 ttl=64 time=0.950 ms
[Sun 16 Feb 2025 02:50:33 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=131 ttl=64 time=0.904 ms
[Sun 16 Feb 2025 02:50:34 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=132 ttl=64 time=1.05 ms
[Sun 16 Feb 2025 02:50:35 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=133 ttl=64 time=1.04 ms
[Sun 16 Feb 2025 02:50:36 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=134 ttl=64 time=1.05 ms
[Sun 16 Feb 2025 02:50:37 PM JST] 64 bytes from esxi1 (192.168.1.51): icmp_seq=135 ttl=64 time=0.919 ms
^C
testuser@test-ubuntu:~$

Ping断時間は大体2分くらいでした。PSODから60秒待機して再起動、そこからBoot完了までにまた大体60 秒という感じでしょうか。
このESXiにはほとんど追加のVIBが入っていないのでfdmやvsan、nsx等の追加vibが入っている場合にはもう少し起動までに時間がかかるかもしれないですね。

これでもしPSODが発生してもちょっと待っていれば復旧する想定なので外出先で絶望することはなくなりそうです…w