UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - VMware オンラインバックアップ



■仮想マシンのバックアップ


物理サーバで運用している際にはあまり意識しないものなのですが、仮想化した後に仮想OSごとバックアップを実施するというのはどの案件においても結構な頻度で見受けられます。ESXiホストがいきなり急死することや仮想マシンごと吹っ飛ぶということはかなりの確率で起きることはないと思うのですが、実施することにこしたことはないと思われ、有償のソフトなどは使用しないフリーで公開されているghettoVCBスクリプトによるオンラインバックアップを実施します。

仮想化することによりOSはESXi上では1つのファイルとして扱われますので、このファイルをバックアップすれば良いということになります。ただし、仮想OS上で動作しているアプリケーションの整合性までは保証されませんので注意してください。そこまで求める場合は別途有償のソフトウェアを購入したほうが良いと思われます。

また、この手法においてはリストアする際においても基本的には仮想OSごとのリストアになります。


■ghettoVCBスクリプトのセットアップ

まず必要なスクリプトを以下からダウンロードします。画面右下にある「Download ZIP」をクリックしてダウンロードしてください。

https://github.com/lamw/ghettoVCB

「ghettoVCB-master.zip」がダウンロードされます。これをvSphere Client経由でDatastoreにアップロードします。セットアップ作業はCLIにて行いますのでSSHを有効にしておく必要がありますので以下のページを参考にしてSSHを有効にしておいてください。

http://www.unix-power.net/vmware/esxi_setup_55.html


以降、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を併用することによりファイル単位のリストアの仕組みも構築は可能と思われます。vmware-mountについては以下を参照してください。

http://www.unix-power.net/vmware/vmware_mount.html



 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.