Di seguito potete trovare uno script batch che utilizzo per fare il backup di alcune macchine virtuali VMware Server su Host Windows. Si tratta di una procedura molto semplice ma comunque funzionale: si occupa sostanzialmente di eseguire lo spegnimento di una macchina virtuale, copiarla e riavviarla; tutti i passaggi vengono memorizzati all'interno di un file di log.
Ammesso che la macchina virtuale possa sopportare un temporaneo downtime, il metodo più sicuro per eseguirne con successo il backup è quello di spegnerla completamente per poi copiarne il disco virtuale (vmdk). Infatti, nel momento in cui le VM sono in esecuzione, VMware memorizza moltissime informazioni all'interno di una memoria virtuale che verrà completamente trasferita sul disco soltanto in fase di spegnimento.
Scaricate il file .zip [1] contenete il batch script di cui sotto e, dopo averne impostato le variabili (la spiegazione si trova alla fine di questo post), utilizzatelo come operazione pianificata
IMPORTANTE: la macchina virtuale della quale effettuerete il backup deve eseguire il software VMware Tools.
@echo off
rem --- Variables ---------------------------------
set VMWAREINSTALLPATH=C:\Programmi\VMware\VMware Server
set VMPATH=D:\VirtualMachines\Windows XP Professional
set VMVMX=Windows XP Professional.vmx
set BACKUPDESTINATION=c:\Virtual Machines
set LOGFILE=c:\Virtual Machines\log.txt
rem ---------------------------------------------------
setlocal
set PATH=%PATH%;%VMWAREINSTALLPATH%
set VAR="%VMWAREINSTALLPATH%\perl.exe" "%VMWAREINSTALLPATH%\vmware-cmd" "%VMPATH%\%VMVMX%" getstate
echo Starting Backup Procedure on %date% at %time%... > "%LOGFILE%"
:checkvmstatus
echo Checking %VMVMX% VM status... >> "%LOGFILE%"
FOR /F "tokens=3 delims= " %%R IN ('"%VAR%"') DO SET RESULT=%%R
echo %VMVMX% VM status is "%RESULT%"... >> "%LOGFILE%"
if "%RESULT%" EQU "on" goto poweroffvm
if "%RESULT%" EQU "off" goto copyandrestartvm
goto quit
:poweroffvm
echo Stopping %VMVMX% VM... >> "%LOGFILE%"
"%VMWAREINSTALLPATH%\perl.exe" "%VMWAREINSTALLPATH%\vmware-cmd" "%VMPATH%\%VMVMX%" stop >> "%LOGFILE%"
rem echo Waiting 60 seconds... >> "%LOGFILE%"
rem sleep -m 60000
goto checkvmstatus
:copyandrestartvm
echo Starting %VMVMX% VM Backup... >> "%LOGFILE%"
xcopy "%VMPATH%"\*.* "%BACKUPDESTINATION%"\*.* /E /C /I /F /H /Y >> "%LOGFILE%"
echo %VMVMX% VM Backup finished... restarting %VMVMX% VM... >> "%LOGFILE%"
"%VMWAREINSTALLPATH%\perl.exe" "%VMWAREINSTALLPATH%\vmware-cmd" "%VMPATH%\%VMVMX%" start >> "%LOGFILE%"
FOR /F "tokens=3 delims= " %%R IN ('"%VAR%"') DO SET RESULT=%%R
echo %VMVMX% VM status is now "%RESULT%"... >> "%LOGFILE%"
goto quit
:quit
echo Quitting Backup Procedure on %date% at %time% ... >> "%LOGFILE%"
exit
Le variabili da impostare, come potete vedere, sono:
- set VMWAREINSTALLPATH=C:\Programmi\VMware\VMware Server - la cartella di installazione di VMware Server
- set VMPATH=D:\VirtualMachines\Windows XP Professional - la cartella in cui si trovano i files della macchina virtuale da copiare
- set VMVMX=Windows XP Professional.vmx - il nome del file di configurazione (vmx) della macchina virtuale
- set BACKUPDESTINATION=c:\Virtual Machines - la cartella in cui verranno copiati i dati ovvero la destinazione del backup, può essere anche un percorso di rete UNC
- set LOGFILE=c:\Virtual Machines\log.txt - il file di log in cui verrà memorizzato lo stato della procedura di backup, può essere anche un percorso di rete UNC
Autore
Mirko Iodice
mirko -at- notageek (.dot) it