Виртуальные машины VMware не возобновляют работу из командной строки - PullRequest
3 голосов
/ 23 февраля 2011

Я использую VMWare Workstation в Ubuntu 10.10. У меня есть серия виртуальных машин, которые я клонирую каждую неделю.

Я написал скрипт bash, который циклически перебирает каждую виртуальную машину, мягко приостанавливает ее, клонирует и затем пытается возобновить ее.

Проблема в том, что виртуальные машины не возобновляют работу, поэтому я должен возобновить их вручную. Я пытаюсь выяснить, как я могу изменить сценарий, который я написал, чтобы обеспечить возобновление работы виртуальных машин. Я включил сценарий и образец сгенерированного файла журнала с сообщением об ошибке.

#!/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

Пример сгенерированного файла журнала для каждой виртуальной машины показан ниже.

----------------------------------------------------
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
----------------------------------------------------

Ошибка: невозможно запустить пользовательский интерфейс, так как в текущей среде нет сервера дисплея

Ответы [ 4 ]

11 голосов
/ 30 декабря 2011

Вы можете использовать параметр nogui для команды запуска, например:

vmrun start yourmachine.vmx nogui

См .: http://www.vmware.com/pdf/vix180_vmrun_command.pdf

0 голосов
/ 22 декабря 2014

если проблема в том, что вы запускаете vmrun из сеанса ssh, тогда другое решение может быть запустить сеанс экрана на сервере.

на компьютере, на котором работает рабочая станция:

screen -S vmware

на клиентском компьютере,

ssh vmware-machine
screen -x vmware
vmrun start /path/to/vm.vmx
0 голосов
/ 20 сентября 2013

попробуйте выполнить команду echo $ DISPLAY на терминале TTY, где работает рабочая станция vmware. Эхо $ DISPLAY вернется как: 1000.0 вам нужно установить экспорт DISPLAY = ": 1000.0" в вашем скрипте. тогда скрипт возобновит работу виртуальной машины .. я обнаружил, что это работает, когда я использую резервную копию ареки для возобновления работы моей виртуальной машины с использованием postscript, запущенного в ареке.

0 голосов
/ 07 октября 2011

Так как не было найдено надежного ответа, я просто смирюсь с тем, что в этих конкретных обстоятельствах нет решения.

  • Ubuntu 10.10 x64
  • VMware Workstation 7

Решение: Закройте VMware Workstation и выберите для виртуальных машин «Запуск в фоновом режиме». После этого работает без нареканий.

...