数据防护:Windows Server 2008 R2备份基本原理
        对于Windows专业技术人员来说,数据防护总是一件至关重要的任务。许多IT技术人员对待这项任务都会采用这种方式:建立一个备份任务来将数据备份到磁带或磁盘上。大型的IT企业部门平常都有专门的预算来使用功能齐全的第三方的备份解决方案。剩下的像我们就依靠微软提供的免费的备份工具。
         在过去,微软提供的免费备份工具是目前业界推崇的NTBackup。然而,这个工具目前已经过时了。Windows Server 2008提供了一套新的备份工具,下面就让我来展示一下在新的Windows Server 2008 R2中使用它们的简易性。即使已经拥有第三方的备份工具,你也可以从中发现一些对自己有用的东西来帮助你做又快又的备份。需要注意的是新的备份工具不能管理由NTBackup创建的备份文件。
 
安装要点
        首先,由于默认不安装,我们需要安装备份功能。我们可以使用服务器管理器中的添加功能向导添加Windows服务器备份功能(请见图1)。为了保证能通过使用Windows PowerShell工具来演示更多本文后面的细节内容,我们选择使用命令行工具子功能。你也可以使用ServerManagerCMD.exe命令行工具来安装备份功能。
图1  使用添加功能向导来安装Windows服务器备份功能和命令行工具
        下一步要做的是确认你的备份存储位置。你可以将文件备份到网络共享、本地卷或者指定磁盘。你不可以将数据备份到磁带上,但是可以将数据增量备份到目前已广泛使用的廉价的USB存储器上。这并不代表是退步。然而,这些却是一些我们必须要考虑的因素。
        Windows备份在备份索引、目录及其他支持文件的情况下会导致大量的系统开销。因为,这不像在创建一个压缩文件,不要认为100KB的文件只占用100KB备份空间,它们明显需要更多的备份空间。
        当备份到网络共享时,我们需要特别小心文件访问控制级别来保护备份文件的完整性和安全性。同时,当你备份文件到相同的网络共享时,过去的备份将被覆盖。最简单的解决方案是为每个备份创建子文件夹。这同样适用于将本地卷作为备份目标。
        使用网络共享或本地卷备份有一个优点是Windows备份会创建一个包含所有备份文件的.vhd文件。当你指定备份位置时,Windows备份将创建一个最高级别的文件夹叫做WindowsImageBackup。在这个文件夹里是针对每台电脑的一个备份文件夹。备份文件按照日期来区分版本,你能找到这样的备份文件夹,例如名为"Backup 2009-12-14 172606"。在这个文件夹里是备份文件和.vhd文件。你可以在Windows7和Windows Server 2008 R2加载安装这样的.vhd文件。依据不同的备份和存档需求,我们可以方便的将这些文件移动到长期的磁盘存储或刻录到DVD上。
         最方便和最快的选择是使用指定的直连磁盘。它可以是内部直连的,也可以是通过USB或者火线外连的。微软推荐这种备份磁盘拥有需要备份的数据容量2.5倍容量的空闲空间。这种磁盘将被格式化并在普通的管理工具中显示为被隐藏,然而我们在磁盘管理里还是能看到它的。我们可以使用的最大的磁盘容量为2TB。
 
