ESXiのVMバックアップは「ghettoVCB」一択

かつて「vCenter Server」をここのサイトバックエンドで動かしていたが、弱小仮想環境に99.999%稼働などのミッションクリティカルは全く必要なく、2年でライセンス更新をヤメた。それでも最低限欠かせないと思い続けたのは、サイト損失を避けるための「VMバックアップ」だ。アプリなどで作成したデータはNASにあるので良いが、構築した設定環境はディスクイメージで保存しなければ失われてしまう。

無償にこだわるVMディスクイメージのバックアップならば、次のリンク先で有志が公開しているOSSで十分にカバーすることができる。

ghettoVCB. Contribute to lamw/ghettoVCB development by creating an account on GitHub.

ここ5年以上、週1自動実行で利用しているのが「ghettoVCB」。

実体はESXi上でスナップショットとバックアップをcron実行させるスクリプトであり、筆者環境では月曜深夜26時に指定VMを自動実行させている。信頼性はとても高く、実行がコケた事はホントにいちども無い。

筆者環境ではESXi(構成→ストレージ)でNFSマウントさせたNAS上(上画像)にバックアップさせてるが、その直データをWindowsエクスプローラで見た状態が下画像。例えば、vSphere Client上のストレージ参照でvmxファイルを指定すれば、すぐに仮想マシン追加もできる状態だ(マシン名が重複しなければ)。

インストール

まず最初に、ESXiにログインしてシェル上でwget、続いてDLしたESXi拡張形式のvibをインストールする(事後、ESXiの再起動が必要)。wgetできない場合は、直にDLしたものをデータストア参照でアップロード(でも、このvibインストールしなくても問題なく動いてる)。

[root@esxi:~] cd /tmp
[root@esxi:~] esxcli network firewall ruleset set --enabled=true --ruleset-id=httpClient
[root@esxi:~] wget https://github.com/lamw/ghettoVCB/archive/master.zip
[root@esxi:~] unzip ghettoVCB-master.zip
[root@esxi:~] esxcli software vib install -v /vmfs/volumes/datastore/tmp/vghetto-ghettoVCB.vib -f

環境設定

