본문 바로가기

Virtualization

VMware Service Console에서 BACKUP

Service Console에서도 Virtual Machine Online Backup이 가능할까?
앞서 vcb관련 내용을 포스트 했는데,,
여기서 설명하는 내용은 vmdk 파일 자체를 백업 받는 방법입니다.

ESX 2.5.x 인 경우

1. vmAddRedo.pl     # Snapshot 생성
2. vmkfstools -i source.vmdk /vmfs/backup/target.vmdk
3. vmCommit.pl       # Snapshot 제거

# vmware-cmd -l
/root/vmware/win2k3/win2k3.vmx
/root/vmware/win2k/win2k.vmx

# vmAddRedo.pl -c /root/vmware/win2k3/win2k3.vmx
vmAddRedo: VM config file is '/root/vmware/win2k3/win2k3.vmx'

vmAddRedo: Disks found that are in use:
vmAddRedo: Disk found: scsi0:0 (localvmfs:win2k3.vmdk)
vmAddRedo:    1: scsi0:0
vmAddRedo: Creating the RedoLogs for cfg : /root/vmware/win2k3/win2k3.vmx
vmAddRedo:    scsi0:0:Adding REDO
vmAddRedo: diskname :/vmfs/localvmfs/win2k3.vmdk

# grep vmdk /root/vmware/win2k3/win2k3.vmx
scsi0:0.name = "localvmfs:win2k3.vmdk"

# vmkfstools -i /vmfs/localvmfs/win2k3.vmdk /vmfs/backup/win2k3.vmdk

# vmCommit.pl -c /root/vmware/win2k3/win2k3.vmx

vmCommit: VM config file is '/root/vmware/win2k3/win2k3.vmx'

vmCommit: Disks found that are in use:
vmCommit: Disk found: scsi0:0 (localvmfs:win2k3.vmdk)
vmCommit:    1: scsi0:0
vmCommit: Backing up the cfg : /root/vmware/win2k3/win2k3.vmx

vmCommit: scsi0:0: Adding stacked REDO.REDO
vmCommitRedo: diskname :/vmfs/localvmfs/win2k3.vmdk
vmCommit: scsi0:0: Committing REDO
Please wait, committing disks...
vmCommit: scsi0:0: Committing REDO.REDO


VI3 인 경우

1. vmware-cmd ${vm} createsnapshot ${vmname}-snapshot
2. vmkfstools -i source.vmdk /vmfs/volumes/backup/target.vmdk
3. vmware-cmd ${vm} removesnapshots

아래 스크립트는 참고만 하시고,, 그대로 사용하시면 안됩니다.

#!/bin/sh
logfile="/tmp/backuplog"

echolog() {
    vmname=$1
    msg=$2
    now=$(date "+%b %d %T")
    echo "${now} ${vmname} # ${msg}"
    echo "${now} ${vmname} # ${msg}" >> ${logfile}
}

/usr/bin/vmware-cmd -l | while read vm
## cat /tmp/vms | while read vm
do
    vmname=$(/usr/bin/vmware-cmd ${vm} getconfig displayname | awk '{print $3}')
    echolog ${vmname} "vmname = ${vmname}"

    echolog ${vmname} "create snapshot"
    if [ $(/usr/bin/vmware-cmd ${vm} createsnapshot ${vmname}-snapshot | awk '{print $3}') == 1 ]
    then
        echolog ${vmname} "snapshot is successfully created"
    else
        echolog ${vmname} "snapshot creation has an error !!!!"
    fi

    echolog ${vmname} "verify snapshot creation"
    if [ $(/usr/bin/vmware-cmd ${vm} hassnapshot | awk '{print $3}') == 1 ]
    then
        echolog ${vmname} "snapshot is successfully detected"
   
        case ${vmname} in
          test1 )
          files="/vmfs/volumes/lovmfs/test1/test1.vmdk"
          ;;
          test2 )
          files="/vmfs/volumes/lovmfs/test2/test2.vmdk"
         ;;
        esac
  
        echolog ${vmname} "backup image"
        for eachfile in ${files}
        do
            fromfile=${eachfile}
            tofile=$(dirname ${eachfile})/BK/$(basename ${eachfile})
            if [ -d $(dirname ${tofile}) ]
            then
                echolog ${vmname} "backup directory already exist"
            else
                echolog ${vmname} "backup directory does not exist, make it"
                mkdir -p $(dirname ${tofile})
            fi
            vmkfstools -i ${fromfile} ${tofile}
            diff ${fromfile} ${tofile}
            if [ $? == 0 ]
            then
                echolog ${vmname} "${fromfile} is successfully copied to ${tofile}"
            else
                echolog ${vmname} "${fromfile} copy has an error !!!!"
            fi
        done
   
        echolog ${vmname} "delete snapshot"
        if [ $(/usr/bin/vmware-cmd ${vm} removesnapshots | awk '{print $3}') == 1 ]
        then
            echolog ${vmname} "snapshot is successfully removed"
        else
            echolog ${vmname} "snapshot removing has an error !!!!"
        fi
    else
        echolog ${vmname} "snapshot does not exist !!!!"
    fi
    echo -n $(date "+%b %d %T") ${vmname} "# "
    /usr/bin/vmware-cmd ${vm} hassnapshot
    ;;
done