ネットワークエンジニアのITブログ

長らくネットワークで生活してきましたが、ここ数年クラウドとサーバー系に触れる機会が増えて、日々成長しています。最近のお気に入りはNSXALBとGoogle Cloud。

ESXiの起動用USBメモリにあるファイルが壊れたので復旧しました

ESXi7へのバージョンアップ準備が完了したので、ESXi6.7から起動しようとしたらロード中にCRCエラーが発生してしまいました。
どうやら、nsx_cfga.v00というファイルが壊れているようだったので、復旧した際の手順を紹介します。
USBメモリも容量が少なく古かったので、これを機に新しいものに交換しようと思います。

復旧方針

このホストはvCenterのデータが格納されているので、まずは復旧優先で、その後バックアップリストしていこうと思います。
1.旧USBメモリのESXiを復旧
2.旧USBメモリのバックアップ
3.新USBメモリへリストア

USBメモリのESXiを復旧

nsx_cfga.v00が読み込めないということなので、別のESXi6.7ホストの起動用USBメモリに同じファイルがあるはずなので、そこからコピーします。そのような環境がない場合は、新規にESXi6.7の起動用USBメモリを作成することでファイルを取り出せます。
環境としては以下となっています。
esxi20:正常なホスト
esxi21:壊れたホスト

まず、esxi20にssh接続しstorageの接続状態を確認します。

[root@esxi20:~] ★ストレージの接続状況をスキャンします
[root@esxi20:~] esxcli storage filesystem rescan
esxcli storage filesystem list
[root@esxi20:~] 
[root@esxi20:~] 
[root@esxi20:~] ★ストレージの接続状況を表示します
[root@esxi20:~] esxcli storage filesystem list
Mount Point                                        Volume Name      UUID                                 Mounted  Type             Size          Free
-------------------------------------------------  ---------------  -----------------------------------  -------  ------  -------------  ------------
/vmfs/volumes/616bc6de-7639309c-7864-1cfd08727d86  datastore_qnap   616bc6de-7639309c-7864-1cfd08727d86     true  VMFS-6  2147215212544  864519454720
/vmfs/volumes/627fa3b2-dc68fad1-9252-80615f17003e  datastore1TB_20  627fa3b2-dc68fad1-9252-80615f17003e     true  VMFS-6   999922073600  664816058368
/vmfs/volumes/6276f470-3a39838e-09fb-80615f1703cc                   6276f470-3a39838e-09fb-80615f1703cc     true  vfat        299712512     117448704
/vmfs/volumes/fa78cfef-9654fc82-d090-11c095603827                   fa78cfef-9654fc82-d090-11c095603827     true  vfat        261853184      73457664
/vmfs/volumes/26e4d3ee-927f8b7c-a9f0-3eae44bf1690                   26e4d3ee-927f8b7c-a9f0-3eae44bf1690     true  vfat        261853184     106221568
[root@esxi20:~] 
[root@esxi20:~] 
[root@esxi20:~] ★USBのパススルーを停止しUSBメモリが見えるようにします
[root@esxi20:~] /etc/init.d/usbarbitrator stop
UsbUtil: Releasing all USB adapters to VMkernel
watchdog-usbarbitrator: Terminating watchdog process with PID 2098603
usbarbitrator stopped
[root@esxi20:~] 
[root@esxi20:~] 
[root@esxi20:~] ★ここで壊れたesxi21のUSBメモリをesxi20に接続します
[root@esxi20:~] 
[root@esxi20:~] 
[root@esxi20:~] ★ストレージの接続状況をスキャンします
[root@esxi20:~] esxcli storage filesystem rescan
[root@esxi20:~] 
[root@esxi20:~] 
[root@esxi20:~] ★ストレージの接続状況を表示します
[root@esxi20:~] ★追加された下3つがesxi21のストレージになります
[root@esxi20:~] esxcli storage filesystem list
Mount Point                                        Volume Name      UUID                                 Mounted  Type             Size          Free
-------------------------------------------------  ---------------  -----------------------------------  -------  ------  -------------  ------------
/vmfs/volumes/616bc6de-7639309c-7864-1cfd08727d86  datastore_qnap   616bc6de-7639309c-7864-1cfd08727d86     true  VMFS-6  2147215212544  864519454720
/vmfs/volumes/627fa3b2-dc68fad1-9252-80615f17003e  datastore1TB_20  627fa3b2-dc68fad1-9252-80615f17003e     true  VMFS-6   999922073600  664815009792
/vmfs/volumes/6276f470-3a39838e-09fb-80615f1703cc                   6276f470-3a39838e-09fb-80615f1703cc     true  vfat        299712512     117448704
/vmfs/volumes/fa78cfef-9654fc82-d090-11c095603827                   fa78cfef-9654fc82-d090-11c095603827     true  vfat        261853184      73457664
/vmfs/volumes/26e4d3ee-927f8b7c-a9f0-3eae44bf1690                   26e4d3ee-927f8b7c-a9f0-3eae44bf1690     true  vfat        261853184     106221568
/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc                   4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc     true  vfat        261853184      73449472
/vmfs/volumes/0fa880e4-48deba12-0143-8b27d81f5072                   0fa880e4-48deba12-0143-8b27d81f5072     true  vfat        261853184      73633792
/vmfs/volumes/614cc759-94e221ea-0dd8-001b21893ba4                   614cc759-94e221ea-0dd8-001b21893ba4     true  vfat        299712512     117424128
[root@esxi20:~] 
[root@esxi20:~] 

nsx_cfga.v00ファイルは上記ストレージ領域のいずれかにあるので調べたところ、vfat領域の以下にありました。
esxi20(正常):vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc
esxi21(故障):vmfs/volumes/fa78cfef-9654fc82-d090-11c095603827
場所が確認できたので、esxi20からesxi21へnsx_cfga.v00をコピーします。

