The backup consist in a simple copy of the VMs file into a backup folder.
But this script, in case of a RUNNING machine, will also change the state of the vm to SAVESTATE before proceding with the backup, and will bring it back to RUNNING after the copy is completed.
Requirements:
- gnugrep must be installed (download it from here . PS: remember to dowload also the "Dependencies" package form here, which contains the required DLLs if you don't already have it);
- change the 3 variabiles (highlithed in red) according to your needs (without trailing backslash):
- VBDIR --> the location of the virtualbox manager installation
- VMDIR --> the base forder of your virtualmachines files
- BAKDIR --> the folder where you want to copy the VMs to
- create as many SUBSCRIPT as you need, one per each VM you want to backup;
- in each SUBSCRIPT, update the MYVM (yellow) variable with the name of the virtual machine (the one you see in the virtual box manager);
Script:
@echo off set VMDIR="c:\virtual_machines" set VBDIR="C:\Program Files\Oracle\VirtualBox" set BAKDIR="D:\Backup\VM" date /t > %BAKDIR%\bak.log time /t >> %BAKDIR%\bak.log @echo using virtualbox bin folder: %VBDIR% @echo using virtualbox machines folder: %VMDIR% @echo using backup folder: %BAKDIR% cd /d %VBDIR% >> %BAKDIR%\bak.log REM xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx REM SUBSCRIPT: create one per each VM to backup REM xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx set MYVM=machine1 REM xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx set MYSTATUS=0 for /f "delims=" %%A in ('VBoxManage list runningvms^|grep -c %MYVM%') do set "MYSTATUS=%%A" @echo BACKUP for: %VMDIR%\%MYVM% - Current status: %MYSTATUS% if "%MYSTATUS%"=="1" VBoxManage controlvm %MYVM% savestate >> %BAKDIR%\bak.log xcopy /D/S/Y %VMDIR%\%MYVM%\*.* %BAKDIR%\%MYVM%\ >> %BAKDIR%\bak.log if "%MYSTATUS%"=="1" VBoxManage startvm %MYVM% >> %BAKDIR%\bak.log @echo BACKUP OK >> %BAKDIR%\bak.log REM xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
REM SUBSCRIPT: create one per each VM to backup
REM xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
set MYVM=machine2
REM xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
set MYSTATUS=0
for /f "delims=" %%A in ('VBoxManage list runningvms^|grep -c %MYVM%') do set "MYSTATUS=%%A"
@echo BACKUP for: %VMDIR%\%MYVM% - Current status: %MYSTATUS%
if "%MYSTATUS%"=="1" VBoxManage controlvm %MYVM% savestate >> %BAKDIR%\bak.log
xcopy /D/S/Y %VMDIR%\%MYVM%\*.* %BAKDIR%\%MYVM%\ >> %BAKDIR%\bak.log
if "%MYSTATUS%"=="1" VBoxManage startvm %MYVM% >> %BAKDIR%\bak.log
@echo BACKUP OK >> %BAKDIR%\bak.log
No comments:
Post a Comment