HPE DL360P gen8 とESXiとSDカードとiLOと

DL360P Gen8でESXi 7.0.xを使おうとしてハマった件を愚痴る。

背景

仕事柄、急に「今Linuxで使ってる○○を急遽Windows版で動かしたいからマイグレできるか検証して手順作って」とか言われるので、手元の開発環境はとにかく頻繁にOSを入れなおしたりアプリ入れたりしている。
なので、すぐにOS入れたりスナップショット取ったりできる仮想化環境は必須だったりする。

で、当方では中古で購入したHP DL360P Gen8にSDカードブートでESXi 7を入れて使っているのだが、これがある日突然おかしくなった。

初期症状

ちょっと仮想マシンをシャットダウンしようと、いつもの操作をしたら仮想マシンがいつになってもシャットダウンできない。
その仮想マシンだけかと思ったら、ホストしている仮想マシンが全部何やってもシャットダウンできない。
「ESXiの不調か?」とESXiを再起動かけたところ、ESXi起動中あるファイルのロードのところで「fatal error: 33 inconsistent data」とか出て、起動できない。
検索してみた限りでは、上書きインストールすれば治るのではないか、とのこと。
仕方がないので、ESXi 7をメディアから起動して上書きインストールしてみることにした。

なぜかどうやってもインストール途中で止まる

今まで使っていたOSを入れなおすだけだもの、ちょっと面倒な作業が必要になっただけ、と油断していたが甘かった。
とにかく何度試してもインストールが始まって6%位のところで「OSError: [Errno 38] Function not implemented」で止まる。
裏画面でesxi_install.logを確認すると、「Error: The primary GPT table is corrupt, but the backup appears OK, so that will be used.」とかなんとか。
インストール中にパーティションがうまく操作できてないのか。
初期症状を踏まえるとSDカードが書き換え寿命を迎えておかしくなってるのかも、なんて思い始めた。
仕方がないので近くの新製品が安い某電気屋までひとっ走り、新しいSDカードを買ってきた。本当ならAmazonで買ったほうが安いのだけれどもさっさと直したいし。

SDカードを変えても、バージョンを変えてもまた止まる

さて、仕切り直してインストール開始。今度はうまくいくでしょうと思ったら再び同じエラーが。
こうなると、ESXi側の問題か?なら違うバージョンはどうだろう、ということでESXi 6.7のメディアでインストール開始。
ところがところが、6.7でも同じエラーで止まるじゃないか。
これはハードウェアの別の問題かも、ととりあえずハードウェアのイベントログを見ようとiLOを開くと黄色いアイコンとともに「iLO: Degraded」の文字が。
Diagnosticを見てみると、「Embedded Flash/SD-CARD」の欄が「Controller firmware revision 2.10.00 NAND read failure: Media is in a WRITE-PROTECTED」と書いてある。ん?SD-CARD?
iLOのNAND周りの不具合は既知の問題で、ある程度古いファームウェアはこのiLOのNANDの取り扱いがよろしくなく、そのまま使い続けるとNANDがおかしくなってしまう。職場の本番機でも同じ問題が出たことあって、これが出ると最悪マザーボード替えるまで治らない。
中古のProLiantをお勧めしないといわれるのはこれがゆえんでもある。なんせ、このNAND問題が解消したのは割と最近で、中古で出回っているProLiantは対策前のファームウェアで長いこと使われていたことはまず間違いないからだ。
ただ、よく見るのは「Controller firmware revision 2.10.00 Embedded media initialization failed due to media write-verify test failure 」とかで、「WRITE-PROTECTED」というのは初めて見た。
で、気になるのは欄名にもある通り「SD-CARD」がESXiの起動に使っているものを指して「WRITE-PROTECTED」と言ってるなら、ESXiがおかしくなったのもOSがうまくインストールできないのもこれが問題ということになる。
正直iLOがNAND以外になぜSDカードまで使おうとして、ご丁寧にWRITE-PROTECTまでしているのかはわからないが、少なくとも内蔵SDカードスロットを使用してESXiを使おうとする限りはうまくいかないことになる。
であれば、とりあえず内部SDカードスロットの使用をあきらめて外部メモリにESXiをインストールすれば回避できそうな気がする。問題は32GBのUSBメモリは手元にないということ。
そういうことであれば今後とっかえひっかえすることも見据えて、ということでAmazonのお急ぎ便で翌日受け取れるカラフルなUSBメモリ5本セット2500円を発注。いやー、安くなったね。パーツショップの特価品が2GB 980円で「うわ、安っ」なんて思ってた頃が懐かしい。
これで部材待ちになったので作業はいったん中断。

