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