はじめに
vCenter 上(GUI)操作では無く、コマンド操作で VMware ESXi 仮想マシンのバックアップツールを作成した
環境
仮想環境 : ESXi 6.0.0
仮想マシン格納データストア名 : vm_datastore
バックアップ先データストア名 : NFS_datastore・・・外部ストレージ等が望ましいかなぁ
ツールでやってること
①Vmid の確認
②構成ファイルのコピー(vmx/vmxf/nvram/vmsd/vmsn)
③スナップショット作成
④ディスクタイプ monosparse のクローンを作成(vmdk)
⑤③で作成したスナップショット削除
※注意 : スナップショット取得不可な環境では使用できません。。。RDM 等
ツール中身
#!/bin/sh
DATA_STORE=${1}
BK_DATA_STORE=/vmfs/volumes/NFS_datastore
VM_DIR=/vmfs/volumes/${DATA_STORE}
BK_DIR=${BK_DATA_STORE}/Backup
SNAPSHOT_NAME=forBackup
/bin/vim-cmd vmsvc/getallvms | grep ${DATA_STORE} | sort -k2 > ${BK_DIR}/vm_guest_list_`hostname`.txt
for HOSTNAME in `/bin/vim-cmd vmsvc/getallvms | grep ${DATA_STORE} | sort -k2 | awk '{ print $4 }' | awk -F'/' '{ print $1 }'`
do
if [ ! -d ${BK_DIR}/${HOSTNAME} ]; then
mkdir ${BK_DIR}/${HOSTNAME}
fi
rm -f ${BK_DIR}/${HOSTNAME}/*
VMID=`/bin/vim-cmd vmsvc/getallvms | grep ${DATA_STORE} | grep ${HOSTNAME}/ | awk '{ print $1 }'`
VMX=`/bin/vim-cmd vmsvc/getallvms | grep ${DATA_STORE} | grep ${HOSTNAME}/ | awk '{ print $4 }'`
VMDK_LIST=`grep vmdk ${VM_DIR}/${VMX} | awk '{ print $NF }' | sed 's/"//g'`
##### Copy configuration file
cd ${VM_DIR}/${HOSTNAME}
cp -p *.vmx *.vmxf *.nvram *.vmsd *.vmsn ${BK_DIR}/${HOSTNAME}/.
##### Create snapshot
/bin/vim-cmd vmsvc/snapshot.create ${VMID} ${SNAPSHOT_NAME}
##### Virtual disk backup
for VMDK in `echo ${VMDK_LIST}`
do
vmkfstools -i ${VM_DIR}/${HOSTNAME}/${VMDK} -d monosparse ${BK_DIR}/${HOSTNAME}/${VMDK}
done
##### Delete the most recent snapshot
SSID=`/bin/vim-cmd vmsvc/snapshot.get ${VMID} | grep Id | awk '{ print $4 }' | tail -1`
/bin/vim-cmd vmsvc/snapshot.remove ${VMID} ${SSID}
done
使用方法
バックアップ対象の仮想マシンが格納されているデータストア名を引数指定する
※注意 : データストア内の全仮想マシンがバックアップ対象になる
./VM_Backup.sh vm_datastore
自動化設定
例えば cron 設定するなら
1 15 * * * /VM_Backup.sh vm_datastore
ESXi は UTC の為、この設定だと日本時間で 00:01 実行になる
crontab コマンドが無い為 、/var/spool/cron/crontabs/root にvi 等で直書き
再起動対策
ESXi を再起動すると cron 設定が初期化されてしまう為
/etc/rc.local.d/local.sh への追記対応が必要
echo "1 15 * * * /VM_Backup.sh vm_datastore" >> /var/spool/cron/crontabs/root
まとめ
1度に大量バックアップしたい場合は、このツールを使えそう。
単発でバックアップを取得したい場合は、vCenter からクローン取得するなりスナップショット取得するなりで良いと思う。
最近のバックアップソリューションもスナップショットを利用してるみたい(vCenter のログ等を確認するとスナップショット取得してる形跡がある)。
バックアップファイルからリストアする手順についてはまたの機会に書こうと思います。