我在Ubuntu10.10上运行VMWare工作站。我每周都会克隆一系列虚拟机。
我已经编写了一个bash脚本,它遍历每个虚拟机,轻轻地挂起它,克隆它,然后尝试恢复它。
问题是,虚拟机没有恢复,所以我必须手动恢复它们。我正在尝试弄清楚如何修改我编写的脚本,以确保VM继续运行。我已经包含了显示错误消息的脚本和生成的日志文件示例。
#!/bin/bash
##Author: William Cooper
##Date: 2/15/2011
## Purpose: Perform full backups of Virtual Machines
## Running under VMWare Workstation
## Script won't run if the /nas directory doesn't exist
## The /nas directory is a mounted Buffalo Terastation
## Check /etc/fstab if this mountpoint is broken
BACKUPDEST="/nas"
## No need to modify
HOST=`hostname`
DATEFILE=`/bin/date +%G%m%d`
## Run Command to find list of VM names:
## this will only be the name of the vm, no path and no .vmx
VMLIST=`vmrun list | grep '/' | cut -d'/' -f3 | cut -d'.' -f1`
## Initialize Counter variable used to cycle through VMs in VMARRAY variable
COUNTER=1
## Run Command to find list of VM Names and then store them in an Array:
## This will include full pathnames
VMARRAY=( `vmrun list | grep '/'` )
#################################################################
## Functions
##
## Notify the starting time of backup in the log
##
function startScript {
echo
echo "----------------------------------------------------"
echo "START - ${VM}"
echo "Host: ${HOST}"
echo "Date: `date`"
echo
}
##
## Suspend VM
##
function suspendVM {
## Suspend the VM
echo "Attempting to softly suspend "${VM}" . . ."
vmrun suspend ${VMARRAY[${COUNTER}]} soft
echo "${VM} Suspended on `date`"
echo
}
##
## Backup VM
##
function doBackup {
## Check to see if the correct backup directory exists.
if [ ! -d ${BACKUPDEST}/${VM} ]; then
echo "${BACKUPDEST}/${VM} does not exist, creating . . ."
mkdir "${BACKUPDEST}/${VM}"
echo
fi
## Backup VM (clone)
echo "Backup of "${VM}" began: `date`"
echo "Backup to ${BACKUPDEST}/${VM}/BACKUP/${DATEFILE} . . ."
mkdir ${BACKUPDEST}/${VM}/BACKUP/${DATEFILE}
vmrun clone ${VMARRAY[${COUNTER}]} ${BACKUPDEST}/${VM}/BACKUP/${DATEFILE}/${VM}.vmx full
echo "Backup of "${VM}" ended: `date`"
echo
}
##
## Start VM
##
function doStart {
## Resume VMs which were running [--type gui|sdl|vrdp|headless]
echo "Attempting to resume "${VM}" . . ."
vmrun start ${VMARRAY[${COUNTER}]}
echo "${VM} Resumed on `date`"
echo
}
##
## Notify the finishing time of backup in the log
##
function finishScript {
echo "FINISH - ${VM}"
echo "Host: ${HOST}"
echo "Date: `date`"
echo "----------------------------------------------------"
echo
}
#################################################################
## Script
for VM in ${VMLIST}
do
sleep 1
## StartScrip executes for logging
startScript
## Suspend VM performs soft suspend
suspendVM
sleep 3
## Do Backup performs the VM clone
doBackup
sleep 3
## Start VM performs start vm
doStart
sleep 3
## FinishScript executes for logging
finishScript
## Increment the Counter
COUNTER=${COUNTER}+1
done | tee "${BACKUPDEST}/logs/VMClone_${DATEFILE}.log"
## Script
#################################################################
exit下面显示了为每个VM生成的日志文件的示例。
----------------------------------------------------
START - vmname
Host: servername
Date: Sat Feb 19 12:30:29 CST 2011
Attempting to softly suspend vmname . . .
vmname Suspended on Sat Feb 19 12:30:44 CST 2011
Backup of vmname began: Sat Feb 19 12:30:47 CST 2011
Backup to /nas/vmname/BACKUP/20110219 . . .
Backup of vmname ended: Sat Feb 19 12:43:16 CST 2011
Attempting to resume vmname . . .
Error: Cannot launch the UI because no display server is present in the current environment
vmname Resumed on Sat Feb 19 12:43:20 CST 2011
FINISH - vmname
Host: servername
Date: Sat Feb 19 12:43:23 CST 2011
----------------------------------------------------错误:无法启动UI,因为当前环境中不存在显示服务器
发布于 2011-10-08 03:33:34
由于没有找到可靠的答案,我只能接受在这些特定情况下没有解决方案。
解决方案:关闭VMware工作站,然后选择让虚拟机“在后台运行”来完美地工作。
发布于 2011-12-30 05:25:23
您可以在start命令中使用nogui参数,例如:
vmrun start yourmachine.vmx nogui请参阅:http://www.vmware.com/pdf/vix180_vmrun_command.pdf
发布于 2013-09-20 15:53:58
尝试在运行vmware工作站的终端TTY上执行echo $DISPLAY。echo $DISPLAY将返回如下内容:1000.0您需要在脚本中设置导出DISPLAY=":1000.0“。然后,脚本将恢复虚拟机的..我发现当我使用areca备份在areca中运行postscript来恢复我的虚拟机时,这是有效的。
https://stackoverflow.com/questions/5094537
复制相似问题