还原初始化概述
在初始化 VSS 还原操作时,请求者需要检索备份组件文档,以及备份操作期间创建和保存的每个相关编写器元数据文档。 编写器将在处理请求者生成的 Identify 事件 时查询其当前状态。 有关详细信息,请参阅 在 VSS 下处理还原的概述。
下表显示了初始化还原操作所需的操作和事件序列。
请求者操作 | 事件 | 编写器操作 |
---|---|---|
创建 IVssBackupComponents 接口,对其进行初始化以管理还原,并加载存储的请求者元数据 (请参阅 CreateVssBackupComponents, IVssBackupComponents::InitializeForRestore) 。 | 无 | 无 |
调用 CreateVssExamineWriterMetadata 以创建 IVssExamineWriterMetadata 接口,并使用存储的编写器元数据加载它们。 | 无 | 无 |
启动与编写器的异步联系 (请参阅 IVssBackupComponents::GatherWriterMetadata.) | 识别 | 编写器开始事件处理以支持还原。 创建编写器元数据文档 (请参阅 使用编写器元数据文档, CVssWriter::OnIdentify, IVssCreateWriterMetadata) 。 |
请求者通过调用 IVssAsync 等待编写器初始化。 | 无 | 无 |
在还原的初始化阶段,请求者需要有权访问存储的备份组件文档和所有编写器元数据文档。
根据具体实现,这意味着请求者需要装载备份媒体且可读,或者其他一些用于访问存储元数据的机制可用。
请求者使用已存储的 XML 文档,该文档包含执行备份以使用 IVssBackupComponents::InitializeForRestore 初始化其备份组件文档的请求者的备份组件文档可以访问该信息。
与备份期间的情况一样,备份组件文档的信息不足,无法支持还原;因此,请求者需要访问备份期间存储的那些编写器元数据文档 (请参阅 请求者) 使用组件 。
请求者通过调用 CreateVssExamineWriterMetadata 来检索存储的编写器元数据,该编写器的数据已备份,现在要还原。 此函数为每个编写器创建 IVssExamineWriterMetadata 对象,并将编写器的编写器元数据文档加载到对象中。
与备份期间的情况一样,若要启动自身与系统编写器之间的协作,请求者必须通过调用 IVssBackupComponents::GatherWriterMetadata 生成 Identify 事件。 完成 GatherWriterMetadata 后,无需调用 IVssBackupComponents::GatherWriterStatus。 无法处理 Identify 事件的编写器将不包括在提供要由 IVssBackupComponents::GetWriterMetadataCount 和 IVssBackupComponents::GetWriterMetadata 返回的元数据的编写器列表中 ( 请参阅 确定编写器状态) 。
与备份操作一样,请求者需要查询和分析备份组件文档中的信息,并将其与编写器元数据文档中的数据进行比较,以确定备份了哪些组件并选择要还原的组件 (请参阅 准备还原) 概述 。 此外,请求者还需要生成一个详细列表,其中包含有关所选用于还原的备份介质上的文件的信息,以及还原这些文件的方式和位置。 (请参阅 生成还原集。)
因此,某些备份应用程序可能会发现,将自己的列表 (以自己的优化格式存储在备份介质上,) 文件及其关联的编写器、组件、还原过程和位置信息很有用。 此列表可用于最大程度地减少编写器元数据文档和支持还原所需的备份组件文档的分析和比较量。
与还原操作期间一样,为了响应 Identify 事件,VSS 调用每个编写器的虚拟处理程序方法 CVssWriter::OnIdentify。
请注意,除当前请求者以外的应用程序 (例如,) 系统应用程序可以生成标识事件,这些事件必须由编写器处理。 此外,编写器无法从 CVssWriter::OnIdentify 中确定哪个应用程序生成了 Identify 事件。
假设编写器在处理还原操作时可能会收到多个 Identify 事件,编写器绝不应在 CVssWriter::OnIdentify 处理程序中设置状态信息。 相反,它们必须使用与备份操作期间相同的算法来创建编写器元数据文档 (请参阅 备份初始化期间的编写器操作 以获取) 的详细信息。