続いて、上記で解凍したzip(https://github.com/lamw/ghettoVCB/archive/master.zip)ディレクトリを適当な場所に移動する。以下は、永続的に利用可能なデータストアとして、/vmfs/volumes/datastore/ 下へ移動する例。

[root@esxi:~] mv ghettoVCB /vmfs/volumes/datastore/
[root@esxi:~] ls -l /vmfs/volumes/datastore/ghettoVCB/
total 4104
-rw------- 1 root root 2246 Mar 15 2019 README.md
-rw------- 1 root root 32 Aug 6 14:56 backup_vmlist.txt
-rwxr-xr-x 1 root root 17555 Mar 15 2019 ghettoVCB-restore.sh
-rw------- 1 root root 309 Mar 15 2019 ghettoVCB-restore_vm_restore_configuration_template
-rw------- 1 root root 356 Mar 15 2019 ghettoVCB-vm_backup_configuration_template
-rw------- 1 root root 731 Mar 15 2019 ghettoVCB.conf
-rwxr-xr-x 1 root root 71336 Mar 15 2019 ghettoVCB.sh
-rw------- 1 root root 22596 Mar 15 2019 vghetto-ghettoVCB-offline-bundle.zip
-rw------- 1 root root 20048 Mar 15 2019 vghetto-ghettoVCB.vib
[root@esxi:~]

最低限変更が必要なのは、backup_vmlist.txtと、ghettoVCB.conf の編集。

対象VMとバックアップ先・世代指定

バックアップ対象の仮想マシン名を以下のように列記:backup_vmlist.txt
バックアップ基本設定:ghettoVCB.conf
※最低限変更する個所として、「VM_BACKUP_VOLUME=」「VM_BACKUP_ROTATION_COUNT=」の2行。前者がバックアップ先ディレクトリ、後者がバックアップ世代数。

[root@esxi:~] cat /vmfs/volumes/datastore/ghettoVCB/backup_vmlist.txt
nas
ns
router
monitor
speed
[root@esxi:~] cat /vmfs/volumes/datastore/ghettoVCB/ghettoVCB.conf
VM_BACKUP_VOLUME=/vmfs/volumes/datastore-nfs/ova
DISK_BACKUP_FORMAT=thin
VM_BACKUP_ROTATION_COUNT=3
POWER_VM_DOWN_BEFORE_BACKUP=0
ENABLE_HARD_POWER_OFF=0
ITER_TO_WAIT_SHUTDOWN=3
POWER_DOWN_TIMEOUT=5
ENABLE_COMPRESSION=0
VM_SNAPSHOT_MEMORY=0
VM_SNAPSHOT_QUIESCE=0
ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP=0
ENABLE_NON_PERSISTENT_NFS=0
UNMOUNT_NFS=0
NFS_SERVER=192.168.0.50
NFS_VERSION=nfs
NFS_MOUNT=/mount/nas/datastore
NFS_LOCAL_NAME=datastore-nfs
NFS_VM_BACKUP_DIR=ova
SNAPSHOT_TIMEOUT=15
EMAIL_ALERT=0
EMAIL_LOG=0
EMAIL_SERVER=auroa.primp-industries.com
EMAIL_SERVER_PORT=25
EMAIL_DELAY_INTERVAL=1
EMAIL_TO=auroa@primp-industries.com
EMAIL_ERRORS_TO=
EMAIL_FROM=root@ghettoVCB
WORKDIR_DEBUG=0
VM_SHUTDOWN_ORDER=
VM_STARTUP_ORDER=
[root@esxi:~]

ghettoVCB.conf 内にはNFSマウントや実行後のメール通知もできるよう設定項目があるが、筆者の場合使っていない。

バックアップ実行日時の設定

さらに、local.sh を編集する(ESXi再起動後のフォローのため)。以下、ボールド行が筆者環境の設定例。

cron指定は、/vmfs/volumes/datastore/ghettoVCB/ghettoVCB.sh の設定を読み込み、/vmfs/volumes/datastore/ghettoVCB/backup_vmlist.txt をバックアップ対象として、-g でconfを指定し、月曜深夜26時5分(5 17 * * 1)に実行する、というもの。「chmod -R 777 …」しているのは、WindowsからSamba経由で見た場合にコピーなどできるようにするため。

ESXiを今すぐに再起動しないのであれば、/var/spool/cron/crontabs/root へ直に下記リストのボールド部分を追記しておけばいい。すると、直近からcron実行される。

[root@esxi:~] cat /etc/rc.local.d/local.sh
#!/bin/sh

cat<<_EOT_>>/var/spool/cron/crontabs/root
5 17 * * 1 /vmfs/volumes/datastore/ghettoVCB/ghettoVCB.sh \
-f /vmfs/volumes/datastore/ghettoVCB/backup_vmlist.txt \
-g /vmfs/volumes/datastore/ghettoVCB/ghettoVCB.conf;/bin/chmod -R 777 /vmfs/volumes/datastore-nfs/ova

/bin/kill $(cat /var/run/crond.pid)
/usr/lib/vmware/busybox/bin/busybox crond
[root@esxi:~]

さらに筆者環境の事例では、robocopyで「robocopy n:\ova d:\ova /MIR /XO /FFT /R:5 /NP」をタスクスケジューラで動かして念のためローカルディスクにコピーしている。

■Windows上のタスクの追加例(管理者権限で実行)

PS C:\windows\system32> schtasks /create /tn robocoy /tr "powershell -NoProfile -ExecutionPolicy Unrestricted C:\robocopy.ps1" /sc WEEKLY /D MON /st 00:30 /rl highest /F
成功: スケジュール タスク "robocoy" は正しく作成されました。
PS C:\windows\system32>

後日メンテ:ESXiパッチ適用時はVIBアンインストールの必要

なお、ghettoVCBのvibがインストールされていると、ESXiの公式パッチが適用できない。そのため、以下例のようにパッチ適用前にはいったんアンインストールし、適用後に再びインストールする必要がある。

■アンインストール
[root@esxi:~] esxcli software vib remove -n ghettoVCB
■再びインストール
[root@esxi:~] esxcli software vib install -v /vmfs/volumes/datastore0/ghettoVCB/vghetto-ghettoVCB.vib -f
sponsored links