备份发现阶段概述
调用 IVssBackupComponents::GatherWriterMetadata 后,请求者使用从此调用返回的 IVssAsync 接口实例来确定系统上的所有编写器何时完成其编写器元数据文档的构造。 有关详细信息,请参阅 在 VSS 下处理备份概述。
此时,请求者可以开始发现阶段,检查元数据以确定哪些应用程序正在运行,哪些卷必须进行卷影复制才能获得完整备份。 下表显示了备份发现阶段所需的操作和事件序列。
请求者操作 | 事件 | 编写器操作 |
---|---|---|
检索编写器元数据文档 (请参阅 IVssBackupComponents::GetWriterMetadata, IVssExamineWriterMetadata) 。 | 无 | 在此期间,编写器可以继续其正常操作。 |
使用组件列表及其 文件集以及排除的文件获取备份中涉及的卷和文件的列表 (请参阅 IVssWMComponent、 IVssWMFiledesc) 。 | 无 | 无 |
选择要备份编写器的编写器元数据文档中的组件。 为每个组件调用 IVssBackupComponents::AddComponent 以将其添加到备份组件文档。 (请参阅使用备份的可选择性和使用备份组件 Document.) | 无 | 无 |
初始化支持的卷的卷影副本集、上下文和检查 (请参阅 IVssBackupComponents::StartSnapshotSet、IVssBackupComponents::IsVolumeSupported) 。 | 无 | 无 |
如果执行非组件备份,请通过为每个卷调用 IVssBackupComponents::AddToSnapshotSet ,将所需目标卷从编写器元数据文档添加到卷影副本集。 否则,对于已通过调用 AddComponent) 添加到备份组件文档 (编写器元数据文档中的组件,请求者还必须为每个受影响的卷调用 IVssBackupComponents::AddToSnapshotSet 。 | 无 | 无 |
发现阶段的编写器操作
由于备份的发现阶段主要由处理从编写器元数据文档检索到的信息的请求者组成,因此编写器几乎没有任何要求。
从理论上讲,编写器此时可以继续正常运行。 但是,编写者可能需要开始为即将到来的卷影复制和备份操作做准备。
发现阶段的请求者操作
请求者使用通过 IVssBackupComponents::GetWriterMetadata 获取的 IVssExamineWriterMetadata 对象来循环访问所有编写器的元数据,并选择要备份其数据的编写器。
此时,请求者需要使用 IVssExamineWriterMetadata::GetComponent 循环访问编写器的组件,从而生成每个编写器的备份候选项的初始列表。 这将为请求者提供 IVssWMComponent 对象,从中可以获取要使用 IVssWMComponent::GetFile、IVssWMComponent::GetDatabaseFile 和 IVssWMComponent::GetDatabaseLogFile 备份的文件的规范。
由于 IVssWMFiledesc 对象可以使用通配符来保存文件位置信息,因此可能需要使用 FindFirstFile、 FindFirstFileEx 和 FindNextFile 等函数。
在卷影副本完成之前,编写器仍然可以在正常工作过程中在磁盘中添加或删除文件,因此此时不应生成要备份的文件的实际列表。
相反,此时会通过执行以下操作找到要备份的文件和卷的初始列表:
- 使用 IVssExamineWriterMetadata) 检查每个编写器的编写器元数据文档 (中的所有可选备份和不可选择的组件,并将其组织到 组件集中 使用 逻辑路径 (请参阅 使用选择性和逻辑路径)
- 在使用 IVssBackupComponents::AddComponents 的备份组件文档中,显式包括所有必需的组件 (不可为备份组件选择,但无法为备份上级选择)
- 对于未使用 IVssBackupComponents::AddComponent (定义组件集的备份组件,选择显式包含可选)
- 通过使用 IVssBackupComponents::AddComponent) (隐式包含组件集的子组件),显式添加用于备份组件 (,选择组件集以参与备份。
- 使用所选编写器的编写器元数据文档和卷管理功能中的 文件集 信息,请求者确定要备份的文件的路径以及需要卷影复制的卷
请注意,只有使用 IVssBackupComponents::AddComponent) 在备份和备份组件文档中显式包含 (的组件才会将 IVssComponent 接口的实例添加到该文档中。 这些实例将用于检查和修改显式包含的组件及其任何隐式包含的子组件的组件设置 (请参阅 ) 的可选性和使用组件属性 。
如果编写器包含编写器的任何组件,则必须添加其所有必需的组件。 但是,请求者也可以完全跳过编写器的所有组件集。 如果未显式选择编写器的组件,则不会选择编写器,并且 VSS 会禁止该编写器参与剩余的备份操作。
请求者通过调用 IVssBackupComponents::StartSnapshotSet 来启动将包含所选卷的卷影副本集。
如果卷可以参与卷影副本 (可以使用 IVssBackupComponents::IsVolumeSupported) 进行检查,则请求者可以使用 IVssBackupComponents::AddToSnapshotSet 将该卷添加到卷影副本集。
尽管它通常没有用,但请求者有时也可以选择哪个 提供程序 将维护给定卷的卷影副本 (请参阅 选择提供程序 了解) 的详细信息。
应注意处理包含已装载文件夹或重新分析点的卷。 装载的文件夹或重新分析点可以出现在卷影副本中,并且可以备份。 但是,无法对卷影复制卷遍历装载的文件夹或重新分析点 (请参阅 使用装载的文件夹和重分析点) 。
此时,备份中将初始化并填充备份组件文档。 在将来的操作中,编写者和请求者可以使用 IVssComponent 接口相互通信。
处理 PrepareForBackup、PostSnapshot 和 BackupComplete 事件时,写入者有权访问 IVssComponent 接口。