VMware ESXi 4.1 オンラインバックアップ +
はじめに +
ESXi上の仮想マシンをオンラインバックアップ/リストアします。
仮想マシンのオンラインバックアップは、スナップショットを利用すれば実現可能ですが、
世代管理などの本格的なバックアップ運用をするのであれば、スクリプトを作り込む必要があります。
スクリプトの作り込みについては、時間的制約や品質的な問題があるため、
今回はVMwareコミュニティで公開されているスクリプトを利用します。
公開スクリプト +
- バックアップスクリプト(ghettoVCB.sh)
http://communities.vmware.com/docs/DOC-8760
- リストアスクリプト(ghettoVCB-restore.sh)
http://communities.vmware.com/docs/DOC-10595
前提 +
- ESXiは下記手順でインストールしています。
ESXi 4.1/インストール - 仮想マシンは下記手順で作成しています。
ESXi 4.1/仮想マシン作成
システム構成 +
- ESXi上の仮想マシンを共有ディスク(NFS)上にバックアップします。
ESXiサーバ +
- ホスト名(IP)
- serv50 (192.168.11.50)
- ディレクトリ構成
- /vmfs/volumes/datastore1:仮想マシン用のデータストア
- /vmfs/volumes/datastore2:バックアップを保存するデータストア
仮想マシン +
- ホスト名(IP)
- serv51 (192.168.11.51)
- バックアップ対象の仮想マシン
- OS
- CentOS 5.5 (kernel 2.6.18-194.3.1.el5 x86_64)
- CentOS 5.5 (kernel 2.6.18-194.3.1.el5 x86_64)
NFSサーバ +
- ホスト名(IP)
- serv100 (192.168.11.100)
- バックアップの保存先
- OS
- CentOS 5.5 (kernel 2.6.18-194.3.1.el5 x86)
- CentOS 5.5 (kernel 2.6.18-194.3.1.el5 x86)
データストアの準備 +
NFSサーバ構築 (192.168.11.100) +
バックアップの保存先となるNFSサーバを構築します。
手順については必要最小限のものを記載しています。
設定ファイルのオプションなどはNFSサーバ構築を参照して下さい。
NFSのインストール +
- nfsのインストール
[root@serv100]# yum install portmap [root@serv100]# yum install nfs-utils [root@serv100]# yum install nfs-utils-lib
NFSの設定 +
- 公開ディレクトリを作成します
[root@serv100]# mkdir /nfs
- 匿名ユーザ(nfsnobody)書き込みを可能にするため、所有者を変更します。
[root@serv100]# chown nfsnobody:nfsnobody /nfs
- 設定ファイル「exports」を編集します。
[root@serv100]# vi /etc/exports /nfs_dir 192.168.11.0/255.255.255.0(rw,root_squash)
- exportfsコマンドで設定を反映させます。
[root@serv100]# exportfs -ra
起動 +
- 関連デーモンを順に起動します。
[root@serv100]# /etc/init.d/portmap start portmap を起動中: [ OK ] [root@serv100]# /etc/init.d/nfslock start NFS statd を起動中: [ OK ] [root@serv100]# /etc/init.d/nfs start NFS サービスを起動中: [ OK ] NFS クォータを起動中: [ OK ] NFS デーモンを起動中: [ OK ] NFS mountd を起動中: [ OK ]
- 自動起動の設定を行います。
[root@serv100]# chkconfig portmap on [root@serv100]# chkconfig nfslock on [root@serv100]# chkconfig nfs on
データストアの追加 (192.168.11.50) +
NFS領域をデータストアとして追加します。
ストレージの追加 +
- 「構成」→「ストレージ」→「ストレージの追加」を選択します。
ストレージタイプの選択 +
- NFSの場合はネットワークファイルシステムを選択します。
ネットワークファイルシステムの場所 +
- 下記の通り設定を行います。
- サーバ:192.168.11.100
- フォルダ:/nfs
- ボリュームラベル:datastore2
確認 +
- 内容に問題がなければ終了ボタンを押します。
- これでストレージが追加され、データストアとして利用可能になりました。
バックアップ (192.168.11.50) +
バックアップ要件 +
今回のバックアップ要件は以下の通りとします
- 仮想マシン serv51のバックアップを実施する
- オンラインバックアップを可能にする
- バックアップは平日の深夜2時に実施する
- 世代管理を可能にする(3世代)
- cronを利用して自動化する
設定 +
ダウンロード解凍 +
- バックアップスクリプト(ghettoVCB.tar.gz)をダウンロードします。
http://communities.vmware.com/docs/DOC-8760
- バックアップスクリプトを解凍します。
# cd /vmfs/volumes/datastore1/ # tar zxvf ghettoVCB.tar.gz # cd ghettoVCB/
設定 +
- バックアップの設定を行います。(変更箇所と主要項目のみ記載)
# vi /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf VM_BACKUP_VOLUME=/vmfs/volumes/datastore2 #NFS VM_BACKUP_ROTATION_COUNT=3 #バックアップは3世代 ADAPTER_FORMAT=lsilogic #仮想マシン作成時に指定したSCSIコントローラタイプ EMAIL_LOG=0 #メール通知は無効 EMAIL_SERVER=192.168.11.100 EMAIL_SERVER_PORT=25 MAIL_TO=root EMAIL_FROM=serv50
※メール通知は利用しませんが、誤配信防止と今後の利用を考えて変更しておきます。
- バックアップ対象の仮想マシン一覧を新規作成します。
仮想マシン名はインベントリで表示される名前を記載します。# vi backup_vmlist.txt serv51
バックアップの動作確認 +
- 仮想マシンを起動させたまま、バックアップを実行します。
# cd /vmfs/volumes/datastore1/ghettoVCB # ./ghettoVCB.sh -f backup_vmlist.txt -g /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf
- ghettoVCB.shのオプションは以下の通り
Usage: ./ghettoVCB.sh -f [VM_BACKUP_UP_LIST] -c [VM_CONFIG_DIR] -l [LOG_FILE] -d [DEBUG_LEVEL] -g [GLOBAL_CONF] -e [VM_EXCLUSION_LIST] OPTIONS: -a Backup all VMs on host -f List of VMs to backup -c VM configuration directory for VM backups -g Path to global ghettoVCB configuration file -l File to output logging -d Debug level [info|debug|dryrun] (default: info)
- ghettoVCB.shのオプションは以下の通り
- バックアップ実行中は下記の通り進行状況が表示されます。
Logging output to "/tmp/ghettoVCB-2011-06-05_05-56-39.log" ... 2011-06-05 05:56:39 -- info: ============================== ghettoVCB LOG START ============================== 2011-06-05 05:56:39 -- info: CONFIG - USING GLOBAL GHETTOVCB CONFIGURATION FILE = /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf 2011-06-05 05:56:39 -- info: CONFIG - VERSION = 2011_05_22_1 2011-06-05 05:56:39 -- info: CONFIG - GHETTOVCB_PID = 19928 2011-06-05 05:56:39 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/datastore2 2011-06-05 05:56:39 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 3 2011-06-05 05:56:39 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2011-06-05_05-56-39 2011-06-05 05:56:39 -- info: CONFIG - DISK_BACKUP_FORMAT = thin 2011-06-05 05:56:39 -- info: CONFIG - ADAPTER_FORMAT = lsilogic 2011-06-05 05:56:39 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0 2011-06-05 05:56:39 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0 2011-06-05 05:56:39 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3 2011-06-05 05:56:39 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5 2011-06-05 05:56:39 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15 2011-06-05 05:56:39 -- info: CONFIG - LOG_LEVEL = info 2011-06-05 05:56:39 -- info: CONFIG - BACKUP_LOG_OUTPUT = /tmp/ghettoVCB-2011-06-05_05-56-39.log 2011-06-05 05:56:39 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0 2011-06-05 05:56:39 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0 2011-06-05 05:56:39 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all 2011-06-05 05:56:39 -- info: CONFIG - EMAIL_LOG = 0 2011-06-05 05:56:39 -- info: 2011-06-05 05:56:44 -- info: Initiate backup for serv51 Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/datastore1/serv51/serv51.vmdk'... Clone: 92% done. 2011-06-05 06:13:00 -- info: Backup Duration: 16.27 Minutes 2011-06-05 06:13:00 -- info: Successfully completed backup for serv51! 2011-06-05 06:13:03 -- info: ###### Final status: All VMs backed up OK! ###### 2011-06-05 06:13:03 -- info: ============================== ghettoVCB LOG END ================================
- バックアップ実行後にファイルが作成されている事を確認します。
# ls /vmfs/volumes/datastore2 serv51
cron設定 +
- cronを利用してバックアップを自動化します。
- ESXiでのcron設定は「/var/spool/cron/crontabs/root」へ直接書き込む事になりますが、
このファイルはESXiを再起動すると削除されてしまいます。
そのため、「rc.local」を利用してESXi起動時にcron設定ファイル「var/spool/cron/crontabs/root」を自動作成します。# vi /etc/rc.local #! /bin/ash export PATH=/sbin:/bin log() { echo "$1" logger init "$1" } #execute all service retgistered in /etc/rc.local.d if [ -d /etc/rc.local.d ]; then for filename in `find /etc/rc.local.d/ | sort` do if [ -f $filename ] && [ -x $filename ]; then log "running $filename" $filename fi done fi #■vmwareのコミュニティサイトを参考に以下を追記します。 /bin/kill $(cat /var/run/crond.pid) /bin/echo "0 17 * * 1-5 /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.sh \ -f /vmfs/volumes/datastore1/ghettoVCB/backup_vmlist.txt \ -g /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf \ > /vmfs/volumes/datastore1/ghettoVCB/backup_log/ghettoVCB-backup-\$(date +%s).log" \ >> /var/spool/cron/crontabs/root /bin/busybox crond【注意】ESXiの時間はUTC(日本の9時間遅れ)なので注意して設定します。
今回は平日の深夜2時にバックアップを実行するように17時(26-9)で登録します。
- バックアップログの保存ディレクトリを作成します。
# mkdir /vmfs/volumes/datastore1/ghettoVCB/backup_log
リストア (192.168.11.50) +
設定 +
ダウンロード解凍 +
- リストアスクリプト(ghettoVCB-restore.tar.gz)をダウンロードします。
http://communities.vmware.com/docs/DOC-10595
- リストアスクリプトを解凍して設定ファイルを作成します。
# cd /vmfs/volumes/datastore1 # tar zxvf ghettoVCB-restore.tar.gz # cd ghettoVCB-restore/ # cp vms_to_restore_sample.txt vms_to_restore.txt
リストア設定 +
- リストアの設定を行います。
# vi vms_to_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/datastore2/serv51/serv51-2011-06-05_05-56-39;/vmfs/volumes/datastore1;3"
リストアの動作確認 +
- 仮想マシンを停止させて仮想マシン名を変更しておきます。
- リストアを実行します。
# cd /vmfs/volumes/datastore1/ghettoVCB-restore # ./ghettoVCB-restore.sh -c vms_to_restore.txt ################## Restoring VM: serv51 ##################### Start time: Sun Jun 5 09:01:07 UTC 2011 Restoring VM from: "/vmfs/volumes/datastore2/serv51/serv51-2011-06-05_05-56-39" Restoring VM to Datastore: "/vmfs/volumes/datastore1" using Disk Format: "thin" Creating VM directory: "/vmfs/volumes/datastore1/serv51-2011-06-05_05-56-39" ... Copying "serv51.vmx" file ... Restoring VM's VMDK(s) ... Updating VMDK entry in "serv51.vmx" file ... Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/datastore2/serv51/serv51-2011-06-05_05-56-39/serv51.vmdk'... Clone: 100% done. Registering serv51 ... 80 End time: Sun Jun 5 09:23:08 UTC 2011 ################## Completed restore for serv51! ##################### Start time: Sun Jun 5 09:01:07 UTC 2011 End time: Sun Jun 5 09:23:08 UTC 2011 Duration : 22.02 Minutes
- 仮想マシンのファイルがリストアされている事を確認します。
# ls -l /vmfs/volumes/datastore1/serv51-* -rw------- 1 root root 8589934592 Jun 5 10:59 serv51-0-flat.vmdk -rw------- 1 root root 544 Jun 5 10:39 serv51-0.vmdk -rw------- 1 root root 536870912 Jun 5 11:17 serv51-5b51d42e.vswp -rw-r--r-- 1 root root 0 Jun 5 11:01 serv51.vmsd -rwxr-xr-x 1 root root 2765 Jun 5 10:39 serv51.vmx -rw-r--r-- 1 root root 261 Jun 5 11:01 serv51.vmxf -rw-r--r-- 1 root root 20216 Jun 5 11:18 vmware.log
- リストア後はインベントリに表示されます。
- リストアした仮想マシンを起動させます。
起動時は下記警告が表示されるので「I moved it」を選択します。msg.uuid.altered:This virtual machine might have been moved or copied. In order to configure certain management and networking features, VMware ESX needs to know if this virtual machine was moved or copied. If you don't know, answer "I copied it".
翻訳↓msg.uuid.altered: この仮想計算機は、動かされるか、またはコピーされたかもしれません。 ある管理とネットワーク機能を構成するために、VMware ESXは、この仮想計算機が動かされたか、 またはコピーされたかを知る必要があります。 わからない場合は「コピーした」と回答してください。
※「I copied it」と回答するとネットワーク系の設定が初期化されてしまうので「I moved it」を選択します。
- 起動して疎通確認で問題がなければリストアは完了です。
FAQ +
NFS領域をデータストアとして追加できない。 +
- Q.
NFS領域をデータストアとして追加すると下記エラーが出る
ESXi「192.168.11.50」で オブジェクト「ha-datastoresystem」の「HostDatastoreSystem.CreateNasDatastore」 の呼び出しが失敗しました。 操作に失敗しました。診断レポート:Unable to complete Sysinfo operation. Please see the VMkernel log file for more details.
- A.
NFSサーバの設定を見直して下さい。
NFSの設定に問題がない場合、NFSサービスを再起動する事で解決しました。
[root@serv100]# /etc/init.d/nfs restart
参考 +
- ghettoVCB.sh - Free alternative for backing up VM's for ESX(i) 3.5 and 4.x+ - Updated
http://communities.vmware.com/docs/DOC-8760
- Ghetto Tech Preview - ghettoVCB-restore.sh - Restoring VM's backed up from ghettoVCB to ESX(i) 3.5 and 4.0+
http://communities.vmware.com/docs/DOC-10595








