卷影复制提供程序必须符合准则,以确保请求者兼容性。 在运行时,备份应用程序或使用卷影副本的任何其他请求者必须正常运行,而无需了解特定的提供程序实现详细信息。
自动磁化资源管理
请求者必须能够将卷添加到卷影副本集。 请求者可以在 _VSS_SNAPSHOT_CONTEXT中指定影子复制属性,例如 VSS_VOLSNAP_ATTR_TRANSPORTABLE、VSS_VOLSNAP_ATTR_DIFFERENTIAL和/或 VSS_VOLSNAP_ATTR_PLEX。 提供程序必须遵循这些属性。 如果它不能遵循这些属性,则它应通过在 IVssHardwareSnapshotProvider::AreLunsSupported 中设置 *pbIsSupported来指示卷影副本集不受支持。
提供程序绝不能同意支持无法创建的卷影副本。 如果请求者未指定 plex 或差异属性,则提供程序必须包括自动磁逻辑,以便分配卷影副本的子系统空间,并使用最合适的方法创建卷影副本。 硬件提供程序不得包含提供程序特定的 API,用于管理所需的卷影复制属性。
创建的卷影复制卷 Read-Only 和隐藏
VSS 在每个受影响的 LUN 上设置标志,以便当运行 Windows Server 2003 的计算机检测到生成的卷影副本卷将隐藏和只读。 不会自动分配驱动器号和装载的文件夹。 VSS 在整个卷影副本的生命周期内维护这些标志。
硬件卷影复制 LUN 必须是读/写
VSS 仅支持将基础 LUN 映射为读/写的硬件卷影副本。 必须在创建卷影副本之前完成此作;事实发生后无法完成。 硬件提供程序不应修改这些标志。 有关 VSS 如何使用这些标志的详细信息,请参阅 影子复制创建过程。
Windows 群集服务不支持自动导入硬件卷影副本
Windows 群集服务不能容纳具有重复签名和分区布局的 LUN。 卷影复制 LUN 必须传输到群集外部的主机。 有关详细信息,请参阅 使用可传输卷复制卷快速恢复。
包含动态磁盘的卷影副本必须传输到其他主机
在 Windows Server 2008 之前 : 动态磁盘的本机支持不能容纳具有重复签名和配置数据库内容的 LUN。 卷影复制 LUN 必须传输到其他主机。 VSS 通过不允许动态磁盘的自动导入卷影副本来强制实施此作。 请求者不应将可传输卷影副本导入回同一主机。
从 Windows Server 2008 开始 :删除此限制。
提供程序进程外
所有提供程序都必须作为进程外 COM 组件实现。
Time-Critical作
应在 IVssHardwareSnapshotProvider::BeginPrepareSnapshot中启动长作(如同步 plexes)。 此函数应启动异步准备工作并快速返回。 IVssProviderCreateSnapshotSet::EndPrepareSnapshots 充当“rendezvous”函数,提供程序可以在此方法中同步等待完成 BeginPrepareSnapshot启动的准备工作。
提供程序不得在 IVssProviderCreateSnapshotSet::P reCommitSnapshots、IVssProviderCreateSnapshotSet 中添加延迟 ::CommitSnapshots或 IVssProviderCreateSnapshotSet::P ostCommitSnapshots,因为应用程序在这些调用期间被冻结。 CommitSnapshots 应在几秒钟内返回,因为在“刷新和保留”窗口中调用了此作,如果发布未在 10 秒内收到,VSS 内核支持将取消刷新和保留,这将导致 VSS 失败卷影复制创建过程。 如果提供程序完成此调用需要几秒钟以上,则卷影副本创建将失败的可能性很高。
在 CommitSnapshots 期间小心 I/O
在 CommitSnapshots期间,硬件提供程序不需要对卷卷执行任何 I/O作。 如果需要任何 I/O,提供程序在处理 CommitSnapshots 方法时,不得向原始卷启动任何 I/O。
在 CommitSnapshots期间,VSS 内核支持驱动程序会阻止 I/O 到正在复制卷的原始卷。 如果提供程序使用卷影复制集中的卷的同步 I/O,则会阻止该 I/O,并且卷影复制提交过程将死锁。 提供程序不应在 CommitSnapshots 期间调用任何 Win32 API,因为它们将产生高概率导致 I/O 和死锁。 VSS 内核支持超时将在 10 秒后中断此死锁,但这将导致卷影副本创建失败。
如果必须尝试 I/O,则必须异步执行。 在从 CommitSnapshots 方法返回所有提供程序之后,I/O 才会完成。 通常,最好在 PostCommitSnapshots 调用中执行此类作。
读/写卷影复制 LUN
在此版本中,即使卷公开为只读,VSS 也仅支持读/写卷影复制 LUN。 原因是系统需要更改磁盘上的数据结构,例如:
- 磁盘签名,在卷影复制过程中发生更改
- 与分区相关的数据结构,包括指示分区是只读的、隐藏的、卷影副本的,不应分配驱动器号。
唯一页 83 信息
原始 LUN 和新创建的卷影复制 LUN 必须在第 83 页数据中至少有一个唯一存储标识符。 至少有一个类型为 1、2、3 或 8 的STORAGE_IDENTIFIER,并且原始 LUN 和新创建的卷影复制 LUN 上必须具有 0 的关联。