VMware ESXi 5.0 オンラインバックアップ/リストア
Table of Contents |
はじめに
ESXi上の仮想マシンをオンラインバックアップ/リストアします。
仮想マシンのオンラインバックアップは、スナップショットを利用すれば実現可能ですが、
世代管理などの本格的なバックアップ運用をするのであれば、スクリプトを作り込む必要があります。
スクリプトの作り込みについては、時間的制約や品質的な問題があるため、
今回はVMwareコミュニティで公開されているスクリプトを利用します。
公開スクリプト
- バックアップスクリプト(ghettoVCB.sh)
http://communities.vmware.com/docs/DOC-8760
- リストアスクリプト(ghettoVCB-restore.sh)
http://communities.vmware.com/docs/DOC-10595
参考
- ESXiのインストールは下記を参考にしてください。
ESXi5.0のインストール/初期設定
システム構成
- ESXi上の仮想マシンをiSCSI共有ディスク上にバックアップします。
ESXiサーバ
- ホスト名(IP)
- serv250 (192.168.11.250)
- ディレクトリ構成
- /vmfs/volumes/datastore1:仮想マシン用のデータストア
- /vmfs/volumes/datastore2:バックアップを保存するデータストア
仮想マシン
- ホスト名(IP)
- serv101 (192.168.11.101)
- バックアップ対象の仮想マシン
- OS
- CentOS 6.2 (kernel 2.6.32-220.4.1.el6)
- CentOS 6.2 (kernel 2.6.32-220.4.1.el6)
iSCSIターゲット
- ホスト名(IP)
- serv100 (192.168.11.100)
- バックアップの保存先
- OS
- CentOS 6.2 (kernel 2.6.32-220.4.1.el6)
scsi-target-utils 1.0.14-4.el6
- CentOS 6.2 (kernel 2.6.32-220.4.1.el6)
scsi-target-utils 1.0.14-4.el6
iscsiターゲットの準備 (192.168.11.100側)
iscsiターゲットのインストール
インストール
# yum install scsi-target-utils
起動
# /etc/init.d/tgtd start
自動起動
# chkconfig tgtd on
iscsiターゲットの設定
HDDの構成について
- serv100のHDD構成は以下の通りです。
# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sdb
- /dev/sda* はOS領域として利用しています
- /dev/sdb は追加したHDDで未フォーマットです。このHDDをiSCSIに利用します。
iscsiターゲットの作成
- iscsiターゲットを作成します。iscsiターゲット名はユニークな名称である必要があり、
以下のようなルールが推奨されています。
iqn.<yyyy-mm>.<tld.domain.some.host>[:<identifier>]
- 今回はルールに従ってターゲット名を設定します。
# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname \ iqn.2012-02.net.oss-d.serv100:sdb
公開パーティションのターゲット登録
- ターゲットの作成後、公開パーティション(/dev/sdb)をロジカルユニットとしてターゲットに登録します。
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 \ --backing-store /dev/sdb
イニシエータの登録
- イニシエータの登録を行います。初期状態では、イニシエータが登録されていないためターゲットにアクセスできません。
尚、イニシエータの登録は、IPアドレスまたはユーザー名の指定が可能ですが、今回はIPアドレスを利用します。
# tgtadm --lld iscsi --op bind --mode target --tid 1 \ --initiator-address 192.168.11.250
設定確認
- tgtadmコマンドで設定を確認します。
「LUN:0」はコントローラで、「LUN:1」が今回追加したロジカルユニットです。# tgtadm --lld iscsi --op show --mode target Target 1: iqn.2012-02.net.oss-d.serv100:sdb System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Readonly: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 12885 MB, Block size: 512 Online: Yes Removable media: No Readonly: No Backing store type: rdwr Backing store path: /dev/sdb Backing store flags: Account information: ACL information: 192.168.11.250
ファイアウォールの設定
- tgtdデーモンは「tcp:3260」をLISTENします。
必要に応じてiptablesを変更してください。
データストアの追加 (192.168.11.250)
ESXi上にiSCSI領域をデータストアとして追加します。
iSCSIのデータストア追加
バックアップ (192.168.11.250)
バックアップ要件
- 今回のバックアップ要件は以下の通りとします
- 仮想マシン serv101(192.168.11.101)のバックアップを実施する
- オンラインバックアップを可能にする
- バックアップは平日の深夜2時に実施する
- 世代管理を可能にする(3世代)
- cronを利用して自動化する
設定
ダウンロード解凍
- バックアップ/リストアスクリプト(lamw-ghettoVCB-518cef7.tar.gz)をダウンロードします。
https://github.com/lamw/ghettoVCB/downloads
- バックアップスクリプトを解凍します。
# cd /vmfs/volumes/datastore1/ # tar zxvf lamw-ghettoVCB-518cef7.tar.gz # mv lamw-ghettoVCB-518cef7 ghettoVCB # cd ghettoVCB
バックアップ設定
- バックアップの設定を行います。(変更箇所と主要項目のみ記載)
# cd # vi /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf
※メール通知は利用しませんが、誤配信防止と今後の利用を考えて変更しておきます。VM_BACKUP_VOLUME=/vmfs/volumes/datastore2 #バックアップ保存先(iSCSIターゲット) DISK_BACKUP_FORMAT=thin VM_BACKUP_ROTATION_COUNT=3 #バックアップは3世代 EMAIL_LOG=0 #メール通知は無効 EMAIL_SERVER=192.168.11.100 EMAIL_SERVER_PORT=25 MAIL_TO=root EMAIL_FROM=serv50
- バックアップ対象の仮想マシン一覧を新規作成します。
仮想マシン名はインベントリで表示される名前を記載します。# vi backup_vmlist.txt serv101
バックアップの動作確認
- 仮想マシンを起動させたまま、バックアップを実行します。
# cd /vmfs/volumes/datastore1/ghettoVCB # ./ghettoVCB.sh -f ./backup_vmlist.txt -g ./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)
- バックアップ実行中は下記の通り進行状況が表示されます。
Logging output to "/tmp/ghettoVCB-2012-02-12_14-51-20.log" ... Insufficient arguments. 2012-02-12 14:51:21 -- info: ====================== ghettoVCB LOG START ====================== 2012-02-12 14:51:21 -- info: CONFIG - USING GLOBAL GHETTOVCB CONFIGURATION FILE = /vmfs/volumes/datastore1/ghettoVCB/ghettoVCB.conf 2012-02-12 14:51:21 -- info: CONFIG - VERSION = 2011_11_19_1 2012-02-12 14:51:21 -- info: CONFIG - GHETTOVCB_PID = 441430 2012-02-12 14:51:21 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/datastore2 2012-02-12 14:51:21 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 3 2012-02-12 14:51:21 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2012-02-12_14-51-20 2012-02-12 14:51:21 -- info: CONFIG - DISK_BACKUP_FORMAT = thin 2012-02-12 14:51:21 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0 2012-02-12 14:51:21 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0 2012-02-12 14:51:21 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3 2012-02-12 14:51:21 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5 2012-02-12 14:51:21 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15 2012-02-12 14:51:21 -- info: CONFIG - LOG_LEVEL = info 2012-02-12 14:51:21 -- info: CONFIG - BACKUP_LOG_OUTPUT = /tmp/ghettoVCB-2012-02-12_14-51-20.log 2012-02-12 14:51:21 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0 2012-02-12 14:51:21 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0 2012-02-12 14:51:21 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all 2012-02-12 14:51:21 -- info: CONFIG - EMAIL_LOG = 0 2012-02-12 14:51:21 -- info: 2012-02-12 14:51:23 -- info: Initiate backup for serv101 2012-02-12 14:51:23 -- info: Creating Snapshot "ghettoVCB-snapshot-2012-02-12" for serv101 Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/SSD1/serv101/serv101.vmdk'... Clone: 72% done. 2012-02-12 14:53:05 -- info: Removing snapshot from serv101 ... 2012-02-12 14:53:05 -- info: Backup Duration: 1.70 Minutes 2012-02-12 14:53:05 -- info: Successfully completed backup for serv101! 2012-02-12 14:53:07 -- info: ###### Final status: All VMs backed up OK! ###### 2012-02-12 14:53:07 -- info: ====================== ghettoVCB LOG END ========================
- バックアップ実行後にファイルが作成されている事を確認します。
# ls /vmfs/volumes/datastore2/serv101 serv101-2012-02-12_14-51-20
cron設定
- cronを利用してバックアップを自動化します。
- ESXiでのcron設定は「/var/spool/cron/crontabs/root」へ直接書き込む事になりますが、
このファイルはESXiを再起動すると削除されてしまいます。
そのため、「rc.local」を利用してESXi起動時にcron設定ファイル「var/spool/cron/crontabs/root」を自動作成します。# vi /etc/rc.local
【注意】ESXiの時間はUTC(日本の9時間遅れ)なので注意して設定します。#! /bin/sh 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
今回は平日の深夜26時にバックアップを実行するように17時(26-9=17)で登録します。
- バックアップログの保存ディレクトリを作成します。
# mkdir /vmfs/volumes/datastore1/ghettoVCB/backup_log
リストア (192.168.11.250)
リストア設定
ダウンロード解凍
- リストアスクリプトを解凍して設定ファイルを作成します。
# cd /vmfs/volumes/datastore1/ghettoVCB # cp ghettoVCB-restore_vm_restore_configuration_template vms_to_restore.txt
リストア設定
- リストア設定を1行追加します。
# 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/serv101/serv101-2012-02-12_14-51-20; /vmfs/volumes/datastore1; 3"
- 追加するパラメータは下記をセミコロン区切りで追加します。
パラメータ 説明 バックアップディレクトリ 先ほど作成したバックアップ リストア先 リストア先のデータストアを指定します ディスクフォーマット 1-4で指定します。2以外は仮想マシン作成時に指定可能なものです。 - ディスクフォーマットについて
- 1,4は必要なディスク容量を全て確保します。(確保タイミングが、起動前、起動時という違い)
- 3はディスク容量を全て確保せず、利用する分だけ確保します。
- 2は不明です。
リストアの動作確認
- 仮想マシンserv101を停止させて仮想マシン名を「serv101」→「serv101_org」へ変更しておきます。
- リストアを実行します。
# cd /vmfs/volumes/datastore1/ghettoVCB # ./ghettoVCB-restore.sh -c vms_to_restore.txt ################## Restoring VM: serv101 ##################### Start time: Sun Feb 12 15:14:48 UTC 2012 Restoring VM from: "/vmfs/volumes/datastore2/serv101/serv101-2012-02-12_14-51-20" Restoring VM to Datastore: "/vmfs/volumes/datastore1" using Disk Format: "thin" Creating VM directory: "/vmfs/volumes/datastore1/serv101-2012-02-12_14-51-20" ... Copying "serv101.vmx" file ... Restoring VM's VMDK(s) ... Updating VMDK entry in "serv101.vmx" file ... Destination disk format: VMFS thin-provisioned Cloning disk '/vmfs/volumes/datastore2/serv101/serv101-2012-02-12_14-51-20/serv101.vmdk'... Clone: 100% done. Registering serv101 ... 4 End time: Sun Feb 12 15:18:16 UTC 2012 ################## Completed restore for serv101! ##################### Start time: Sun Feb 12 15:14:48 UTC 2012 End time: Sun Feb 12 15:18:16 UTC 2012 Duration : 3.47 Minutes
- 仮想マシンのファイルがリストアされている事を確認します。
# ls -l /vmfs/volumes/datastore1/serv101-* -rw------- 1 root root 7516192768 Feb 12 15:14 serv101-0-flat.vmdk -rw------- 1 root root 518 Feb 12 15:18 serv101-0.vmdk -rw-r--r-- 1 root root 0 Feb 12 15:18 serv101.vmsd -rwxr-xr-x 1 root root 3138 Feb 12 15:14 serv101.vmx -rw-r--r-- 1 root root 262 Feb 12 15:18 serv101.vmxf
- リストア後は「serv101」がインベントリに表示されます。
- リストアした仮想マシンを起動させます。
起動時は下記警告が表示されるので「I moved it」を選択します。
※「I copied it」と回答するとネットワーク系の設定が初期化されてしまうので「I moved it」を選択します。
- 起動して疎通確認で問題がなければリストアは完了です。
参考
- ghettoVCB.sh - Free alternative for backing up VM's for ESX(i) 3.5, 4.x+ & 5.x
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, 4.x+ & 5.x
http://communities.vmware.com/docs/DOC-10595