Mat*_*ino 3 backup windows-server-2008-r2
我在 Windows 2008 R2 服务器上使用 Windows Server Backup 已经有一段时间了,以便在驱动器出现故障时为网络驱动器创建夜间裸机备份。夜间备份每晚都会覆盖自身。
不幸的是,坏扇区开始出现在我的系统驱动器上。这允许使用坏扇区创建每晚备份,从而破坏任何恢复的可能性。它还覆盖了以前的备份,从而使整个备份过程毫无价值!
我是否按照预期使用 WSB?如何避免使用无法恢复的故障备份覆盖备份的可能性????
是否可以制作一个批处理脚本来验证备份的完整性,然后在为真时卸载它?这样的脚本会是什么样子?
我写了一个从凌晨 4 点开始的批处理文件,这保证是在我所有的备份完成之后。
它对里面的所有文件夹WindowsImageBackup(或该文件夹的名称)进行RAR ,给它们一个带日期戳的文件名,然后将它们复制到辅助服务器,然后从那里将它们复制到异地。
这样我就有了几个月(几年?)的历史备份,其中至少有一个是好的。
至于不覆盖备份,WSB 允许您这样做的唯一方法是使用本地安装的块存储设备(例如硬盘驱动器、USB 驱动器或 iSCSI 磁盘)。
至于验证映像,我有另一个脚本,它在周日晚上在远程站点运行,该脚本从过去 7 天中获取随机备份映像,取消 RAR 的它,创建一个 VM 并启动它。因为我还没有完全完成脚本部分,每个星期一早上(当我记得的时候)我花 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!
Run Code Online (Sandbox Code Playgroud)
@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"
)
Run Code Online (Sandbox Code Playgroud)
准备异地.bat
SET _BACKUPPATH=C:\QNAPBackups\WindowsImageBackup\
forfiles -p %_BACKUPPATH% -m *.rar -c "cmd /c C:\Batches\CopyOffsite.bat @path"
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |