PowerCLIとESXCLIによるESXiホスト構成のバックアップとリストア:サーバー障害時に仮想化クラスタを迅速に復旧する手法

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

背景とESXiホスト構成バックアップが不可欠な理由

多くのシステム管理者は、Veeam、Nakivo、Synology Active Backupなどを活用して仮想マシン(VM)のバックアップを徹底しています。データは最も重要な資産であるため、この運用方針は完全に正しいと言えます。しかし、運用の現場ではインフラの土台となるESXiサーバー自体の構成(Host Configuration)のバックアップが見落とされがちです。

実際の運用環境では、ESXiを導入したブート用USBメモリやSDカードは、継続的なログ書き込みによって2〜3年で障害を起こしやすい傾向があります。ブートドライブが故障すると、サーバーは完全にダウンします。その結果、vSwitch、ポートグループ、VLANタグ、iSCSI/NFSストレージ用VMkernelポート、ファイアウォールルール、ローカルユーザーといった構成情報がすべて失われてしまいます。

SAN/NAS上の仮想マシンデータが無事であっても、ホストを一から再構築する必要があります。手動で多数のIPアドレス、サブネット、VLANを再割り当てする作業は半日以上を要するだけでなく、ネットワーク設定の入力ミスによってVMが起動できなくなるリスクも孕んでいます。

筆者が管理するDell R640×8台のクラスタ環境でも、月曜の午前8時ちょうどにホスト03のSDカードが突然故障したことがありました。しかし、Synology NAS上にホスト構成のバックアップファイルを保管していたおかげで、新しいカードへの交換、ESXiの再インストール、構成の復元までをわずか12分で完了できました。ホストは問題なくクラスタに再参加し、本番サービスの中断も発生しませんでした。

ESXiの構成バックアップはconfigBundle.tgzという圧縮ファイル(通常80KB〜300KB程度)にまとめられており、以下の情報が網羅されています。

  • 仮想スイッチ構成(標準vSwitchおよびDistributed Virtual Switchのプロキシスイッチ)。
  • ストレージファブリック構成(ソフトウェアiSCSI IQN、NFSマウントパス、Fibre Channelのゾーニング情報)。
  • コアネットワーク設定:静的IP、ゲートウェイ、DNS、NTPサーバー、Syslog転送設定。
  • 自己署名SSL証明書、root/ローカルユーザーアカウント、ライセンスキー。

作業環境の準備

実際のネットワーク状況に応じて、SSH経由で直接実行するESXCLI/vim-cmd(オンサイトでの緊急対応)か、VMware PowerCLI(集中管理および自動化)のいずれかを選択できます。

1. ESXiホストでのSSHサービスの有効化

ESXiではセキュリティ確保のため、デフォルトでSSHが無効になっています。直接コマンドライン操作が必要な場合は、以下の手順で有効化します。

  1. ブラウザからESXi Host Clientにアクセスします:https://<ESXi-IP>/ui
  2. 管理 > サービスタブを開きます。
  3. サービス一覧からTSM-SSHを探し、右クリックして起動をクリックします。

2. 管理マシンへのVMware PowerCLIのインストール

PowerCLIはWindows、Linux、macOSのPowerShell 7上で快適に動作します。複数サーバーの定期バックアップを自動化したい場合に最適な選択肢です。

管理者権限でPowerShellを起動し、以下を実行します。

# PowerShell Galleryから公式PowerCLIモジュールをインストール
Install-Module -Name VMware.PowerCLI -Scope CurrentUser -Confirm:$false

# 自己署名(Self-signed)証明書に対するSSL警告を無視する設定
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

詳細なバックアップ&リストア手順

必須操作:RAM上のデータをブートパーティションへ同期

ESXiには、構成の変更内容を一時的にRAM上に保持する仕組みがあります。IPの変更やポートグループの新規作成直後にバックアップを取得すると、最新の変更が含まれない場合があります。そのため、必ず事前にOSへ強制同期書き込みを実行してください。

vim-cmd hostsvc/firmware/sync_config

方法1:SSH経由でのvim-cmdコマンドの実行

この方法は、単一ホストを素早くバックアップしたい場合や、vCenter Serverがオフラインになっている状況に適しています。

バックアップ手順:

# 1. RAM上の構成情報をストレージに同期
vim-cmd hostsvc/firmware/sync_config

# 2. 構成バックアップバンドルを生成
vim-cmd hostsvc/firmware/backup_config

ターミナル上に、以下のようなダウンロードリンクが出力されます。

Bundle can be downloaded at : http://*/downloads/123456/configBundle-esxi01.local.tgz

