Eu escrevi um arquivo em lote que começa às 4h, o que é garantido que depois de todos os meus backups terem terminado.
Ele RARs todas as pastas dentro de WindowsImageBackup
(ou o que a pasta é chamada), dá-lhes um nome de arquivo com data e copia-os para um servidor secundário, e de lá eles são replicados para fora do site.
Dessa forma, eu tenho meses (anos?) de backups históricos, pelo menos um deles será bom.
Como não sobrescrevendo backups, a única maneira que o WSB permite que você faça isso é usar um dispositivo de armazenamento em bloco montado localmente (como um disco rígido, uma unidade USB ou um disco iSCSI).
Quanto à validação da imagem, eu tenho outro script que roda na noite de domingo no site remoto que pega uma imagem de backup aleatório dos últimos 7 dias, desativa o RAR, cria uma VM e a inicializa. Como ainda não terminei a parte do script, toda segunda-feira de manhã (quando me lembro) passo 5 minutos apenas iniciando o procedimento de restauração e depois verifico mais tarde para ver se foi bem-sucedido.
Em suma, parece um pouco gueto, mas esse cliente em particular tinha um orçamento muito limitado (leia-se: nenhum), então eu estava restrito a usar ferramentas gratuitas. E até agora funcionou muito bem.
Para ativar o WBS no nível do GPO, e agendar um backup completo todas as noites
@echo off
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f %%I IN (
'wmic volume get driveletter'
) DO (
ECHO %%I | FIND ":"
IF ERRORLEVEL 1 (
echo Failed: %%I
) ELSE (
ECHO %%I | FIND "D:"
IF ERRORLEVEL 1 (
IF NOT [!_TEMPVAR!]==[] SET _TEMPVAR=!_TEMPVAR!,
SET _TEMPVAR=!_TEMPVAR!%%I
) ELSE (
echo Skipping CD-ROM
)
)
)
wbadmin enable backup -addtarget:\enetsbackup1\Backups -schedule:23:00 -systemState -allCritical -vssFull -user:[email protected] -password:[password] -quiet -include:!_TEMPVAR!
Para arquivos RAR em arquivos com data e selo (executados no servidor que hospeda todos os compartilhamentos de arquivos de backup)
@ECHO OFF
SET _WINRAR=C:\Program Files\WinRAR\Rar.exe
SET _BACKUPPATH=C:\QNAPBackups\WindowsImageBackup\
REM RAR All backups into date-named files
forfiles -p %_BACKUPPATH% -m *.rar -d -3 -c "cmd /c del @path"
FOR /D %%I IN (%_BACKUPPATH%*) DO (
"%_WINRAR%" a -ag-YYYYMMDD -ep1 -hp[password] -m2 -df "%%I.rar" "%%I"
)
Mova os arquivos para o diretório de sincronização externo e limpe o diretório de sincronização
prepareoffsite.bat
SET _BACKUPPATH=C:\QNAPBackups\WindowsImageBackup\
forfiles -p %_BACKUPPATH% -m *.rar -c "cmd /c C:\Batches\CopyOffsite.bat @path"
copyoffsite.bat
Um pouco de explicação: O lote pega o nome do backup e passa por uma lista de arquivos txt, e em cada arquivo txt tem uma lista de todos os nomes das máquinas. Dependendo do arquivo em que o nome da máquina está, ele vai para uma pasta diferente (já que alguns são sincronizados todas as noites, outros semanalmente, dependendo da sua importância).
@ECHO OFF
SET _OFFSITEDIR=C:\QNAPBackups\Offsite\
FOR /f "tokens=1 delims=- " %%a in ("%1") DO (
FOR /f "tokens=4 delims=\ " %%b in ("%%a") DO (
FIND /C /I "%%b" C:\Batches\OFFSITE-DB.txt | find ": 1" 1>nul && GOTO Offsite_Database
FIND /C /I "%%b" C:\Batches\OFFSITE-TS.txt | find ": 1" 1>nul && GOTO Offsite_Terminal
FIND /C /I "%%b" C:\Batches\OFFSITE-EX.txt | find ": 1" 1>nul && GOTO Offsite_Exchange
FIND /C /I "%%b" C:\Batches\OFFSITE-A1.txt | find ": 1" 1>nul && GOTO Offsite_AllInOne
FIND /C /I "%%b" C:\Batches\OFFSITE-MS.txt | find ": 1" 1>nul && GOTO Offsite_Miscella
GOTO :NotFound
)
)
:Offsite_Database
MOVE /Y %1 %_OFFSITEDIR%Databases\
GOTO EOF
:Offsite_Terminal
MOVE /Y %1 %_OFFSITEDIR%TerminalServers\
GOTO EOF
:Offsite_Exchange
MOVE /Y %1 %_OFFSITEDIR%Exchange\
GOTO EOF
:Offsite_AllInOne
MOVE /Y %1 %_OFFSITEDIR%AllInOne\
GOTO EOF
:Offsite_Miscella
MOVE /Y %1 %_OFFSITEDIR%Misc\
GOTO EOF
:NotFound
ECHO %1 >> C:\Batches\OFFSITE-NotFound.txt
GOTO EOF
:EOF
forfiles -p %_OFFSITEDIR%Databases\ -m *.rar -d -3 -c "cmd /c del @path"
forfiles -p %_OFFSITEDIR%TerminalServers\ -m *.rar -d -3 -c "cmd /c del @path"
forfiles -p %_OFFSITEDIR%Exchange\ -m *.rar -d -3 -c "cmd /c del @path"
forfiles -p %_OFFSITEDIR%AllInOne\ -m *.rar -d -3 -c "cmd /c del @path"
forfiles -p %_OFFSITEDIR%Misc\ -m *.rar -d -3 -c "cmd /c del @path"