先日、自宅ESXiサーバのデータストアにしているHDDが故障し、全VMが吹っ飛びました。
何かサービスを提供している訳でもなくラボ的な用途なので、一から再インストールすればまぁそれでよいのですが、これに懲りてきちんとバックアップを取るようにします。
バックアップソリューションには、オープンソースのghettoVCBを選択しました。
GitHub - lamw/ghettoVCB: ghettoVCB
[Code▼]ボタン-[Download ZIP]から、ZIPをダウンロードします。
また、こちら
https://github.com/lamw/ghettoVCB/releases
からvibファイルをダウンロードします。
今回はバックアップ専用のHDDを入れてデータストアを用意しました。そのデータストアのルートにzipをアップロードし、展開します。
[root@localhost:~] cd /vmfs/volumes/WD40EZRZ-BKUP/
[root@localhost:/vmfs/volumes/hoge] ls -l
total 640
drwxr-xr-x 1 root root 73728 Jan 11 2021 VMs
-rw-r--r-- 1 root root 44257 Nov 16 05:09 ghettoVCB-master.zip
-rw-r--r-- 1 root root 37894 Nov 16 05:09 vghetto-ghettoVCB.vib[root@localhost:/vmfs/volumes/hoge] unzip ghettoVCB-master.zip
Archive: ghettoVCB-master.zip
creating: ghettoVCB-master/
inflating: ghettoVCB-master/README.md
creating: ghettoVCB-master/build/
inflating: ghettoVCB-master/build/Dockerfile
inflating: ghettoVCB-master/build/README.md
inflating: ghettoVCB-master/build/build.sh
inflating: ghettoVCB-master/build/create_ghettoVCB_vib.sh
inflating: ghettoVCB-master/ghettoVCB-VMDKexclude.sh
inflating: ghettoVCB-master/ghettoVCB-restore.sh
inflating: ghettoVCB-master/ghettoVCB-restore_vm_restore_configuration_template
inflating: ghettoVCB-master/ghettoVCB-vm_backup_configuration_template
inflating: ghettoVCB-master/ghettoVCB.conf
inflating: ghettoVCB-master/ghettoVCB.sh
※解説サイトによってはesxi上でwgetを実行してgithubから直接取得している記載もありましたが、うちの環境ではエラーとなりました。(httpsで接続できない?)
なので、一旦PCにダウンロード後ESXiにアップしています。
公式サイトの解説に従ってvibをインストールします。
[root@localhost:/vmfs/volumes/hoge] esxcli software vib install -v /vmfs/volumes/hoge/vghetto-ghettoVCB.vib -f
Installation Result
Message: Operation finished successfully.
Reboot Required: false
VIBs Installed: virtuallyGhetto_bootbank_ghettoVCB_1.0.0-0.0.0
VIBs Removed:
VIBs Skipped:
念のためコピーを取ってからconfファイルを編集します。
このconfはどうやら "global ghettoVCB configuration file" らしいです。
[root@localhost:/vmfs/volumes/hoge/ghettoVCB-master] cp -p ghettoVCB.conf ghettoVCB.conf.org
[root@localhost:/vmfs/volumes/hoge/ghettoVCB-master] vi ghettoVCB.conf
設定項目がたくさんありますが、とりあえず見るべき個所は以下です。
VM_BACKUP_VOLUME=/vmfs/volumes/WD40EZRZ-BKUP/VMs
⇒バックアップファイルの出力先です。このディレクトリの下に [VM名]/[VM名-タイムスタンプ]/ ディレクトリが作成され、バックアップが出力されます。DISK_BACKUP_FORMAT=thin
⇒ディスクの形式です。今回は容量節約のためシンプロビジョニングを選択します。VM_BACKUP_ROTATION_COUNT=3
⇒バックアップの世代数です。
その他、バックアップ取得の際にVMをシャットダウンするか、エラー時にメール送信するかなど設定できるようです。
https://communities.vmware.com/docs/DOC-8760
dryrunモード(実際にバックアップ取得せず動作確認)で実行してみます。
ghettoVCB.sh に与えたオプションの意味は以下の通りです。
-a:すべてのVMのバックアップを取得する指定です。他には、"-f リストファイル"とすればVMのリストを、"-m VM名"とすれば特定のVMを指定できます。
-g confファイル名:"global ghettoVCB configuration file"の指定です。
-d デバッグレベル:"-d dryrun"とすると実際にバックアップ取得せず動作確認となります。他には、"-d debug"とするとデバッグモードになります。"-d info"または-dオプション省略で通常モードになります。
[root@localhost:/vmfs/volumes/hoge/ghettoVCB-master] /vmfs/volumes/WD40EZRZ-BKUP/ghe
ttoVCB-master/ghettoVCB.sh -a -g /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/ghettoVCB.conf -d dryrun
Logging output to "/tmp/ghettoVCB-2021-11-16_05-42-39-754758.log" ...
2021-11-16 05:42:40 -- info: ============================== ghettoVCB LOG START ==============================2021-11-16 05:42:40 -- info: CONFIG - USING GLOBAL GHETTOVCB CONFIGURATION FILE = /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/ghettoVCB.conf
(中略)
2021-11-16 05:42:41 -- info: ###### Final status: OK, only a dryrun. ######
2021-11-16 05:42:41 -- info: ============================== ghettoVCB LOG END ================================
正常終了しましたので、今度は実際にバックアップを取得してみます。
[root@localhost:/vmfs/volumes/hoge/ghettoVCB-master] /vmfs/volumes/WD40EZRZ-BKUP/ghe
ttoVCB-master/ghettoVCB.sh -a -g /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/ghettoVCB.conf
Logging output to "/tmp/ghettoVCB-2021-11-16_05-45-14-755114.log" ...
2021-11-16 05:45:14 -- info: ============================== ghettoVCB LOG START ==============================2021-11-16 05:45:14 -- info: CONFIG - USING GLOBAL GHETTOVCB CONFIGURATION FILE = /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/ghettoVCB.conf
(中略)
2021-11-16 06:21:28 -- info: ###### Final status: All VMs backed up OK! ######
2021-11-16 06:21:28 -- info: ============================== ghettoVCB LOG END ================================
うまくいきました。
データストアを見てみると、バックアップファイルができています。
あとは、これをcronでスケジュール実行するよう設定します。
[root@localhost:~] vi /etc/rc.local.d/local.sh
編集後の内容は以下の通りです。赤字が編集部分です。
UTCで毎週日曜日の19時(JSTで月曜日の早朝4時)にバックアップを実行します。
[root@localhost:~] cat /etc/rc.local.d/local.sh
#!/bin/sh# local configuration options
# Note: modify at your own risk! If you do/use anything in this
# script that is not part of a stable API (relying on files to be in
# specific places, specific tools, specific output, etc) there is a
# possibility you will end up with a broken system after patching or
# upgrading. Changes are not supported unless under direction of
# VMware support.# Note: This script will not be run when UEFI secure boot is enabled.
/bin/kill $(cat /var/run/crond.pid)
/bin/echo "0 19 * * 0 /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/ghettoVCB.sh -a -g /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/ghettoVCB.conf > /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/log/ghettoVCB-backup-\$(date +\\%s).log" >> /var/spool/cron/crontabs/root
crondexit 0
ESXiホストを再起動して、設定が反映されるか確認します。
[root@localhost:~] cat /var/spool/cron/crontabs/root
#min hour day mon dow command
1 1 * * * /sbin/tmpwatch.py
1 * * * * /sbin/auto-backup.sh
0 * * * * /usr/lib/vmware/vmksummary/log-heartbeat.py
*/5 * * * * /bin/hostd-probe.sh ++group=host/vim/vmvisor/hostd-probe/stats/sh
00 1 * * * localcli storage core device purge
0 2 * * * /opt/fts/bin/prcoll-vm-support.sh
0 19 * * 0 /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/ghettoVCB.sh -a -g /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/ghettoVCB.conf > /vmfs/volumes/WD40EZRZ-BKUP/ghettoVCB-master/log/ghettoVCB-backup-$(date +\%s).log
きちんと入ってました。
あとは、つぎの月曜日早朝に実行されたことをログで確認できれば完璧ですね