Windows Server 2025 / 从 Windows Server Backup 恢复文件

使用 Windows Server Backup 恢复文件时,应先选对备份版本和项目,再恢复到独立文件夹。核对内容、哈希和权限后,才决定是否替换正在使用的文件;立即覆盖可能丢失备份之后仍然有效的修改。

区分备份版本与当前文件

本练习承接在 FS1 上创建并验证备份的操作。E: 中应已有 D:\BackupLab\sample.txt 的备份,内容为字面文本 backup version A,并保存了备份前的哈希。若环境不同,应核对实际计算机、源与目标。不要使用生产文件,也不要使用内容或时间尚未确认的备份。

  1. 核对 E: 中 FS1 的 A 备份时间与版本标识。若有多个计算机或版本,应选定正确备份集。
  2. 确认 sample.txt 当时存在且已包含在备份中。修改或删除之后生成的备份,可能不符合本次恢复目的。
  3. 修改前记录当前文件的内容与哈希,同时保留备份前的 A 哈希;二者是不同的比较依据。
  4. 每次操作在 D:\RestoreLab 下使用新的空文件夹。不要复用旧结果,也不要复用上一练习的 D:\RestoreCheck43。

只有找到并记录 A 的备份后,才将这个实验文件改为 B。Set-Content 会覆盖指定文件:先核对路径并保存仍有用途的数据。在 FS1 的管理员 PowerShell 中逐行执行,遇到错误则停止。比较结束前,不要创建会替换唯一 A 副本的新备份:

'backup version B' | Set-Content -LiteralPath 'D:\BackupLab\sample.txt' -Encoding UTF8
Get-Content -LiteralPath 'D:\BackupLab\sample.txt'
wbadmin get versions -backupTarget:E:

在恢复向导中选择独立目标

  1. 在 Windows Server Backup 的本地备份中打开恢复向导。
  2. 若本机目录正确列出该服务器的备份,选择它;否则选择其他位置及保存备份的 E: 卷。
  3. 选择仍保留 A 的日期和时间。如果最新版本已包含修改或删除,不要自动选最新版本。
  4. 选择文件和文件夹,定位 D:\BackupLab 并选中 sample.txt,核对预期来源。
  5. 选择其他位置,并指定本次在 D:\RestoreLab 下新建的文件夹。继续前核对完整路径。
  6. 检查已有文件冲突的处理方式,以及访问控制列表(Access Control Lists,ACL)的恢复选项。使用空目标并避免覆盖,保留权限恢复以便随后验证。确认版本、文件和目标后启动,等待最终结果并检查错误。

可用选项取决于备份来源和项目类型。这里恢复单个文件,不覆盖整个卷,也不执行域控制器恢复。访问控制列表(ACL)记录文件权限条目;恢复这些条目不等于应向所有人开放目标目录。

命令替代方法须使用实际版本标识

只有尚未通过向导执行恢复时,才使用此替代方法。在 FS1 上以管理员 PowerShell 运行,准确复制自己版本查询返回的标识,不要编造日期,也不要只输入界面中的时分。wbadmin start recovery 文档要求使用 -backupTarget 时通过 -machine 指定备份来源计算机。本例为 FS1;若备份属于其他计算机,应在两个相关命令中统一替换该名称。逐行执行,在 start recovery 前先检查 get items 的结果:

$backupVersion = Read-Host 'Version identifier shown by wbadmin get versions'
$restoreDirectory = Join-Path 'D:\RestoreLab' ((Get-Date -Format 'yyyyMMdd-HHmmss') + '-' + ([guid]::NewGuid().ToString('N').Substring(0,6)))
New-Item -ItemType Directory -Path $restoreDirectory -Force | Out-Null
wbadmin get items "-version:$backupVersion" -backupTarget:E: -machine:FS1
wbadmin start recovery "-version:$backupVersion" -itemType:File -items:D:\BackupLab\sample.txt "-recoveryTarget:$restoreDirectory" -backupTarget:E: -machine:FS1 -overwrite:CreateCopy
$restoreDirectory

备份项目查询必须对应预期计算机、版本和文件。如果失败或找不到 sample.txt,应停止:外部程序 wbadmin 的失败不一定自动中止后续 PowerShell 行。还应确认生成的目标文件夹确实全新且为空。日期与标识可减少重名,但 -Force 不能证明目标路径正确。CreateCopy 通过保留副本的冲突处理方式避免直接覆盖已有文件,且命令仍保留确认提示。核对工具显示的源与目标,不要追加 -quiet,也不要以此选项为由忽略错误路径。

比较内容、哈希与权限

在实际输出目录中寻找文件,因为恢复可能重新生成子目录。保持当前控制台打开,以便继续使用 $restoreDirectory。若通过向导操作,应将该变量设为实际选择的新目标,不要指向 D:\BackupLab 或生产目录树。前两个命令只检查恢复目录,最后一个命令读取原文件,确认它仍为 B:

Get-ChildItem -LiteralPath $restoreDirectory -File -Recurse
Get-ChildItem -LiteralPath $restoreDirectory -File -Recurse | Get-FileHash -Algorithm SHA256
Get-Content -LiteralPath 'D:\BackupLab\sample.txt'

恢复出的文件应包含 backup version A,原文件应仍为 backup version B。将恢复文件的 SHA-256 哈希与备份前记录的 A 比较,不要与 B 比较。SHA-256 是文件字节的密码学指纹,64 个十六进制字符应全部一致。存在多个文件时,应逐一对应路径和哈希,不能只看第一行。哈希相同不能证明权限正确。使用 Get-Acl,或“属性”→“安全”→“高级”,检查所有者与 ACL。恢复的 ACL 可能不同于目标目录的继承权限;应测试授权账户的访问,并确认其他账户未获得不当访问。

验证通过后再决定是否替换在用文件

替换服务正在使用的文件前,先保留当前版本并记录回退方法。检查文件打开状态、锁定、用户正在进行的工作和应用一致性,必要时协调操作时间。恢复到另一文件夹不会自动替换原件。不要仅为证明恢复成功就用 A 覆盖 B,应先评估这样做会丢失哪些仍然有效的后续修改。

如果找不到备份,应检查目标是否可用、来源计算机名称、目录与版本标识。版本查询指南说明了通过 -machine 选择存储中的计算机。需要恢复时,应能够取得相应加密密钥和凭据,但不要将其复制到日志或截图中。不要在尚未查明原因时,首先尝试格式化磁盘或重建备份目录。

保留版本、文件、A 与恢复结果的哈希、已检查权限及耗时记录。结果不再需要后,仅删除本次新建的恢复文件夹,并在删除前核对路径。保留 E: 中的备份和原文件 B。若还要撤销本次实验的内容修改,应先保存 B,再决定是否重新使用 A,不要删除整个备份集。