■仮想マシンのバックアップ
物理サーバで運用している際にはあまり意識しないものなのですが、仮想化した後に仮想OSごとバックアップを実施するというのはどの案件においても結構な頻度で見受けられます。ESXiホストがいきなり急死することや仮想マシンごと吹っ飛ぶということはかなりの確率で起きることはないと思うのですが、実施することにこしたことはないと思われ、有償のソフトなどは使用しないフリーで公開されているghettoVCBスクリプトによるオンラインバックアップを実施します。
仮想化することによりOSはESXi上では1つのファイルとして扱われますので、このファイルをバックアップすれば良いということになります。ただし、仮想OS上で動作しているアプリケーションの整合性までは保証されませんので注意してください。そこまで求める場合は別途有償のソフトウェアを購入したほうが良いと思われます。
また、この手法においてはリストアする際においても基本的には仮想OSごとのリストアになります。
■ghettoVCBスクリプトのセットアップ
まず必要なスクリプトを以下からダウンロードします。画面右下にある「Download ZIP」をクリックしてダウンロードしてください。
https://github.com/lamw/ghettoVCB
「ghettoVCB-master.zip」がダウンロードされます。これをvSphere Client経由でDatastoreにアップロードします。セットアップ作業はCLIにて行いますのでSSHを有効にしておく必要があります。
以降、CLIにて操作を行いますのでESXiにSSHでログインします。以下はローカルのデータストアのdatastore1にスクリプトをアップロードしたという前提です。最初、/直下にファイルを置いてみましたが、ESXiを再起動すると削除されてしまいましたので、データストア配下に設置する必要があります。
# cd /vmfs/volumes/datastore1/backup # unzip ghettoVCB-master.zip Archive: ghettoVCB-master.zip creating: ghettoVCB-master/ inflating: ghettoVCB-master/README 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 |
バックアップに関する詳細を設定するためghettoVCB.shを編集します。
# cd ghettoVCB-master/ # vi ghettoVCB.sh # バックアップ先のデータストアおよびフォルダを指定 VM_BACKUP_VOLUME=/vmfs/volumes/nfs/backup # バックアップファイルのフォーマットを指定 DISK_BACKUP_FORMAT=thin # バックアップの世代数を設定 VM_BACKUP_ROTATION_COUNT=3 |
上記が必要最低限の設定になります。実際に設定できる項目は上記以外にも多数ありますがここでは割愛します。
■バックアップの実行
続いてバックアップ対象とする仮想マシンのリストファイルを作成します。これはスクリプトの実行時に引数としてファイル名を渡しますのでファイル名は任意のもので構いません。以下ではvmlist.txtとして作成しています。
# vi vmlist.txt linux |
ここまできたら手動でバックアップを実行してみます。最初にスナップショットが作成されクローンが開始されます。
# ./ghettoVCB.sh -f ./vmlist.txt Logging output to "/tmp/ghettoVCB-2014-03-12_03-25-03-38093.log" ... 2014-03-12 03:25:04 -- info: \ ============================== ghettoVCB LOG START ============================== 2014-03-12 03:25:04 -- info: CONFIG - VERSION = 2013_26_11_2 2014-03-12 03:25:04 -- info: CONFIG - GHETTOVCB_PID = 38093 2014-03-12 03:25:04 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/nfs/backup 2014-03-12 03:25:04 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 3 2014-03-12 03:25:04 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2014-03-12_03-25-03 2014-03-12 03:25:04 -- info: CONFIG - DISK_BACKUP_FORMAT = thin 2014-03-12 03:25:04 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0 2014-03-12 03:25:04 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0 2014-03-12 03:25:04 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3 2014-03-12 03:25:04 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5 2014-03-12 03:25:04 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15 2014-03-12 03:25:04 -- info: CONFIG - LOG_LEVEL = info 2014-03-12 03:25:04 -- info: CONFIG - BACKUP_LOG_OUTPUT = \ /tmp/ghettoVCB-2014-03-12_03-25-03-38093.log 2014-03-12 03:25:04 -- info: CONFIG - ENABLE_COMPRESSION = 0 2014-03-12 03:25:04 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0 2014-03-12 03:25:04 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0 2014-03-12 03:25:04 -- info: CONFIG - ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP = 0 2014-03-12 03:25:04 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all 2014-03-12 03:25:04 -- info: CONFIG - VM_SHUTDOWN_ORDER = 2014-03-12 03:25:04 -- info: CONFIG - VM_STARTUP_ORDER = 2014-03-12 03:25:04 -- info: CONFIG - RSYNC_LINK = 0 2014-03-12 03:25:04 -- info: CONFIG - EMAIL_LOG = 0 2014-03-12 03:25:04 -- info: 2014-03-12 03:25:09 -- info: Initiate backup for linux 2014-03-12 03:25:09 -- info: Creating Snapshot "ghettoVCB-snapshot-2014-03-12" for linux Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/datastore1/linux/linux_3.vmdk'... Clone: 98% done. Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/datastore1/linux/linux.vmdk'... Clone: 98% done. 2014-03-12 03:31:19 -- info: Removing snapshot from linux ... 2014-03-12 03:31:20 -- info: Backup Duration: 6.18 Minutes 2014-03-12 03:31:20 -- info: Successfully completed backup for linux! 2014-03-12 03:31:23 -- info: ###### Final status: All VMs backed up OK! ###### 2014-03-12 03:31:23 -- info: \ ============================== ghettoVCB LOG END ================================ |
上記のようになると成功です。バックアップ先のデータストアでは以下のように保存されています。
あとはこれをcronで自動実行するよう設定しましょう。cronファイルは/var/spool/cron/crontabs/rootファイルですがこれは再起動するとファイルの中身が初期化されてしまいますので再起動のタイミングで書き換えるよう/etc/rc.local.d/local.shを編集します。
# vi /etc/rc.local.d/local.sh cat<<_EOT_>>/var/spool/cron/crontabs/root 0 18 * * * /vmfs/volumes/datastore1/backup/ghettoVCB-master/ghettoVCB.sh \ -f /vmfs/volumes/datastore1/ghettoVCB-master/vmlist.txt _EOT_ /bin/kill $(cat /var/run/crond.pid) /bin/crond |
ESXiはデフォルトでタイムゾーンがUTCに設定されているので9時間前であることに注意してください。上では18時に設定していますが、これは日本時間でいう18+9=27で午前4時ごろということになります。ここでESXiを再起動して/var/spool/cron/crontabs/rootファイルに反映されているか確認し反映されていれば自動バックアップの完了となります。
# 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 * * * * /sbin/hostd-probe ++group=host/vim/vmvisor/hostd-probe 0 18 * * * /vmfs/volumes/datastore1/ghettoVCB-master/ghettoVCB.sh -f \ /vmfs/volumes/datastore1/ghettoVCB-master/vmlist.txt |
■リストアの実行
リストア用のスクリプトも実行してみます。まず、バックアップを実行した仮想マシンをパワーオフし、ディスクから削除します。( ※データストアブラウザからフォルダを丸ごと削除しておきます )
そしてリストアしたい仮想マシンのテキストファイルを以下のように作成します。
# vi vm_restore.txt #"<DIRECTORY or .TGZ>;<DATASTORE_TO_RESTORE_TO>;<DISK_FORMAT_TO_RESTORE>" # DISK_FORMATS # 1 = zeroedthick # 2 = 2gbsparse # 3 = thin # 4 = eagerzeroedthick "/vmfs/volumes/nfs/linux/linux-2014-03-12_03-36-19;/vmfs/volumes/datastore1;3" |
コロン区切りで左からバックアップファイル名:リストア先データストア名:ファイルフォーマット、という順になります。ファイルフォーマットに関しては1~4で指定します。そして以下のコマンドでリストアを実行します。
# ./ghettoVCB-restore.sh -c ./vm_restore.txt ################## Restoring VM: linux ##################### Start time: Wed Mar 12 04:40:19 UTC 2014 Restoring VM from: "/vmfs/volumes/nfs/backup/linux/linux-2014-03-12_03-36-19" Restoring VM to Datastore: "/vmfs/volumes/datastore1" using Disk Format: "thin" Creating VM directory: "/vmfs/volumes/datastore1/linux" ... Copying "linux.vmx" file ... Restoring VM's VMDK(s) ... Updating VMDK entry in "linux.vmx" file ... Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/nfs/backup/linux/linux-2014-03-12_03-36-19/linux.vmdk'... Clone: 100% done. Updating VMDK entry in "linux.vmx" file ... Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/nfs/backup/linux/linux-2014-03-12_03-36-19/linux_3.vmdk'... Clone: 100% done. Registering linux ... 2 End time: Wed Mar 12 05:30:20 UTC 2014 ################## Completed restore for linux! ##################### Start time: Wed Mar 12 04:40:19 UTC 2014 End time: Wed Mar 12 05:30:20 UTC 2014 Duration : 50.02 Minutes |
上記の実行でインベントリの登録まで自動で行われます。あとはvSphere Clientでパワーオンし無事起動すればOKです。
以上のように仮想OSのvmdkファイルを丸ごとバックアップするため、仮想OSのファイル単位でリストアということは不可ということになりますが、vmware-mountを併用することによりファイル単位のリストアの仕組みも構築は可能と思われます。