Я уже довольно давно использую Windows Server Backup на сервере Windows 2008 R2 для создания ночных резервных копий на сетевом диске в случае сбоя диска. Ночная резервная копия перезаписывается каждую ночь.
К сожалению, на моем системном диске начали появляться сбойные сектора. Это позволяло создавать ночные резервные копии с поврежденными секторами, что исключает возможность восстановления. Он также перезаписал предыдущую резервную копию, что сделало весь процесс резервного копирования бесполезным!
Использую ли я WSB по назначению? Как мне избежать возможности перезаписи резервных копий неисправными, которые невозможно восстановить ?????
Можно ли создать пакетный сценарий, который проверяет целостность резервной копии и затем выгружает ее, если это правда? Как бы выглядел такой сценарий?
Я написал командный файл, который запускается в 4 часа утра, что гарантированно будет после завершения всех моих резервных копий.
Он выполняет RAR все папки внутри WindowsImageBackup
(или как там эта папка называется), дает им имя файла с отметкой даты и копирует их на вторичный сервер, а оттуда они реплицируются за пределы сайта.
Таким образом, у меня есть исторические резервные копии за месяцы (годы?), По крайней мере одна из которых будет хорошей.
Что касается отказа от перезаписи резервных копий, единственный способ, которым WSB позволяет это сделать, - это использовать локально смонтированное блочное запоминающее устройство (например, жесткий диск, USB-накопитель или iSCSI-диск).
Что касается проверки образа, у меня есть еще один сценарий, который запускается в воскресенье вечером на удаленном сайте, который захватывает случайный образ резервной копии за последние 7 дней, без RAR, создает виртуальную машину и загружает ее. Поскольку я еще не закончил писать сценарии, каждый понедельник утром (насколько я помню) я трачу 5 минут на запуск процедуры восстановления, а затем проверяю ее позже, чтобы убедиться, что она удалась.
В целом это звучит немного гетто, но у этого конкретного клиента был очень ограниченный бюджет (читай: нет), поэтому я был ограничен использованием бесплатных инструментов. И пока это действительно хорошо работает.
@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:backupservice@enets.local -password:[password] -quiet -include:!_TEMPVAR!
@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"
)
prepareoffsite.bat
SET _BACKUPPATH=C:\QNAPBackups\WindowsImageBackup\
forfiles -p %_BACKUPPATH% -m *.rar -c "cmd /c C:\Batches\CopyOffsite.bat @path"
copyoffsite.bat
Небольшое объяснение: пакет берет имя резервной копии и просматривает список файлов txt, и в каждом файле txt есть список всех имен машин. В зависимости от того, в каком файле находится имя компьютера, он попадает в другую папку (так как некоторые синхронизируются каждую ночь, другие - еженедельно, в зависимости от того, насколько они важны).
@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"