[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] ★故障したUSBメモリ(esxi21)でnsx_cfga.v00を確認して削除していきます
[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] ls -al | grep nsx_cfga.v00 
-rwx------    1 root     root       1396512 Feb  4  2022 nsx_cfga.v00
[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] 
[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] ★バックアップを取ってオリジナルを削除します
[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] cp -p nsx_cfga.v00 nsx_cfga.v00_bak 
[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] rm nsx_cfga.v00
[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] 
[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] ★オリジナルが削除されていることを確認します
[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] ls -al | grep nsx_cfga.v00 
-rwx------    1 root     root       1396512 Feb  4  2022 nsx_cfga.v00_bak
[root@esxi20:/vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc] 

[root@esxi20:~] 
[root@esxi20:~] ★esx20からesxi21へnsx_cfga.v00をコピーします
[root@esxi20:~] cp -a /vmfs/volumes/fa78cfef-9654fc82-d090-11c095603827/nsx_cfga.v00 /vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc/nsx_cfga.v00
[root@esxi20:~] 
[root@esxi20:~] ★コピーされたことを確認しました
[root@esxi20:~] ls -al /vmfs/volumes/4b1735ef-f09b7cc0-a9ce-a6a4f89ff2cc | grep nsx_cfga.v00
-rwx------    1 root     root       1396512 May 16  2022 nsx_cfga.v00
-rwx------    1 root     root       1396512 Feb  4  2022 nsx_cfga.v00_bak
[root@esxi20:~] 

あとは、USBメモリを外して、esxi21に接続して起動します。
私はこれで復旧しました。

esxiのバックアップ

バックアップは、ESXIコマンドラインにて取得します。
手順はこちらを参考にしました。
kb.vmware.com

[root@esxi21:~] ★変更された構成を永続ストレージと同期するために次のコマンドを実行します
[root@esxi21:~] vim-cmd hostsvc/firmware/sync_config
[root@esxi21:~] 
[root@esxi21:~] ★ESXi ホストの構成をバックアップするために次のコマンドを実行します
[root@esxi21:~] vim-cmd hostsvc/firmware/backup_config
Bundle can be downloaded at : http://*/downloads/52bca3bb-67bc-3c17-d06d-1cb009c310a0/configBundle-esxi21.home.local.tgz
[root@esxi21:~] 

ここで上記URLの「*」に192.168.1.21を入力し、ブラウザからアクセスしバックアップファイルをダウンロードします。

リストア

新しいUSBメモリにESXi6.7をインストールします。この段階では、ホストにSSH接続できればいいので、ホスト名やIPなどの設定はデフォルトのままで構いません。
インストールが完了したら、USBメモリからesxi6.7を起動して、SSH接続しましょう。
ホストはDHCPで起動したので、DHCPの192.168.1.174を確認しておきます。
事前に、ntp、shell、SSHの設定を有効にすることを忘れずに。

先ほどバックアップしたファイルをWinSCPでESXiのtmpに転送します。

なお、 バックアップからリストアを行うためには、リストア先 ESXi ホストがバックアップを取得した ESXi と同じビルドである必要があるので、以下のコマンドで確認します。

[root@localhost:~] ★ビルドを確認します
[root@localhost:~] esxcfg-info -u
9D89B0D4-DD2F-4F9B-8088-0AF307758D16
[root@localhost:~] 
[root@localhost:~] ★バージョン、パッチも確認しておきます。
[root@localhost:~] esxcli system version get
   Product: VMware ESXi
   Version: 6.7.0
   Build: Releasebuild-14320388
   Update: 3
   Patch: 73
[root@localhost:~] 

以下の手順でリストアを実行します。

[root@localhost:~] cd /tmp
[root@localhost:/tmp] ls -al
total 60
drwxrwxrwt    1 root     root           512 Apr 15 09:36 .
drwxr-xr-x    1 root     root           512 Apr 15 09:26 ..
-rw-r--r--    1 root     root         41054 Apr 15 07:34 configBundle-esxi21.home.local.tgz
-rw-------    1 root     root            40 Apr 15 09:35 probe.session
drwx------    1 root     root           512 Apr 15 08:42 vmware-root
[root@localhost:/tmp] 
[root@localhost:/tmp] 
[root@localhost:/tmp] ★リストアコマンドを実行する前にバックアップファイル名を「configBundle.tgz」にリネームします
[root@localhost:/tmp] mv configBundle-esxi21.home.local.tgz configBundle.tgz
[root@localhost:/tmp] 
[root@localhost:/tmp] ls -al
total 60
drwxrwxrwt    1 root     root           512 Apr 15 09:39 .
drwxr-xr-x    1 root     root           512 Apr 15 09:26 ..
-rw-r--r--    1 root     root         41054 Apr 15 09:39 configBundle.tgz
-rw-------    1 root     root            40 Apr 15 09:35 probe.session
drwx------    1 root     root           512 Apr 15 08:42 vmware-root
[root@localhost:/tmp] 

★ESXi ホストをメンテナンスモードに変更します

[root@localhost:/tmp] ★ESXi ホストの構成をリストアします
[root@localhost:/tmp] vim-cmd hostsvc/firmware/restore_config configBundle.tgz

リストアコマンドを実行するとリストアがかかって再起動します。
これで無事復旧と新しいUSBメモリへの移行が完了しました。

なお、後から分かったのですが、ESXiの設定はきれいに戻りましたが、NSX-Tの設定が戻っていませんでした。
他の方の記事を見ると同様の事象が発生しているので、仕様かなと思います。
考えてみると、NSX-Tの設定は、NSX Managerのほうからコントロールしているので妙に納得しました。
なので、NSX-Tは後日再インストールして復元させようと思います。