编写器
编写器 是应用程序或服务,这些应用程序或服务在磁盘上的文件中存储持久性信息,并使用卷影复制接口向请求者提供这些文件的名称和位置。
在备份操作期间,编写器确保其数据静止且稳定,适合卷影复制和备份。 编写器可根据需要解锁文件并指示备用位置,从而与还原协作。
如果在 VSS 备份操作期间没有编写器,仍可以创建卷影副本。 在这种情况下,卷影复制卷上的所有数据都将处于 崩溃一致状态。
编写器状态
编写器在基于 XML 的元数据对象( 编写器元数据文档)中维护其状态。
此编写器元数据是唯一包含要备份和还原的数据 集(路径、文件规范和递归标志)的数据结构。
编写器元数据文档将编写器的文件集组织成组或 组件。 在备份和还原操作期间,其中一个组件与编写器管理的其他组件之间的关系由组件 选择备份、其 可还原性以及 逻辑路径描述在编写器元数据文档中。 (有关详细信息,请参阅设置组件组织和使用可选择性和逻辑路径。)
本文档还包含管理文件还原和其他问题的其他信息。
请求方需要编写器元数据及其自己的备份组件文档来处理备份或还原。
与备份组件文档不同,编写器元数据文档应被视为只读结构。 编写器创建后,不会更改文档。
编写器事件处理
编写器的 VSS 操作是通过接收 COM 事件启动的。
如果不存在任何事件,编写器不会执行 VSS 操作 (,例如 VSS 备份或还原) 。 相反,它会执行其正常工作,例如响应数据库查询、管理用户数据或提供其他服务。
若要确保正确执行多个并行备份和还原会话的错误处理,并确保一个备份或还原会话未损坏另一个会话,必须执行以下操作:
- 如果编写器的事件处理程序 (如 CVssWriter::OnFreeze) 调用 CVssWriterEx2::GetSessionId、CVssWriter::SetWriterFailure 或 CVssWriterFailureEx2::SetWriterFailureEx 方法,则事件处理程序必须在调用事件处理程序的同一线程中调用该方法。
- 编写器的事件处理程序(如 OnFreeze )的实现可以根据需要将工作卸载到工作线程,只要每个工作线程封送任何所需的错误报告回原始事件处理程序线程。
处理标识事件
除了“标识”事件之外,编写器接收的事件的类型和顺序取决于当前正在进行的 VSS 操作的类型。
识别事件要求编写器提供有关其配置及其通过 编写器元数据文档管理的文件的系统信息。 在支持几乎所有 VSS 操作(包括系统查询以及卷影复制和备份和还原操作)的情况下生成“标识”事件。 因此,任何编写器对 Identify 事件处理程序 CVssWriter::OnIdentify 的实现都必须能够随时处理标识事件,包括在处理另一个 VSS 操作(例如备份或还原)的中间。 标识事件绝不应被视为 VSS 操作生命周期的一部分,即使该事件生成可能是预期且在开始该操作之前需要该事件的一部分。
在 CVssWriter::OnIdentify 中不修改有关 VSS 操作的状态信息尤其重要,因为收到无序事件会重置该信息。
备份和还原事件
除了初始标识事件外,编写器还将接收两到七个事件,具体取决于它是否参与备份或还原。
处理这些事件从编写器的角度 () 备份或还原操作的生命周期。
在典型的备份操作中, (请参阅 VSS) 下处理备份概述,编写器除了初始标识事件) 外,还会处理以下事件 (:
- PrepareForBackup
- PrepareForSnapshot
- 冻结
- 解冻
- PostSnapshot
- BackupComplete
- BackupShutdown
在典型的还原操作 (请参阅 VSS) 下处理还原的概述 ,编写器将处理以下事件:
- PreRestore
- PostRestore