本文介绍在 Windows 2008 或 Windows 2012 中触发事件 ID 2213 的问题。
适用于: Windows Server 2008 R2 Service Pack 1原始 KB 数: 2846759
总结
Microsoft通过修补程序 2663685为 Windows Server 2008 R2 的 DFS 复制 (DFSR) 服务引入了新功能。 在 Windows Server 2008 R2 中安装修补程序2663685或更高版本的Dfsrs.exe后,DFSR 服务在数据库遇到脏关后不再自动恢复可扩展存储引擎(ESE)数据库。 相反,当触发新的 DFSR 行为时,事件 ID 2213 将记录在 DFSR 日志中。 DFSR 管理员必须在 DFSR 检测到脏关后手动恢复复制。
默认情况下,Windows Server 2012 会展示此行为。
DFSR 服务在托管复制文件夹的卷上为每个卷维护一个 ESE 数据库。 DFSR 使用此数据库来存储有关复制文件夹中每个文件和文件夹的元数据。 必须维护数据库的完整性,以确保服务继续正常运行。
当通知 DFSR 服务必须关闭时,它将开始向 ESE 数据库提交所有未完成的更改。 在 DFSR 服务关闭之前,DFSR 服务无法将所有挂起的更改提交到 DSFR ESE 数据库时,会发生 DFSR 中的脏关闭。 在启动期间,DFSR 服务会检查数据库的完整性。
脏关机恢复可能会导致大量积压工作,而这反过来又可能导致复制冲突。 在某些情况下,在修补程序2780453中修复之前,获胜的文件可能不是最终用户想要的版本。 在脏关期间停止复制的更新旨在确保管理员能够备份数据,以捕获自复制恢复之前上次备份以来的增量。
安装修补程序2780453后,无需在脏关期间暂停复制。 修补程序2780453的修补程序包含在所有 Windows 2012 默认媒体中。
最佳做法
基于服务器角色、OS 和修补程序级别的自动恢复最佳做法:
| 角色 | Windows Server 2008 R2 | 安装了 KB 2780453的 Windows Server 2008 R2 | Windows Server 2012 |
|---|---|---|---|
| DC | 开 | 开 | 开 |
| 群集节点 | 开 | 开 | 开 |
| 可写 DFSR 服务器 | 关 | 开 | 开 |
| 只读 DFSR 服务器 | 开 | 开 | 开 |
在自动恢复中禁用停止复制功能
若要在检测到脏数据库关闭时让 DFSR 执行自动恢复,请在 Windows Server 2008 R2 中安装修补程序 2780453 后编辑以下注册表值。 可以在所有版本的 Windows Server 2012 上部署此更改。 如果值不存在,则必须创建该值。
- 键:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DFSR\Parameters - 值:StopReplicationOnAutoRecovery
- 类型:Dword
- 数据:0
记录事件 2213 后恢复复制
记录事件 2213 后,管理员必须运行 WMIC 命令才能恢复复制。 命令细节在事件 ID 2213 的文本中提供。
步骤 1:在 DFSR 服务器上记录的事件 ID 2213 的恢复步骤
- 备份卷上所有复制文件夹中的文件。 未能执行此操作可能会导致在恢复复制的文件夹期间发生意外冲突解决导致的数据丢失。
- 若要恢复此卷的复制,请使用
ResumeReplication类的DfsrVolumeConfigWMI 方法。 例如,从提升的命令提示符运行以下命令:
wmic /namespace:\\root\microsoftdfs path dfsrVolumeConfig where volumeGuid="E18D8280-2379-11E2-A5A0-806E6F6E6963" call ResumeReplication
步骤 2:从事件 ID 2213 恢复步骤中的步骤 2 复制 WMIC 命令,然后将其粘贴到提升的命令提示符中
命令成功运行时,将返回以下结果:
wmic /namespace:\\root\microsoftdfs pathdfsrVolumeConfig where volumeGuid="F1CF316E-6A40-11E2-A826-00155D41C919" call ResumeReplication
Executing(file://ww2008r2dc1/root/microsoftdfs:DfsrVolumeConfig.VolumeGuid=%22F1CF316E-6A40-11E2-A826-00155D41C919%22)->ResumeReplication()“>\WW2008R2DC1\root\microsoftdfs:DfsrVolumeConfig.VolumeGuid=”F1CF316E-6A40-11E2-A826-00155D41C919“)->ResumeReplication() 方法执行成功。Out Parameters:__PARAMETERS{ ReturnValue = 0;};
对于 PowerShell 用户,必须向 WMIC 命令添加单引号才能从 PowerShell 运行它,如下所示:
wmic /namespace:\\root\microsoftdfs pathdfsrVolumeConfig where 'volumeGuid="F1CF316E-6A40-11E2-A826-00155D41C919"' call ResumeReplication
步骤 3:检查是否已记录事件 ID 2212 和 2214
检查是否已在运行恢复复制命令的服务器上记录事件 ID 2212 和 2214。 如果必须在脏关闭后重新初始化复制文件夹(或执行初始同步),请执行以下步骤,请对恢复进行其他说明:
- 禁用复制的文件夹。
- 使用在 DFSR 服务器部分记录的事件 ID 2213 的上述恢复步骤中的步骤启用复制。
- 启用复制的文件夹。
如果在运行 WMIC 命令之前禁用并启用复制的文件夹,则不会发生初始同步,因为卷管理器处于脱机状态。
减少脏关机几率的步骤
在 Windows 中,服务在收到关闭通知后有 30 秒关闭。 30 秒后,服务控制管理器强制关闭服务。 如果涉及 DFSR 服务,则繁忙的中心服务器可能需要 30 秒以上才能将未完成的更改提交到数据库。 如果 DFSR 服务未在服务控制管理器分配的 30 秒内提交所有更改,则服务将被强行关闭,这会触发脏关闭恢复。
电源中断或任何其他硬重启 DFSR 服务器也可能触发脏关机恢复。 若要减少脏关机的可能性,请确保 DFSR 服务器已连接到不间断电源(UPS),以使其正常关闭。
延长服务关闭时间
在需要 30 秒以上的关闭的 DFSR 服务器上,可以使用 WaitToKillServiceTimeout 值延长允许所有服务关闭的时间段。
需要更多时间关闭的 DSFR 服务器通常会在大多数服务器重启或重启服务时记录事件 2212 和 2214。 或者,如果启用了从脏关闭自动恢复,则会在每次服务器重启或重启 DFSR 服务时记录事件 2213。
- 路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control - 值:WaitToKillServiceTimeout
- 类型:字符串
- 数据:300000
此值以毫秒为单位。 此示例显示 5 分钟的关闭时间。 该值可以根据需要增加或减少。 此值影响所有服务,而不仅仅是 DFSR。 建议将此值设置为仍然为 DFSR 提供足够时间以干净关闭的最低值。 使用以下过程来确定 DFSR 服务需要关闭多长时间:
-
添加 WaitToKillServiceTimeout 注册表值,其设置为 300000 毫秒(5 分钟)。 重启服务器以启用设置。
重要
请参阅以下有关 WaitToKillServiceTimeOut 部分的注释,了解如何安装2549760。
-
针对 DFSR 事件 1006(DFSR 正在停止)和 1008(已停止 DFSR)监视服务器的后续几次重启。 请注意在事件 1006 和 1008 之间经过的时间。
-
通过修改 WaitToKillServiceTimeout 值来调整允许关闭的时间,以便更紧密地反映 DSFR 需要清理关闭的实际时间。
有关 WaitToKillServiceTimeOut 的说明
- 重新启动服务器或连续多次重启 DFSR 不会提供 DFSR 需要关闭的时间的足够示例。 必须允许服务时间运行一段时间才能累积挂起的数据库事务。
- WaitToKillServiceTimeout 设置的最大值为 1 小时。 如果设置超过一小时,SCM 将还原为服务关闭的默认设置 30 秒。
- 若要确保 SCM 在 WaitToKillServiceTimeout 设置所关注的位置正常工作,请确保在 Windows Server 2008 R2 上安装修补程序 2549760 。