VMware ESXi 仮想マシンの自動バックアップツール作成してみた・・・無料で

はじめに

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 のログ等を確認するとスナップショット取得してる形跡がある)。


バックアップファイルからリストアする手順についてはまたの機会に書こうと思います。