题外话:晓原理、知架构、查日志是排错的三件法宝
今天在DC1上新建并链接了一个组策略对像,在客户端刷新时,却报下面的错误:
“处理组策略失败。Windows无法应用组策略对象LDAP….”如下图所示:
于是在客户端用\\domain.com访问,发现\\domain.com\SYSVOL\domain.com\policies下面没有上面报错的组策略对象。
这是怎么一回事呢,ping domain.com发现地址解析到了DC2的IP,于是我访问编辑组策略的DC1,发现上面是有这个对象的。
到这里可以明显看到,SYSVOL复制出现了问题(SYSVOL在win2008后通过DFSR服务进行复制),几台域控制器上的SYSVOL内容不一致,由于组策略对象的部分内容是放在SYSVOL里面的,而应用此组策略时如果访问到了DC2,由于里面没此GPO对象,肯定就会报错。
于是进入DC1,打开事件查看器,在“应用程序和服务日志\DFS Replication”下面发现了4012错误,里面内容如下:
DFS 复制服务已停止在以下本地路径的文件夹上进行复制: C:\Windows\SYSVOL\domain。 该服务器已经与其他伙伴断开连接 201 天, 这已超出了 MaxOfflineTimeInDays 参数(60)所允许的时间。 因此,DFS 复制将该文件夹中的数据看作已过时, 更正此错误之前,该服务器不会复制此文件夹。 若要恢复该文件夹的复制,请使用 DFS 管理管理单元 从复制组中删除此服务器,然后再将其添加到此组中。 这会导致服务器执行初始同步任务,该任务会将过时的数据 替换为复制组其他成员中的最新数据。 其他信息: 错误: 9061 (复制的文件夹脱机时间太长。) 已复制的文件夹名称: SYSVOL Share 已复制的文件夹 ID: AD12EBEB-2E85-4BD3-A628-29EA5535B77B 复制组名称: Domain System Volume 复制组 ID: B0987B25-DB56-4C9E-8EB5-325597966A24 成员 ID: C59B6E88-FC22-4A66-B78F-C8F2F0EBA70E |
根据上面的建议,是将本服务器从复制组先删除再加入,并从其他成员复制数据,但这里一定要注意,千万不要根据上面的建议来做,因为现在域服务器DC1上面有最新的数据,它应该是权威源,是数据从它复制到其他服务器,所以我们应该把这台DC1手动设置成权威服务器(也就是源头),步骤如下:
步骤一:先禁用DC1的DFSR复制 的服务(服务里面可以找到DFSR服务停用),同时配置msDFSR-Enabled=FALSE,设置 禁用复制 。 打开ADSIEDIT.MSC,定位到 CN=SYSVOL Subscription,CN=Domain System Volume,CN=DFSR-LocalSettings,CN=<the server name>,OU=Domain Controllers,DC=<domain> 这里的<the server name>是要设置成的权威服务器,也就是DC1,通常这是域中的PDC模拟器角色服务器,因为里面有最新的SYSVOL内容,我这里也是。 修改下面两个值 msDFSR-Enabled=FALSE 意思是禁用复制 msDFSR-options=1 步骤二:禁用其他所有域控制器的DFSR复制 与步骤一同样的位置,选相应的域服务器。 msDFSR-Enabled=FALSE (msDFSR-options 不用动它) 步骤三:进行一个AD复制,同步上面的值。 步骤四:启动权威DC1上的DFSR服务。 步骤五:在第一步步骤同样的位置启用 主域控 权威域控制器的复制,这里是要辅域控从主域控进行复制。 msDFSR-Enabled=TRUE 步骤六:再次进行AD复制。 步骤七:在dc1上的CMD运行DFSRDIAG POLLAD 步骤八:启用其他 辅域控 非权威域控制器上的DFSR服务和复制。 msDFSR-Enabled=TRUE 步骤九:在其他非权威DC 上的CMD运行DFSRDIAG POLLAD。 |
以上做完,允许DFS测试报告,可能还会存在以下错误
可以尝试重新启动以下DFSR服务,过多几分钟再看看结果
查看DFSR同步状态
For /f %i IN ('dsquery server -o rdn') do @echo %i && @wmic /node:"%i" /namespace:\\root\microsoftdfs path dfsrreplicatedfolderinfo WHERE replicatedfoldername='SYSVOL share' get replicationgroupname,replicatedfoldername,state
state状态,可以参考我另外的文章。
查看SYSVOL共享
For /f %i IN ('dsquery server -o rdn') do @echo %i && @(net view \\%i | find "SYSVOL") & echo
完成检查日志没有再报错,再在客户运行组策略更新也正常了。
附:你可以在功能组件的远程服务器管理工具中安装DFS管理工具,然后在管理工具中可以看到直观的情况,还可以运行诊断报告。