创建一个备份任务
        Windows备份为保护服务器提供一站式的设置。我们可以启用一个计划任务来备份文件和系统状态,或提供立即灾难还原。微软设想你会为了这一目的创建一个计划任务。而我设想你们使用Windows备份功能是因为有限的预算和经济实惠限制下得到最大限度地保护。
        在安装完Windows备份功能后,展开服务器管理器中的“存储”结点,选择“Windows服务器备份”。在“执行”选项板里,选择“备份任务”,这样可以开启备份任务计划向导。然后,在“开始”界面下选择“下一步”。
        在第二步,指定我们需要的备份类型。我们可以尝试做一次完整的服务器备份。你也可以创建一个自定义的备份,然后选择文件及系统状态之类选项。稍后,我将给你们演示如何做快速文件备份,但是现在我假设你需要做完整服务器保护。
         在第三步,指定你想要在何时运行备份计划任务。大多数情况下,一次备份已经足够了,但是你也可以一天不止一次运行该任务。如果你正在备份关键文件,这可能是一个好的选择。
         在第四步,决定在哪里存储备份文件。微软建议使用指定硬盘。需要记住的是,该硬盘驱动器将被格式化且不能被其他业务使用。你也可以使用本地卷或者网络共享。对警告和限制要绝对关注和小心。在磁盘被格式化时你将见到一个警告提醒。
         如果你看不到所有的磁盘,你可以点击“显示所有磁盘”按钮来刷新。当你选择一个新的磁盘时,你会收到警告。一旦选中,你将有一次确认你的备份设置的机会。如果有任一设置出错,我们可以使用“上一步”按钮来返回并修正错误。如果一切都没问题,你将看到一个概要界面。次日,你可以检查Windows服务器备份结点的备份结果或错误。
         你也可以使用Windows备份来运行单次备份。在“执行”选项板里,选择“仅备份一次”选项。你可以使用与计划任务相同的设置或者选择一些完全不同的内容。如果选择后者,向导将重新运行,你可以输入新的参数。例如,你可能需要将文件复制到网络共享上。
         需要记住的是,任何在相同文件夹下的已存在的备份将被覆盖。单次备份任务将立刻执行。如果这是你想经常执行的一个独立备份任务,你可以从命令行或者Windows PowerShell的脚本解决方案中获得启发。我稍后将展示这一部分。
 
恢复数据
        Windows备份使用时间戳作为版本信息。使用恢复任务将引导一个可以简单操作的向导。选择合适的备份源文件。恢复向导将显示一个所有存在的备份文件的时间控制界面(请见图2)。选择合适的一个。根据备份类型的不同,你可以只有一个选择。
图2  从恢复向导选择存在的备份文件
        继续往下,选择你想要恢复的数据类型。如果你选择文件和文件夹,你可以高亮选中你需要恢复的文件。但不幸的是,要从不同的目录中选择文件是不可以的。你可以简便的恢复每个文件或从一个目录中恢复选定的文件。当你设置备份工作时,你要牢记这一点。
         当你恢复文件时,你需要指定目标文件夹,而此目标文件夹可以是原文件夹或新的位置。你也可以控制当你恢复现有文件时如果遇到已经存在这个版本文件时的操作。你可以创建一个副本,这样你就拥有两个版本;你也可以覆盖已存在的版本;再或者你可以在检测到一个存在版本时跳过恢复。恢复过程是立刻执行的。
 
使用WBADMIN.EXE
如果你安装了命令行备份工具,你可以有一些扩展的选项。打开命令行提示符,并查看WBADMIN.EXE的帮助信息。你可以使用这个工具建立一个备份计划任务,但我认为图形化界面将会更简单。我发现这一工具在创建单次备份任务时更有用。运行下列命令可以查看句法帮助:

C:\>wbadmin start backup /?

        我没足够时间来全面介绍所有选项,但是我要展示给你们看你们如何使用命令行工具来定期将文件备份到网络共享。
 