USBメモリって遅い、速いメモリは不安定

届いたUSBメモリをさっそくフロントスロットにぶっさして、インストール作業を再開。
内蔵SDカードで100%発生していたOSErrorは発生せず、すんなり進み始めて一安心したもののこれが遅い。エラーは起きないものの、とにかく進捗が遅い。
esxi_install.logを見てみると、インストール先が遅すぎてI/Oキューが深くなりリセットやらリトライやらが発生している模様。
安いから速くはないんだろうなとは思っていたけど、OSのインストーラがしびれを切らすほど遅いのは予想外。
仕方なくインストーラはそのままに、改めて新製品が安い電気屋に走り、高速を謳うElecomのUSBメモリを1本だけ購入。戻ってきてからインストーラを見たら全く進んでいなかった。
買ってきた高速というUSBメモリに改めてインストールを開始する。おー、速い速い。進捗がずんずん進む・・・が途中で止まった。そしてエラー。
インストーラの最初に戻されたので再度インストール画面を見ると、USBメモリを見失っている。速い代わりに不安定ってか。
考えてみればSDカードはClass10とか速さと安定性を示す規格があるがUSBメモリってそういうの聞いたことがない気がする。結局何をもって「高速」というかははっきりしてないんじゃないか。
結局、SDカードをカードリーダ経由で使うのが正解な気がする。
ということで、フロントUSBスロットにSDカードリーダを装着しSDカードにインストールすることにした。まさに安物買いの銭失い。

なぜか起動しないESXi。越えられないGPTの壁

気を取り直してインストール作業を開始。
さすがClass10のSDカードだけあって、ちゃんと止まることなくあっさりインストールが完了できた。
ここでうまく行ってたらこのメモを書く気にはならなかったと思う。つまりここからが大変だった。
インストールが終わってさぁ再起動・・・するとESXiが上がってこない。OSが見つけられず各起動メディアを試みては再起動を繰り返しているようだ。
あらためてESXi 7が起動できない理由を検索してみると、GPT問題というものがあることを知った。
つまり、ProLiantのGen8は一部を除いてUEFIに対応しておらずLegacy BIOSのみであるため、ESXi 7がインストール先をフォーマットするときに使用するGPTでは起動ディスクに使用できない、ということらしい。ちなみにLegacy BIOSではGPTではなくMBRが必要。
いままでさんざんESXi 7を使ってたのに今更この問題がおきる理由は何だろう?しいて言うなら古いバージョンからバージョンアップして使用してたくらい?
調べてみると、新規インストールでGPTではなくMBRを指定できるのはESXi 6.5までで、かつデフォルトはGPTなのでMBRを使用するオプションが必要らしい。つまり最初に6.5でMBRを使用してインストールしてそのあとバージョンアップしたから使えてたってことか?
確かに6.5からバージョンアップしたような記憶はあるが、最初のインストール時にMBR指定なんかしたっけか?記憶にないんだが。
とはいえ使えてた実績がある以上はやってみるしかない。

ESXi 6.5U3のメディアで起動し、Shift+Oでブートオプションに「formatwithmbr」を指定する。インストール先は引き続きフロントUSBにさしたSDカード。
特に問題なくもインストールでき、ようやくESXi 6.5が起動することを確認できた。
ネットワークなど最低限の設定だけ済ませて、すぐに6.7U3へのバージョンアップを試みる。
6.7のメディアから起動して、インストール先に外部USB-SDカードを指定して「Upgrade」を選択する。当然途中で止まることもなくインストールできた。
記憶にはなかったけど、前回もMBRオプションとか指定してたのかなーなどとと思いつつ再起動・・・すると上がってこない。7.0を新規インストールしたのと全く同じ。
WEBで調べたGen 8への6.7/7.0インストールもこの手順でやって成功したっていわれてるんだけどな。

