VMware ESXiでのVMのバックアップ

無料のVMware ESXiにはバックアップツールが付属しないので、VMのバックアップは自分で何とかする必要があります。
AKIBA de: 無償のVMware ESXiでホットバックアップを自動で実行する方法(のヒント)
こちらにあるとおり、VMの動作中はvmdk(仮想マシンディスク)ファイルのコピーができないのですが、スナップショットを作成するとコピーできるようになります。これを利用したバックアップスクリプトがVMwareのユーザコミュニティにアップされていました。

探せばまだいろいろありそうだったのですが、とりあえず1つ目のスレッドにあった"ESXi-Backup.pl"というPerlスクリプトを試してみました。このスクリプトはVMware Infrastructure Remote CLI(RCLI)というPerlコマンドラインインターフェイスを使用して、

  • 仮想マシンのスナップショットの作成
  • ファイルのダウンロード
  • 作成したスナップショットの削除
  • tar/gzipで圧縮

という処理を行うものです。
使用するためには、RCLIインストールしておく必要があります*1。また、tar/gzipについては、GnuWin32を使うのでそちらもインストールしておく必要があります。

RCLI等をインストールしたら、スクリプトの先頭にある設定を環境にあわせて変更します。

my $url = "https://IP-Address:Port/sdk/vimService";     #URL to your ESX Host, default: <https://IP-Address:Port/sdk/vimService>
my $username = "user";                                  #Username
my $password = "pw";                                    #User password
my $snapshotname = "BackupSnap";                        #Name of your Snapshot
my $DSPath = "[datastore]";                             #Datastore name on ESX Host, example [datastore]
my @VMNames;
$VMNames[0] = "ServerDisplayName";                      #Uncomment the next lines if you like to backup more vm's
#$VMNames[1] = "";
#$VMNames[2] = "";
#$VMNames[3] = "";
#$VMNames[4] = "";
#$VMNames[5] = "";
#$VMNames[6] = "";
#$VMNames[7] = "";
#$VMNames[8] = "";
#$VMNames[9] = "";
my $RCLIPath = "C:/Progra~1/VMware/VMWare~1";           #VI Remote CLI Path (Windows: Use ONLY Short Folder Names!!!!)
my $DestPath = "P:/IT/Backups/VMs/";                                   #Destination Path you like to copy to (Windows: Use ONLY Short Folder Names!!!!)

# Added tar gzip vars - kchawk ################
my $Tar = "C:/Progra~1/GnuWin32/bin/tar.exe";
my $gzip = "C:/Progra~1/GnuWin32/bin/gzip.exe";
#################################################

コメントにあるとおりパス($RCLIPath, $DestPath等)にはロングファイルネームは使えないので、8.3形式で指定する必要があります。特に$RCLIPathは、VMware関連の製品(Workstation, Conterter等)が複数インストールされていると数字の部分が変わってきます。また、バックアップ先パスには、VM名に対応するフォルダをあらかじめ作成しておきます。

実行してみた結果ですが、バックアップはできましたがVM一つ(10GB弱)をギガビットLAN経由で45分くらいかかりました(バックアップ先もVMware上のWindowsだったので実際にはもう少し速いかも)。夜間に実行するのであれば問題ないですが、VM数が増えると厳しいかもしれないですね。

スレッドの方でも時間がかかりすぎるということで、SCPとvmkfstoolsを使うスクリプトも公開されているのでまた試してみたいと思います。

*1:RCLIをインストールするとActivePerlがインストールされるので、すでにAcrivePerlが入っている環境の場合には注意が必要です