Nuovo backup

Da anni ho l'abitudine di lanciare un backup notturno sul disco esterno (una volta lo scambiavo con il lettore DVD ora è un drive USB). Ieri ho applicato due importanti modifiche.

Anzitutto ho scoperto che Vista ha una versione aggiornata di ROBOCOPY, di cui segnalo l'opzione /MIR che copia rimuovendo i file in più trovati nella destinazione.

La seconda scoperta, grazie ad Adi è che le funzionalità di Shadow Copy non sono una faccenda esoterica per server con uno storage attaccato ma posso usarla anche sul mio piccolo notebook per i backup. Per farla breve c'è il programmino VSHADOW, contenuto ora nell'SDK di Vista (la versione ISO son 1,15GB), che permette di controllare le shadow copy; in pratica creo delle istantanee di un disco di cui voglio fare il backup, assegno un drive (S:) alla fotografia e posso farne il backup senza problemi di lock... database SQL, OST/PST di Outlook, anche il registry!

Ecco l'estratto del mio script UserBackup.cmd, come vedete mi piace avere un log di quanto succede.

 
@echo off

echo Vuoi davvero cominciare il backup?
pause

pushd
setlocal


set SYS_DRIVE=C:
set DATA_DRIVE=D:

set DEST_DRIVE=F:\BACKUP

REM use Vista version
set ROBOCOPY=ROBOCOPY
set VSHADOW=d:\bin\vshadow.exe

set LOG_DIR=BackupLogs
set LOG_PATH=%SYS_DRIVE%\%LOG_DIR%

REM Backup counter
if exist %LOG_PATH%\lastnum.cmd  call %LOG_PATH%\lastnum.cmd
set /a N+=1
echo set N=%N% > %LOG_PATH%\lastnum.cmd

set COPY_OPT=/MIR /ZB /R:1 /W:1 /XJ /EFSRAW
set LOG_OPT=/NP /TEE /LOG+:%LOG_PATH%\robocopy%N%.log


title BACKUP RUN #%N% TO %DEST_DRIVE% 

cls
%SYS_DRIVE%
cd \

echo Checking environment
if not exist %LOG_PATH% md %LOG_PATH%

REM    echo Defragmenting destination (%DEST_DRIVE%)
REM    defrag %DEST_DRIVE% -f -v >> %LOG_PATH%\d-defrag%N%.log

REM >>> DATA VOL

%VSHADOW% -p -script=%TEMP%\SetVShadowVars.cmd %DATA_DRIVE% >> %LOG_PATH%\shadow%N%.log
call %TEMP%\SetVShadowVars.cmd
%VSHADOW% -el=%SHADOW_ID_1%,S: >> %LOG_PATH%\shadow%N%.log

set F=Archive
echo *** Backup %F% ********************************
%ROBOCOPY% "S:\%F%" "%DEST_DRIVE%\%F%" %COPY_OPT% %LOG_OPT%

REM eccetera eccetera

%VSHADOW% -dx=%SHADOW_SET_ID% >> %LOG_PATH%\shadow%N%.log
del %TEMP%\SetVShadowVars.cmd

REM >>> SYSTEM VOL

%VSHADOW% -p -script=%TEMP%\SetVShadowVars.cmd %SYS_DRIVE% >> %LOG_PATH%\shadow%N%.log
call %TEMP%\SetVShadowVars.cmd
%VSHADOW% -el=%SHADOW_ID_1%,S: >> %LOG_PATH%\shadow%N%.log

set F=%USERPROFILE%
echo *** Backup %F% ********************************
%ROBOCOPY% "S:\%F%" "%DEST_DRIVE%\%F%" /XD "Temp" /XD "Temporary Internet Files" %COPY_OPT% %LOG_OPT%

%VSHADOW% -dx=%SHADOW_SET_ID% >> %LOG_PATH%\shadow%N%.log
del %TEMP%\SetVShadowVars.cmd

REM   echo Defragmenting source (%SYS_DRIVE%)
REM  defrag %SYS_DRIVE% -w -f -v >> %LOG_PATH%\defrag%N%.log
REM    echo Defragmenting source (%DATA_DRIVE%)
REM defrag %DATA_DRIVE% -f -v >> %LOG_PATH%\defrag%N%.log

xcopy %LOG_PATH%\*.log %DEST_DRIVE%\%LOG_DIR%\ /M /C /R /K /Y

echo Backup complete.

echo Script complete.

pause
goto bye

:usage
echo Usage: %0

:bye
endlocal
popd

Attenzione che funziona esclusivamente con Vista, per usarlo su XP o 2003 son necessari degli adattamenti.

Ovviamente non ci sono garanzie o responsabilità se volete usarlo ;-)