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