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