需自动归档系统快照以防系统默认清理导致关键时间点丢失,确保重要快照被安全复制至nas或独立磁盘;可用get-ciminstance win32_shadowcopy筛选7日内快照,挂载后robocopy复制并校验,按30天策略清理旧归档。
为什么需要自动归档系统快照
windows 系统快照(如 vss 卷影副本、系统还原点、或第三方备份工具生成的快照)本身不会长期保留,系统默认会定期清理旧快照以释放空间。手动管理不仅耗时,还容易遗漏关键时间点。自动归档能确保重要快照被复制到安全位置(如网络共享、nas 或独立磁盘),既规避误删风险,又为回溯故障提供可靠依据。
确认并列出当前可用快照
PowerShell 中可通过 vssadmin list shadows 查看本地卷影副本,但该命令输出为文本格式,不便直接处理。更推荐使用 WMI/CIM 接口获取结构化数据:
- 运行 Get-WmiObject -Class Win32_ShadowCopy(旧版系统)或 Get-CimInstance -ClassName Win32_ShadowCopy(Win10/11 推荐)获取快照对象列表
- 筛选近期快照:用 Where-Object { $_.InstallDate -gt (Get-Date).AddDays(-7) } 限定 7 天内创建的快照
- 提取关键属性:ID(用于挂载)、DeviceObject(原始设备路径)、InstallDate(ISO 格式时间可直接用于命名)
挂载快照并复制关键内容
快照本身是只读的隐藏卷,需先映射为驱动器号才能访问。注意:每次挂载需指定唯一盘符,且操作后必须及时卸载,避免资源残留。
- 用 mklink /d 不适用——它不能链接到 DeviceObject;正确方式是调用 vssadmin add shadowstorage 不相关,应使用 mountvol X: \?GLOBALROOTDeviceHarddiskVolumeShadowCopy{xxx}
- PowerShell 中建议封装为函数:Mount-ShadowCopy -ShadowId
-DriveLetter Y ,内部执行 mountvol 并检查返回码 - 复制时避开临时文件和页面文件:用 robocopy Y: C:ArchiveSnapshot_20260607 /E /XD “System Volume Information” “$Recycle.Bin” /XF hiberfil.sys pagefile.sys
- 复制完成后务必执行 mountvol Y: /D 卸载,否则下次挂载可能失败
归档策略与清理逻辑
归档不是无限制堆积。合理策略包括按时间保留(如最近 30 天)、按用途标记(如“补丁前”“升级后”)、或按大小限额(如总归档不超过 500GB)。
- 为每个归档目录添加元数据文件:在目标路径下写入 shadowinfo.json,记录 ID、源卷、创建时间、挂载路径、校验和(可用 Get-FileHash 对 C:WindowsSystem32configSYSTEM 取 SHA256)
- 定期清理旧归档:用 Get-ChildItem C:ArchiveSnapshot_* | Where-Object {$_.CreationTime -lt (Get-Date).AddDays(-30)} | Remove-Item -Recurse -Force
- 加入错误日志:所有关键步骤(挂载、复制、卸载、校验)失败时写入 $env:ProgramDataScriptsSnapshotArchive.log,便于排查











