<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://deltanine.net/mw/index.php?action=history&amp;feed=atom&amp;title=VMware_Backup_Script</id>
	<title>VMware Backup Script - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://deltanine.net/mw/index.php?action=history&amp;feed=atom&amp;title=VMware_Backup_Script"/>
	<link rel="alternate" type="text/html" href="https://deltanine.net/mw/index.php?title=VMware_Backup_Script&amp;action=history"/>
	<updated>2026-04-27T18:02:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.32.1</generator>
	<entry>
		<id>https://deltanine.net/mw/index.php?title=VMware_Backup_Script&amp;diff=973&amp;oldid=prev</id>
		<title>Chris: 1 revision</title>
		<link rel="alternate" type="text/html" href="https://deltanine.net/mw/index.php?title=VMware_Backup_Script&amp;diff=973&amp;oldid=prev"/>
		<updated>2013-07-25T08:45:26Z</updated>

		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 08:45, 25 July 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Chris</name></author>
		
	</entry>
	<entry>
		<id>https://deltanine.net/mw/index.php?title=VMware_Backup_Script&amp;diff=972&amp;oldid=prev</id>
		<title>121.98.154.206: /* Current Script */</title>
		<link rel="alternate" type="text/html" href="https://deltanine.net/mw/index.php?title=VMware_Backup_Script&amp;diff=972&amp;oldid=prev"/>
		<updated>2009-04-28T00:37:53Z</updated>

		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Current Script&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Current Script==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /bin/bash&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## Change the information below&lt;br /&gt;
##&lt;br /&gt;
USER=n2o&lt;br /&gt;
PASS=xxxxxx&lt;br /&gt;
BACKUPDEST=/home/n2o/backups/vm-backup&lt;br /&gt;
DAYS_TO_KEEP_TAR=5&lt;br /&gt;
 &lt;br /&gt;
## include any VMs in this array that you do NOT want backed up.  Use&lt;br /&gt;
## the directory name.&lt;br /&gt;
EXEMPTION_ARRAY=( None )&lt;br /&gt;
 &lt;br /&gt;
