对 Windows Time Service w32time 问题进行故障处理
摘要: Active Directory 域中的 Windows Time Service (w32time) 问题;如何使用 w32tm 重新同步修复同步时间、配置时间服务器以及在 Windows 服务器上使用 w32tm 命令。
症状
在 Active Directory 中,Windows 时间服务非常重要。默认情况下,Kerberos 身份验证要求在纠正时区差异和夏令时时,域中所有机器上的时钟同步到彼此五分钟的差距内。时钟超出此范围的计算机无法进行身份验证,也无法访问域资源。
原因
在 AD 域中,具有 PDC Emulator FSMO 角色的域控制器 (DC) 是整个域的主时间服务器。但是,这并不意味着域中的每个机器都直接与 PDC Emulator 同步其时钟。其他 DC 与 PDC Emulator 同步,而成员服务器和客户端可以与任何 DC 同步。在此层次结构中,PDC Emulator 应该是配置为与外部时间源(例如公用 NTP 服务器)同步的唯一机器。应将域中的其他一切配置为与 AD 同步。任何其他配置都可能导致时钟同步丢失。
请参阅 Microsoft 文档 Windows 时间服务 的工作原理,了解有关 Windows 时间服务工作方式的详细信息。
解决方案
确定问题的范围。
解决 Windows Time service 问题的第一步是确定受影响机器的数量。如果仅一台机器上的时间不正确,则修复问题的步骤与修复整个域范围的时间问题所需的步骤不同。
如果只有少数计算机受到影响:
- 如果受影响的计算机运行的是 Windows Vista 或更高版本,请运行
w32tm /query /source在命令提示符下确定受影响机器的时间源。如果在 PDC Emulator 上运行此命令,则仅应列出外部时间源;否则,命令应输出域中 DC 的名称。 - 如果您主要使用 CIFS/NFS 来写入备份,则应使用
w32tm /query /status命令还会显示机器的时间源以及其他可能有用的信息。如果您主要使用 CIFS/NFS 来写入备份,则应使用/verbose交换机提供了更多信息。与第一个命令一样,这些交换机仅在运行 Windows Vista 或更高版本的机器上可用。 - 如果列出了正确的时间源,则可以使用
w32tm /resync尝试将机器的时钟与时间源重新同步。添加/rediscover切换到此命令会导致计算机首先尝试发现网络时间源,然后尝试重新同步。 - 要更改机器的时间源,您可以使用以下两个命令之一:
w32tm /config /syncfromflags:DOMHIER /update将计算机配置为使用域层次结构 (AD) 作为其时间源。w32tm /config /syncfromflags:MANUAL /manualpeerlist:<list> /update将计算机配置为使用<list>作为其时间源。
提醒:如果在<list>,它们必须用空格分隔,并且整个列表必须用引号括起来。
如果整个域受到影响:
- 如果该域中所有机器上的时间均不正确,则 PDC Emulator 可能是问题的根源。运行
netdom query fsmo命令来确定哪个 DC 具有 PDC Emulator 角色。 - 在该节点上运行
w32tm /query /source通过 PDC Emulator 上的命令提示符,确保将其配置为与外部时间源同步。PDC Emulator 不应被配置为与域同步,因为它是域的主时间源。 - 如果 PDC Emulator 是虚拟机 (VM),则禁用来宾-主机时钟同步。执行此操作的过程取决于虚拟主机上运行的操作系统。
- 要将 PDC Emulator 配置为与一个或多个外部时间服务器同步,请使用以下命令:
w32tm /config /syncfromflags:MANUAL /manualpeerlist:<list> /update提醒:如果在<list>,它们必须用空格分隔,并且整个列表必须用引号括起来。
Windows Time service 注册表设置
如果您主要使用 CIFS/NFS 来写入备份,则应使用 w32tm 上述过程中指定的命令会更改 Windows Time service 注册表值,这些值都位于以下注册表项下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time
可以手动设置这些值,而不是使用 w32tm 命令。如果您选择这样做,以下 Microsoft 文档可能会非常有用:
- Windows Time Service 工具和设置
(包括有关注册表设置的部分)
- 如何在 Windows 服务器中配置权威时间服务器
组政策
如果您使用 w32tm 命令或使用注册表,但这些更改根本不生效或仅在短时间内生效,然后恢复到以前的值,组策略对象 (GPO) 可能会覆盖您的更改。Windows 时间服务的组策略设置包括许多可以使用注册表或 w32tm 命令。这些设置可在以下位置找到:
Computer Configuration\Policies\Administrative Templates\System\Windows Time Service
将 Windows Time service 注册表值重置为默认设置。
如果所有其他操作均失败,此过程会将 Windows 时间服务重置为其默认设置:
- 打开服务控制台并停止 Windows 时间服务(或运行
net stop w32time从命令提示符(如果它正在运行)。 - 打开提升的命令提示符并运行
w32tm /unregister从注册表中删除 Windows 时间服务。服务控制台中不再列出该服务。 - 在该节点上运行
w32tm /register使用默认注册表设置重新创建服务。 - 进行任何必要的注册表更改,然后在服务控制台中或使用
net start w32time命令指定可选的 spindle-group 参数,您可以实现这一点。
其他信息
- 如何知道 Windows 时间服务是否正在运行?
services.msc),找到 Windows 时间,并验证其状态是否为 “正在运行”。您还可以检查 “启动类型 ”以确保其设置为 “自动 ”或 “手动”。
有关快速故障排除提示,请参阅 Meinberg 文章 Windows Time Service (w32time) Synchronization
- Windows 时间服务有多准确?
有关详细信息,请参阅 Microsoft 文章 配置系统以实现高精度 。