しかたなく再度6.5をインストールしなおして、今度はバンドルZIPからアップグレードしてみることにした。
ESXi 6.5でSSHを有効にし、CLIからデータストアにアップロードしたZIPを使用してアップグレードインストールする。ちなみに/tmpとかにZIPをアップロードすると容量不足になってアップグレードできなかった。
esxcli software sources profile list -d /vmfs/volumes/datastore1/VMware-ESXi-6.7.0-Update3-19195723-HPE-Gen9plus-670.U3.10.9.0.8-Apr2022-depot.zip
esxcli software profile update -d /vmfs/volumes/datastore1/VMware-ESXi-6.7.0-Update3-19195723-HPE-Gen9plus-670.U3.10.9.0.8-Apr2022-depot.zip -p HPE-ESXi-6.7.0-Update3-19195723-Gen9plus-670.U3.10.9.0.8
アップグレードはすんなり終わって再起動かけると・・・6.7が上がってきた!
これはいけそう、ということで今度はESXi 7にアップグレードを試みる。Gen8は古いんでCPUの互換性警告が出るのでオプション指定が必要。
esxcli software sources profile list -d /vmfs/volumes/datastore1/VMware-ESXi-7.0.3-20842708-HPE-703.0.0.11.1.0.25-Dec2022-depot.zip
esxcli software profile update -d /vmfs/volumes/datastore1/VMware-ESXi-7.0.3-20842708-HPE-703.0.0.11.1.0.25-Dec2022-depot.zip -p HPE-Custom-AddOn_703.0.0.11.1.0-25 --no-hardware-warning
これもすんなり成功した。再起動するとちゃんと7.0が上がってきた。ようやく復旧が見えてきた。
データストア上の仮想マシンを登録しなおし各種設定をやり直し。
ひと段落したところでいったん再起動・・・すると上がってこない。症状はクリーンインストールした時と同じ。なぜに?
レスキューCDで起動してSDカードのパーティションを覗いてみると、いつの間にかGPTに変換されているではないか。
アップグレードインストールした直後の再起動では普通に上がってきたところを見ると、2回目以降の再起動でGPTに変換しているんだろうか。
WEB上には同じESXiのバージョンでGen 8で普通に使えているという報告があるので、問題はないはずなんだが。
ESXi 7が悪いのかもと思いESXi 6.5からからインストールをやり直してESXi 6.7で再起動してみたら、6.7でも同様にGPTに変換されていた。だめじゃん。
OSアップグレード後最初の再起動までは使えるので、とりあえず急ぐ用事はこの状態で稼働して済ませることができた。ただし、再起動すると必ずGPT変換が発生して使えなくなることが確定している。

結局は内蔵SDカード

普通に使えていたころのESXi 7と現在の再起動できないESXi 7で何が違うだろうか、と考えるとインストール先くらい。
まさかとは思うけどインストール先によって動作がかわる?

iLOに入って、「Format Embedded Flash and Reset iLO」を実施したところ、Degradedなのはかわならいものの「WRITE-PROTECTED」は解消して「write-verify test failure」になった。字面通りならSDカードに書き込めるはず。
外部USBに使っていたSDカードを内蔵スロットにさしなおし、改めて6.5U3(MBR)→6.7U3→7.0とインストールとアップグレードをやり直した。アップグレードはバンドルZIPで。早いから。
すると、普通に再起動してもちゃんと上がってくるじゃないか。
つまりESXi 6.7以降のESXi(少なくともHPEカスタムイメージ)は、インストール先を見てGPT変換するかしないかを決めているようだ。iLOの都合か何かでGPTにできないだけなのかもしれないが。
以前7.0が普通に使えていたのはインストール先が内蔵SDカードだったから、ということがわかった。
外部USBでも普通に使えたなんて情報もあったが、これを見る限り2回目以降の再起動をして確認してないだけじゃないか、という気がする。一瞬は使えるから嘘じゃないけど、再起動できないなんて「使える」とは言えない。

結論

ProLiant DL360P Gen8でもESXi 7は動くが、外部USBスロットは使えず、内蔵SDカードスロットを使用する必要がある。外部USBにインストールすると、2回目以降の再起動でもれなくGPTに変換されて二度と起動しなくなる。
(RAIDにインストールした場合どうなるかは未検証)
しかし内蔵SDカードスロットを使うということは、いつまたiLOの不調が発生して「WRITE-PROTECTED」に陥って操作不能になるとも限らない。
このまま内蔵SDカードで運用するにしても、ESXi 7/8がSDカード起動を推奨しなくなったことを踏まえればGen8ではESXi 6.7でとどめておいたほうが無難と思われる。
これから中古のProLiantを買うならUEFIをサポートするGen9以降にすべき。

余談

とにかくProLiantの再起動に時間がかかるのには閉口した。
電源入れてからOSのブートローダまでたどり着くのに5分くらい?かかる。
あれこれパターンを試すたびに毎回待たされるので、この文章の内容を試すのに1週間くらいかけていると思ってもらえれば。

さらなる余談。これに凝りてGen 9を1台買いました。