## Do not modify anything below this line&lt;br /&gt;
HOST=$(hostname)&lt;br /&gt;
DATE=$(date)&lt;br /&gt;
VMCMD=vmware-vim-cmd&lt;br /&gt;
VM_WAS_RUNNING=false&lt;br /&gt;
VM_EXEMPT=false&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
## Create the backup directories if they do not exist&lt;br /&gt;
##&lt;br /&gt;
function doCheckDirectories&lt;br /&gt;
{&lt;br /&gt;
	## if the archives directory does not  exist, create it&lt;br /&gt;
	if [ ! -d $BACKUPDEST/archives ]; then&lt;br /&gt;
 &lt;br /&gt;
		echo &amp;quot;$BACKUPDEST/archives does not exist, creating.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
		mkdir $BACKUPDEST/archives&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
	## if the directories directory does not exist, create it&lt;br /&gt;
	if [ ! -d $BACKUPDEST/directories ]; then&lt;br /&gt;
 &lt;br /&gt;
		echo &amp;quot;$BACKUPDEST/directories does not exist, creating.&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		mkdir $BACKUPDEST/directories&lt;br /&gt;
 &lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## If this VM is in our exempt array, set VM_EXEMPT to skip entirely.&lt;br /&gt;
##&lt;br /&gt;
function doCheckExempt&lt;br /&gt;
{&lt;br /&gt;
	# iterate throught the array, if we get a match, set&lt;br /&gt;
	# VM_EXEMPT to true&lt;br /&gt;
	for check_vm in ${EXEMPTION_ARRAY[@]}; do&lt;br /&gt;
 &lt;br /&gt;
		if [ &amp;quot;$check_vm&amp;quot; = &amp;quot;$NAME&amp;quot; ]; then&lt;br /&gt;
 &lt;br /&gt;
			echo &amp;quot;$NAME is on the exception list, skipping.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
			VM_EXEMPT=true&lt;br /&gt;
		fi&lt;br /&gt;
	done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
## Get current state and location of current VM.&lt;br /&gt;
##&lt;br /&gt;
function setVM&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	STATE=`$VMCMD -U $USER -P $PASS vmsvc/power.getstate $VMID |sed 1d`&lt;br /&gt;
        DATASTORE=`$VMCMD -U $USER -P $PASS vmsvc/get.datastores $VMID |tr -s ' '|sed '2!d;s/^[[:alnum:]]* //;s/ //g'`&lt;br /&gt;
	VMDIR=${LOC%/*}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
## suspend a VM if its running, skip it if not&lt;br /&gt;
##&lt;br /&gt;
function suspendVM&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
	echo $NAME state is currently: $STATE&lt;br /&gt;
 &lt;br /&gt;
	# if its running, suspend it, otherwise, move on.&lt;br /&gt;
	if [ &amp;quot;$STATE&amp;quot; = &amp;quot;Powered on&amp;quot; ]; then&lt;br /&gt;
 &lt;br /&gt;
		echo &amp;quot;Suspending $NAME . . .&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		$VMCMD -U $USER -P $PASS vmsvc/power.suspend $VMID&lt;br /&gt;
&lt;br /&gt;
		if [ $? == 0 ]; then&lt;br /&gt;
		&lt;br /&gt;
			# track if it was running, so I can restart or not&lt;br /&gt;
			VM_WAS_RUNNING=true&lt;br /&gt;
&lt;br /&gt;
			echo &amp;quot;$NAME Suspended - $(date)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
			return&lt;br /&gt;
&lt;br /&gt;
		else&lt;br /&gt;
			echo &amp;quot;$NAME DID NOT SUSPEND!! Exiting Program.&amp;quot;&lt;br /&gt;
			exit 0&lt;br /&gt;
		fi&lt;br /&gt;
	else&lt;br /&gt;
		echo &amp;quot;$NAME was not suspended, not suspending - $(date)&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## backup the VM&lt;br /&gt;
##&lt;br /&gt;
function doBackup&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
	# synchronise (update) all data to the directories tree&lt;br /&gt;
	echo &amp;quot;Backing up (rsync) $NAME to $BACKUPDEST/directories/$VMDIR&amp;quot;&lt;br /&gt;
	rsync -ax --numeric-ids --delete $DATASTORE/$VMDIR/ $BACKUPDEST/directories/$VMDIR/&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## Resume the VM if we it was running in the first place&lt;br /&gt;
##&lt;br /&gt;
function resumeVM&lt;br /&gt;
{&lt;br /&gt;
	if [ &amp;quot;$VM_WAS_RUNNING&amp;quot; = &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
 &lt;br /&gt;
		# reset for next VM&lt;br /&gt;
		VM_WAS_RUNNING=false&lt;br /&gt;
 &lt;br /&gt;
		echo &amp;quot;Powering on $NAME . . .&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		$VMCMD -U $USER -P $PASS vmsvc/power.on $VMID&lt;br /&gt;
		&lt;br /&gt;
                if [ $? == 0 ]; then&lt;br /&gt;
 &lt;br /&gt;
			echo &amp;quot;$NAME restarted - $(date)&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			echo &amp;quot;$NAME FAILED TO RESUME!! Exiting Program.&amp;quot;&lt;br /&gt;
			exit 0&lt;br /&gt;
		fi&lt;br /&gt;
 &lt;br /&gt;
	else&lt;br /&gt;
		echo &amp;quot;$NAME was not running, not resuming - $(date)&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## tgz up the directory for a more compressed and mobile backup.&lt;br /&gt;
##&lt;br /&gt;
function doTar&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
	fileName=backup_$NAME-`/bin/date +%G%m%d`.tgz	&lt;br /&gt;
 	echo &amp;quot;taring up $NAME to $BACKUPDEST/archives/$fileName&amp;quot;&lt;br /&gt;
	tar -cPpszf $BACKUPDEST/archives/$fileName $BACKUPDEST/directories/$VMDIR&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## Clean up any tars that are older than DAYS_TO_KEEP_TAR&lt;br /&gt;
##&lt;br /&gt;
function doCleanTar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;Cleaning up tars older than $DAYS_TO_KEEP_TAR&amp;quot;&lt;br /&gt;
	find $BACKUPDEST/archives -name &amp;quot;backup_$NAME*.tgz&amp;quot; -mtime $DAYS_TO_KEEP_TAR -exec rm -vf {} \;&lt;br /&gt;
	#find $BACKUPDEST/archives -mtime +1 -exec rm -vf {} \;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## Main Loop, iterate through the VMs and handle them apprpriately&lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-----------------------------------------------------&amp;quot;&lt;br /&gt;
echo &amp;quot;START&amp;quot;&lt;br /&gt;
echo &amp;quot;Host: $HOST&amp;quot;&lt;br /&gt;
echo &amp;quot;Date: $DATE&amp;quot;&lt;br /&gt;
echo &amp;quot;-----------------------------------------------------&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# make sure we have the appropriate directories for backups&lt;br /&gt;
doCheckDirectories&lt;br /&gt;
&lt;br /&gt;
while read VMID NAME TYPE LOC OS VMVER; do&lt;br /&gt;
	echo &amp;quot;ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	setVM&lt;br /&gt;
	echo &amp;quot;Current VM is $DATASTORE/$LOC&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	# check to see if current vm should be exempted&lt;br /&gt;
	doCheckExempt&lt;br /&gt;
&lt;br /&gt;
	# only back up if it is not on the exempt list&lt;br /&gt;
	if [ &amp;quot;$VM_EXEMPT&amp;quot; = &amp;quot;false&amp;quot; ]; then&lt;br /&gt;
&lt;br /&gt;
		# suspend my VM if its running&lt;br /&gt;
		suspendVM&lt;br /&gt;
		sleep 30&lt;br /&gt;
&lt;br /&gt;
		# actually do the directory backup&lt;br /&gt;
		doBackup&lt;br /&gt;
		sleep 5&lt;br /&gt;
&lt;br /&gt;
		# resume the VM if it was running to begin with&lt;br /&gt;
		resumeVM&lt;br /&gt;
		sleep 5&lt;br /&gt;
&lt;br /&gt;
		# tar it up&lt;br /&gt;
		doTar&lt;br /&gt;
		sleep 5&lt;br /&gt;
&lt;br /&gt;
		# and finally, clean up my old tars&lt;br /&gt;
		doCleanTar&lt;br /&gt;
		sleep 5&lt;br /&gt;
&lt;br /&gt;
	fi&lt;br /&gt;
&lt;br /&gt;
		# reset for next vm&lt;br /&gt;
		VM_EXEMPT=false&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;lt;($VMCMD -U $USER -P $PASS vmsvc/getallvms |sed 1d)&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-----------------------------------------------------&amp;quot;&lt;br /&gt;
echo &amp;quot;FINISH&amp;quot;&lt;br /&gt;
echo &amp;quot;Host: $HOST&amp;quot;&lt;br /&gt;
echo &amp;quot;Date: $(date)&amp;quot;&lt;br /&gt;
echo &amp;quot;-----------------------------------------------------&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Previous Script==&lt;br /&gt;
This older script had problems:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /bin/bash&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## Change the information below&lt;br /&gt;
##&lt;br /&gt;
USER=n2o&lt;br /&gt;
PASS=xxxx&lt;br /&gt;
BACKUPDEST=/home/n2o/backups/vm-backup&lt;br /&gt;
DAYS_TO_KEEP_TAR=3&lt;br /&gt;
 &lt;br /&gt;
## include any VMs in this array that you do NOT want backed up.  Use&lt;br /&gt;
## the directory name.&lt;br /&gt;
EXEMPTION_ARRAY=( None )&lt;br /&gt;
 &lt;br /&gt;
## Do not modify anything below this line&lt;br /&gt;
HOST=$(hostname)&lt;br /&gt;
DATE=$(date)&lt;br /&gt;
VMCMD=vmware-vim-cmd&lt;br /&gt;
VM_WAS_RUNNING=false&lt;br /&gt;
VM_EXEMPT=false&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
## Create the backup directories if they do not exist&lt;br /&gt;
##&lt;br /&gt;
function doCheckDirectories&lt;br /&gt;
{&lt;br /&gt;
	## if the archives directory does not  exist, create it&lt;br /&gt;
	if [ ! -d $BACKUPDEST/archives ]; then&lt;br /&gt;
 &lt;br /&gt;
		echo &amp;quot;$BACKUPDEST/archives does not exist, creating.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
		mkdir $BACKUPDEST/archives&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
	## if the directories directory does not exist, create it&lt;br /&gt;
	if [ ! -d $BACKUPDEST/directories ]; then&lt;br /&gt;
 &lt;br /&gt;
		echo &amp;quot;$BACKUPDEST/directories does not exist, creating.&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		mkdir $BACKUPDEST/directories&lt;br /&gt;
 &lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## If this VM is in our exempt array, set VM_EXEMPT to skip entirely.&lt;br /&gt;
##&lt;br /&gt;
function doCheckExempt&lt;br /&gt;
{&lt;br /&gt;
	# iterate throught the array, if we get a match, set&lt;br /&gt;
	# VM_EXEMPT to true&lt;br /&gt;
	for check_vm in ${EXEMPTION_ARRAY[@]}; do&lt;br /&gt;
 &lt;br /&gt;
		if [ &amp;quot;$check_vm&amp;quot; = &amp;quot;$NAME&amp;quot; ]; then&lt;br /&gt;
 &lt;br /&gt;
			echo &amp;quot;$NAME is on the exception list, skipping.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
			VM_EXEMPT=true&lt;br /&gt;
		fi&lt;br /&gt;
	done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
## Get current state and location of current VM.&lt;br /&gt;
##&lt;br /&gt;
function setVM&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	STATE=`$VMCMD -U $USER -P $PASS vmsvc/power.getstate $VMID |sed 1d`&lt;br /&gt;
        DATASTORE=`$VMCMD -U $USER -P $PASS vmsvc/get.datastores $VMID |tr -s ' '|sed '2!d;s/^[[:alnum:]]* //;s/ //g'`&lt;br /&gt;
	VMDIR=${LOC%/*}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
##&lt;br /&gt;
## suspend a VM if its running, skip it if not&lt;br /&gt;
##&lt;br /&gt;
function suspendVM&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
	echo $NAME state is currently: $STATE&lt;br /&gt;
 &lt;br /&gt;
	# if its running, suspend it, otherwise, move on.&lt;br /&gt;
	if [ &amp;quot;$STATE&amp;quot; = &amp;quot;Powered on&amp;quot; ]; then&lt;br /&gt;
 &lt;br /&gt;
		echo &amp;quot;Suspending $NAME . . .&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		$VMCMD -U $USER -P $PASS vmsvc/power.suspend $VMID&lt;br /&gt;
&lt;br /&gt;
		if [ $? == 0 ]; then&lt;br /&gt;
		&lt;br /&gt;
			# track if it was running, so I can restart or not&lt;br /&gt;
			VM_WAS_RUNNING=true&lt;br /&gt;
&lt;br /&gt;
			echo &amp;quot;$NAME Suspended - $(date)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
			return&lt;br /&gt;
&lt;br /&gt;
		else&lt;br /&gt;
			echo &amp;quot;$NAME DID NOT SUSPEND!! Exiting Program.&amp;quot;&lt;br /&gt;
			exit 0&lt;br /&gt;
		fi&lt;br /&gt;
	else&lt;br /&gt;
		echo &amp;quot;$NAME was not suspended, not suspending - $(date)&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## backup the VM&lt;br /&gt;
##&lt;br /&gt;
function doBackup&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
	# synchronise (update) all data to the directories tree&lt;br /&gt;
	echo &amp;quot;Backing up (rsync) $NAME to $BACKUPDEST/directories/$VMDIR&amp;quot;&lt;br /&gt;
	rsync -ax --numeric-ids --delete $DATASTORE/$VMDIR/ $BACKUPDEST/directories/$VMDIR/&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## Resume the VM if we it was running in the first place&lt;br /&gt;
##&lt;br /&gt;
function resumeVM&lt;br /&gt;
{&lt;br /&gt;
	if [ &amp;quot;$VM_WAS_RUNNING&amp;quot; = &amp;quot;true&amp;quot; ]; then&lt;br /&gt;
 &lt;br /&gt;
		# reset for next VM&lt;br /&gt;
		VM_WAS_RUNNING=false&lt;br /&gt;
 &lt;br /&gt;
		echo &amp;quot;Powering on $NAME . . .&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		$VMCMD -U $USER -P $PASS vmsvc/power.on $VMID&lt;br /&gt;
		&lt;br /&gt;
                if [ $? == 0 ]; then&lt;br /&gt;
 &lt;br /&gt;
			echo &amp;quot;$NAME restarted - $(date)&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			echo &amp;quot;$NAME FAILED TO RESUME!! Exiting Program.&amp;quot;&lt;br /&gt;
			exit 0&lt;br /&gt;
		fi&lt;br /&gt;
 &lt;br /&gt;
	else&lt;br /&gt;
		echo &amp;quot;$NAME was not running, not resuming - $(date)&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## tgz up the directory for a more compressed and mobile backup.&lt;br /&gt;
##&lt;br /&gt;
function doTar&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
	fileName=backup_$NAME-`/bin/date +%G%m%d`.tgz	&lt;br /&gt;
 	echo &amp;quot;taring up $NAME to $BACKUPDEST/archives/$fileName&amp;quot;&lt;br /&gt;
	tar -cPpszf $BACKUPDEST/archives/$fileName $BACKUPDEST/directories/$VMDIR&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## Clean up any tars that are older than DAYS_TO_KEEP_TAR&lt;br /&gt;
##&lt;br /&gt;
function doCleanTar&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;Cleaning up tars older than $DAYS_TO_KEEP_TAR&amp;quot;&lt;br /&gt;
	find $BACKUPDEST/archives -name &amp;quot;backup_$NAME*.tgz&amp;quot; -mtime $DAYS_TO_KEEP_TAR -exec rm -vf {} \;&lt;br /&gt;
	#find $BACKUPDEST/archives -mtime +1 -exec rm -vf {} \;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
##&lt;br /&gt;
## Main Loop, iterate through the VMs and handle them apprpriately&lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-----------------------------------------------------&amp;quot;&lt;br /&gt;
echo &amp;quot;START&amp;quot;&lt;br /&gt;
echo &amp;quot;Host: $HOST&amp;quot;&lt;br /&gt;
echo &amp;quot;Date: $DATE&amp;quot;&lt;br /&gt;
echo &amp;quot;-----------------------------------------------------&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
# make sure we have the appropriate directories for backups&lt;br /&gt;
doCheckDirectories&lt;br /&gt;
&lt;br /&gt;
while read VMID NAME TYPE LOC OS VMVER; do&lt;br /&gt;
	echo &amp;quot;ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	setVM&lt;br /&gt;
	echo &amp;quot;Current VM is $DATASTORE/$LOC&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	# check to see if current vm should be exempted&lt;br /&gt;
	doCheckExempt&lt;br /&gt;
&lt;br /&gt;
	# only back up if it is not on the exempt list&lt;br /&gt;
	if [ &amp;quot;$VM_EXEMPT&amp;quot; = &amp;quot;false&amp;quot; ]; then&lt;br /&gt;
&lt;br /&gt;
		# suspend my VM if its running&lt;br /&gt;
		suspendVM&lt;br /&gt;
		sleep 30&lt;br /&gt;
&lt;br /&gt;
		# actually do the directory backup&lt;br /&gt;
		doBackup&lt;br /&gt;
		sleep 5&lt;br /&gt;
&lt;br /&gt;
		# resume the VM if it was running to begin with&lt;br /&gt;
		resumeVM&lt;br /&gt;
		sleep 5&lt;br /&gt;
&lt;br /&gt;
		# tar it up&lt;br /&gt;
		doTar&lt;br /&gt;
		sleep 5&lt;br /&gt;
&lt;br /&gt;
		# and finally, clean up my old tars&lt;br /&gt;
		doCleanTar&lt;br /&gt;
		sleep 5&lt;br /&gt;
&lt;br /&gt;
	fi&lt;br /&gt;
&lt;br /&gt;
		# reset for next vm&lt;br /&gt;
		VM_EXEMPT=false&lt;br /&gt;
&lt;br /&gt;
done &amp;lt; &amp;lt;($VMCMD -U $USER -P $PASS vmsvc/getallvms |sed 1d)&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;-----------------------------------------------------&amp;quot;&lt;br /&gt;
echo &amp;quot;FINISH&amp;quot;&lt;br /&gt;
echo &amp;quot;Host: $HOST&amp;quot;&lt;br /&gt;
echo &amp;quot;Date: $(date)&amp;quot;&lt;br /&gt;
echo &amp;quot;-----------------------------------------------------&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>121.98.154.206</name></author>
		
	</entry>
</feed>