アスタリスク(*)の部分を対象ESXiホストのIPアドレスに置き換えます(例:http://192.168.10.50/downloads/123456/configBundle-esxi01.local.tgz)。このURLをブラウザに貼り付けて、圧縮ファイルをローカルPCにダウンロードします。

リストア手順:

ESXiをクリーンインストールした後(元の環境とビルド番号が完全に一致している必要があります):

  1. ダウンロードしたファイル名を標準のフォーマットであるconfigBundle.tgzに変更します(長いホスト名が含まれたファイル名のままだとシステムが認識しません)。
  2. SCPまたはWinSCPを使用して、ファイルをホストの/tmp/ディレクトリにコピーします。
scp configBundle.tgz [email protected]:/tmp/
  1. ホストへのSSHセッションを開き、復元コマンドを実行します。
# ホストをメンテナンスモードに移行
esxcli system maintenanceMode set --enable true

# 構成の復元(最後の「1」は適用直後に自動再起動を行うフラグ)
vim-cmd hostsvc/firmware/restore_config /tmp/configBundle.tgz 1

サーバーはファイルを読み込んで構成を展開し、自動的に再起動します。起動が完了すると、すべてのvSwitch、ポートグループ、データストアが元の状態で復元されます。

方法2:VMware PowerCLIによる自動化

3台以上のホストを管理している場合は、各ノードで手動入力する代わりにPowerCLIを活用して一括バックアップを行うことを推奨します。

単一ホストのバックアップ:

# ESXiホストに接続
Connect-VIServer -Server 192.168.10.50 -User root -Password 'MatKhauESXi'

# 管理ドライブにバックアップを出力
Get-VMHostFirmware -VMHost 192.168.10.50 -BackupConfiguration -DestinationPath "D:\VMware_Backups\"

Disconnect-VIServer -Confirm:$false

クラスタ全体の自動検出・バックアップスクリプト:

以下のスクリプトは、vCenterからホスト一覧を自動取得し、日付ごとのフォルダを作成して構成ファイルをダウンロードします。

$vCenter = "vcenter.itfromzero.local"
$DateFolder = Get-Date -Format 'yyyy-MM-dd'
$BackupDir = "D:\ESXi_AutoBackup\$DateFolder"

if (!(Test-Path -Path $BackupDir)) {
    New-Item -ItemType Directory -Path $BackupDir | Out-Null
}

Connect-VIServer -Server $vCenter -User [email protected] -Password 'MatKhauAdmin'

$AllHosts = Get-VMHost
foreach ($HostNode in $AllHosts) {
    Write-Host "[+] バックアップ実行中: $($HostNode.Name)" -ForegroundColor Cyan
    Get-VMHostFirmware -VMHost $HostNode -BackupConfiguration -DestinationPath $BackupDir
}

Disconnect-VIServer -Confirm:$false
Write-Host "[✓] 全 $($AllHosts.Count) 台のホストのバックアップが完了しました!" -ForegroundColor Green

PowerCLIによる構成リストア:

Connect-VIServer -Server 192.168.10.50 -User root -Password 'MatKhauESXi'

# メンテナンスモードを有効化
Set-VMHost -VMHost 192.168.10.50 -State "Maintenance"

# 構成の復元(このコマンド実行後、ESXiは自動的に再起動します)
Set-VMHostFirmware -VMHost 192.168.10.50 -Restore -SourcePath "D:\VMware_Backups\configBundle-192.168.10.50.tgz" -HostUser root -HostPassword 'MatKhauESXi'

リストア時に厳守すべき2つの技術原則

  • ビルド番号の完全一致:復旧対象のESXiには、旧ホストとまったく同一のパッチバージョンをインストールする必要があります(例:どちらもESXi 7.0 Update 3k、Build 21313628)。古いバージョンのバックアップを新しいビルドやメジャーバージョン違い(7.0から8.0など)に適用すると、VMkernelの破損やブート失敗の原因となります。
  • ハードウェアUUIDの確認:異なるハードウェア筐体にバックアップを復元する場合(NICのMACアドレスやマザーボードのシリアル番号が異なる場合)、PowerCLIのリストアコマンドはUUID不一致のエラーを返します。この際は、Set-VMHostFirmwareコマンドレットに-Forceパラメータを付与して強制上書きしてください。再起動後は、物理NIC(vmnic0、vmnic1)のマッピング関係を必ず再確認してください。

検証と定期モニタリングの設定

定期的な復元テストを伴わないバックアップ運用には、常に潜在的なリスクが伴います。

1. ファイルサイズと整合性の確認

正常なconfigBundle.tgzのサイズは、通常50KB〜300KB程度です。ダウンロードしたファイルが0KBまたは数バイトしかない場合、エクスポート処理が途中で失敗しています。7-ZipやLinuxのtarコマンドで開き、内部にstate.tgzとManifest.txtの2つのファイルが正しく含まれているか確認してください。

# Linux/macOSでのファイル構造確認
tar -ztvf configBundle.tgz

2. Windowsタスクスケジューラによる自動実行

手動運用に頼るのは避けましょう。前述のPowerCLIスクリプトをWindowsタスクスケジューラに登録し、毎週日曜日の23:00などに定期実行するよう設定します。また、「VLANの再設定、vSwitchアップリンクの変更、HBAカードの交換を行った直後は、必ず即座にバックアップスクリプトを実行する」という運用ルールを徹底してください。

3. 安全なバックアップ保存先の確保

バックアップファイルを対象サーバー自体のローカルデータストアに保存することは絶対に避けてください。社内NAS、別クラスタ上の管理用VM、または厳格なアクセス制御が設定されたクラウドストレージへ自動転送するように構成します。今日15分かけて自動化設定を行っておくことで、将来のサーバー障害時にも冷静かつ迅速に対処できるようになります。

Share: