还原增量备份和差异备份

在 VSS 下还原增量备份或差异备份与任何其他 VSS 还原操作没有明显区别。

编写器可以修改还原目标或请求定向目标,并且请求者必须处理备用位置映射和新目标,就像处理任何其他还原一样。 但是,在处理增量备份或差异备份的还原时,需要注意两个重大问题:其他还原和备份标记。

其他还原

第一个问题是其他还原。 备份操作员可能需要使用初始完整备份介质和后续增量备份介质或差异备份介质作为源来运行多个还原操作。

某些编写器通常使用 CVssWriter::OnPostRestore 处理 PostRestore 事件时,使用还原的文件执行磁盘上当前数据的更新。 对于其中一些编写器,从还原的文件重复更新磁盘上的数据是低效或危险的。

因此,备份应用程序必须通过调用 IVssBackupComponents::SetAdditionalRestores 来指示组件或组件集何时可能需要后续还原。

编写器将调用 IVssComponent::GetAdditionalRestores ,以确定备份操作员是否计划对组件或组件集进行更多还原。

如果请求者未调用 IVssBackupComponents::SetAdditionalRestores,则 IVssComponent::GetAdditionalRestores 返回 false,并且编写器可以执行它所需的任何还原后处理。

如果已调用 IVssBackupComponents::SetAdditionalRestores ,则 IVssComponent::GetAdditionalRestores 返回 true,编写器应决定如何处理还原后操作,例如,编写器可以选择不更新其磁盘上的数据。

备份标记

作为上一个完整备份操作的一部分,编写器可能已将备份标记存储在请求者的备份组件文档中。

备份标记存储为字符串,请求者无法理解其格式和信息。 因此,请求者无法直接使用备份标记信息。

相反,它的任务是在为增量备份生成 PrepareForBackup 事件之前,通过调用 IVssBackupComponents::SetPreviousBackupStamp 方法,使该信息可供编写器使用。

请求者会逐个组件执行此操作。 请求者使用 IVssComponent::GetBackupStamp 检查存储的组件或组件集备份标记信息。

如果备份标记信息适合请求者正在进行还原的类型,则它使它可用作使用 IVssBackupComponents::SetPreviousBackupStamp 方法进行组件最后一次备份的时间戳。

编写器使用 IVssComponent::GetPreviousBackupStamp 恢复备份标记信息。 此类的编写器生成了初始备份标记,因此编写器能够解码此标记并使用信息。 基于此,在处理 PreRestore 事件时,编写器可以选择执行更改还原目标或请求定向目标等操作。