卷影复制创建详细信息
通常,创建卷影副本的方式取决于要创建的卷影副本的类型、其上下文以及卷影复制操作中的编写器所赋予的角色。 (有关详细信息,请参阅 影子复制上下文配置 。)
阴影复制上下文是通过调用 IVssBackupComponents::SetContext 方法设置的。 在调用 IVssBackupComponents::D oSnapshotSet 方法以创建阴影副本之前,请求者必须按照以下各节中指定的顺序调用 IVssBackupComponents 方法。
所有卷影副本的先决条件
无论编写器参与级别如何,创建任何卷影副本始终要求使用调用 IVssBackupComponents::InitializeForBackup 和 IVssBackupComponents::StartSnapshotSet 初始化请求程序。
如果未进行此调用, IVssBackupComponents::D oSnapshotSet 方法将返回错误。
具有编写器参与的卷影副本
如果卷影复制上下文指定编写器参与 (,则使用 VSS_CTX_BACKUP 调用 IVssBackupComponents::SetContext,或VSS_CTX_APP_ROLLBACK) :
- 当卷影复制上下文支持编写器参与时,请求者必须始终调用 IVssBackupComponents::GatherWriterMetadata 。 如果卷影复制上下文支持编写器参与, 并且 IVssBackupComponents::GatherWriterMetadata 在 IVssBackupComponents::D oSnapshotSet 之前未调用,将返回错误。
- 如果请求者想要选择特定的编写器组件,则必须先调用 IVssBackupComponents::AddComponent ,再调用 StartSnapshotSet 来创建卷影复制集。
- 必须调用 StartSnapshotSet 来创建卷影复制集。
- 请求者可以通过调用 AddToSnapshotSet 将一个或多个卷添加到卷影副本集。 某些编写器组件可能不会指定任何受影响的卷。 在这种情况下,快照集可以接受为空 (,即不包含卷) 。
- 若要保证编写器元数据的一致性,请求者应始终调用 IVssBackupComponents::P repareForBackup, 即使未选择任何组件也是如此。 这会导致 VSS 生成 PrepareForBackup 事件,其中 VSS 调用每个参与编写器的 CVssWriter::OnPrepareBackup 方法。
- VSS 将在创建阴影副本以响应 IVssBackupComponents::D oSnapshotSet 之前生成 PrepareForSnapshot 和冻结事件。 编写器将使用 CVssWriter::OnPrepareSnapshot 和 CVssWriter::OnFreeze 处理事件。
- VSS 将在创建阴影副本以响应 IVssBackupComponents::D oSnapshotSet 后生成解冻事件和 PostSnapshot 事件。 编写器将使用 CVssWriter::OnThaw 和 CVssWriter::OnPostSnapshot 处理事件。
没有编写器参与的卷影副本
不建议为标准备份应用程序创建无编写器参与的卷影副本, (看到 没有编写器参与的备份) 。
有一些用途,例如磁盘的快速备份,以提供安全网,防止意外文件损坏,无需显式编写器参与即可执行。 此类卷影副本具有 VSS_CTX_FILE_SHARE_BACKUP 或 VSS_CTX_NAS_ROLLBACK的上下文。
对于这种类型的卷影副本,请注意以下事项:
- 请求者仍必须调用 所有卷影副本先决条件中列出的所需方法。
- 请求者可以调用 IVssBackupComponents::GatherWriterMetadata,但这不是必需的。
- 如果请求者调用 IVssBackupComponents::AddComponent、 IVssBackupComponents::P repareForBackup 或 IVssBackupComponents::BackupComplete,将返回错误。
- 提供程序不会为这种类型的卷影复制生成 PrepareForSnapshot、 Freeze、 Thaw 或 PostSnapshot 事件。