@echo off
::Demo-Backup.bat
::demonstration script using WBADMIN.EXE on a Windows Server 2008 R2 Server
rem backup share UNC
set backupshare=\\mycompany-dc01\backup
rem files and folders to include
set include=c:\scripts,c:\files
rem define date time variables for building the folder name
set m=%date:~4,2%
set d=%date:~7,2%
set y=%date:~10,4%
set h=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
rem defining a new folder like \\mycompany-dc01\backup\RESEARCHDC\12152009_132532
set newfolder=%backupshare%\%computername%\%m%%d%%y%_%h%%min%%sec%
echo Creating %newfolder%
mkdir %newfolder%
rem run the backup
echo Backing up %include% to %newfolder%
wbadmin start backup -backuptarget:%newfolder% -include:%include% -quiet
rem Clear variables
set backupshare=
set include=
set m=
set d=
set y=
set h=
set min=
set sec=
set newfolder=
         由于我不想覆盖任何已存在的备份,我使用机器名和时间戳作为文件名的一部分来创建文件夹。这个批处理文件是来操控这个备份任务的。脚本的主要功能是调用WBADMIN.EXE在指定的共享上创建一个备份。如果你想调整这一步骤,可以再看看句法帮助。我喜欢这一脚本的原因就在于我可以使用计划任务来设置我自己的备份计划任务。所以尽管备份向导只让我创建一个计划任务,但我仍可以使用WBADMIN.EXE创建任何我想要的计划任务。我也同样可以使用这一工具来创建系统状态备份。
         运行命令: C:\>wbadmin get versions,可以查看哪些备份任务已经执行。
         我们需要关注版本的区分,因为我们在使用WBADMIN恢复文件时需要用到它(尽管我们可以简便地使用恢复向导)。
 
使用Windows PowerShell备份
        另一种命令行手段是使用Windows备份PowerShell命令扩展。为了访问它们,你需要首先引导Windows备份插件:

PS C:\> add-pssnapin Windows.ServerBackup

         使用Get命令,可以查看包含哪些命令扩展:

PS C:\> get-command -pssnapin windows.serverbackup

        不幸的是,创建一个备份工作是一个多步过程。我想你会发现使用脚本过程可以更方便的实现在提示符下交互地输入必须的命令。这里有一个我最初写的一个Windows PowerShell版本的批处理文件:
#requires -version 2.0
#requires -pssnapin Windows.ServerBackup
#Demo-WBBackup.ps1
$policy = New-WBPolicy
$files=new-WBFileSpec c:\scripts,c:\files
Add-wbFileSpec -policy $policy -filespec $files
$backdir=("\\mycompany-dc01\backup\{0}\{1:MMddyyyy_hhmmss}" -f $env:computername,(get-date))
write-host "Creating $backdir" -foregroundcolor Green
mkdir $backdir | out-null
$backupLocation = New-WBBackupTarget -network $backdir 
Add-WBBackupTarget -Policy $policy -Target $backupLocation
write-host "Backing up $files to $backdir" -foregroundcolor Green
$policy
Start-WBBackup -Policy $policy
        Windows PowerShell命令扩展是基于创建和执行策略的。这项策略里含有包含或不包含的文件或卷,同时还有备份文件的位置和一些分类选项。你也可以创建系统状态和立即灾难恢复任务。在我的示范中,我只是简单地备份了一些目录。启用WBBackup命令扩展可以执行备份任务。
        当你看到Windows备份命令扩展的列表时,你会注意到一个显而易见的省略。那就是没有恢复数据的命令扩展。我猜想是这样的,尽管你可以使用WBADMIN.EXE,但你不需要自动执行该步操作,也许将来该命令扩展会加入的。这就意味着,你可以使用恢复向导或WBADMIN.EXE来恢复文件。
 
自己做
         当你自己尝试使用这些工具时,我相信你会意识到还有一大堆事需要处理,而且这些事比Windows备份带给你和你的团队的更多。你需要评估这些功能能符合你全局备份战略的程度,还要评估这些功能是否能融入你们公司的长期商业规划。在一些情况下,免费的Windows备份解决方案是很有限的,但是脚本选项和.vhd文件的使用可以提供一些具有挑战性的可能来超越这些限制。这就需要你和你的团队的独创能力了。
         最后,无论使用哪种备份软件,请在非生产环境设置下测试练习恢复过程。不要在真正需要恢复时去学习这一过程,到时你的老板会掐死你的。只有在平时熟悉这些过程,这样在真正需要这些过程的时刻到了时,你才能变成拯救一切的英雄。