在Hyper-V服务器上设置NTP

我在Hyper-V主机和客户端上遇到NTP设置问题。 我没有使用域控制器(几乎所有的build议是给予我没有使用的DC)。

在所有服务器上,我使用Windows时钟设置ntp客户端名称(右键单击,调整date/时间,Internet时间,更改设置,inputNTP服务器名称)。

这似乎没有工作。 或者说,每个星期一凌晨01:00,时间被强制调整(导致各种问题,例如数据库备份被破坏)。

我已经搞砸了w32tm(读出状态,configuration,试图取消注册和重新注册)。 我终于得到了w32tm / query / config来确认它使用了ntp服务器:

我已经有w32tm / query / source说这个:

本地CMOS时钟time.windows.com,0x9(实际上是一个不同的主机,但不pipe这个报告)自由运行的系统时钟VM IC时间同步提供程序(仅适用于Hyper-V客户端)

我终于有了w32tm报告“time.windows.com,0x9”,但后来它自动变成了“自由运行系统时钟”。 我不知道为什么。 我认为自由奔跑不是我想要的。

我想我在Hyper-V主机和客户端上的时间设置完全丢失了,真的需要一些帮助。 我find了一些指南,但它们相互矛盾(或者只是谈论域控制器设置)。

在Hyper-V客户端上的w32tm有这样的configuration:

C:\Windows\system32>w32tm /query /configuration [Configuration] EventLogFlags: 2 (Local) AnnounceFlags: 10 (Local) TimeJumpAuditOffset: 28800 (Local) MinPollInterval: 10 (Local) MaxPollInterval: 15 (Local) MaxNegPhaseCorrection: 54000 (Local) MaxPosPhaseCorrection: 54000 (Local) MaxAllowedPhaseOffset: 1 (Local) FrequencyCorrectRate: 4 (Local) PollAdjustFactor: 5 (Local) LargePhaseOffset: 50000000 (Local) SpikeWatchPeriod: 900 (Local) LocalClockDispersion: 10 (Local) HoldPeriod: 5 (Local) PhaseCorrectRate: 1 (Local) UpdateInterval: 360000 (Local) [TimeProviders] NtpClient (Local) DllName: C:\Windows\system32\w32time.DLL (Local) Enabled: 1 (Local) InputProvider: 1 (Local) AllowNonstandardModeCombinations: 1 (Local) ResolvePeerBackoffMinutes: 15 (Local) ResolvePeerBackoffMaxTimes: 7 (Local) CompatibilityFlags: 2147483648 (Local) EventLogFlags: 1 (Local) LargeSampleSkew: 3 (Local) SpecialPollInterval: 604800 (Local) Type: NTP (Local) NtpServer: time.windows.com,0x9 (Local) VMICTimeProvider (Local) DllName: C:\Windows\System32\vmictimeprovider.dll (Local) Enabled: 1 (Local) InputProvider: 1 (Local) NtpServer (Local) DllName: C:\Windows\system32\w32time.DLL (Local) Enabled: 0 (Local) InputProvider: 0 (Local) 

上面的configuration导致了“自由运行系统时钟”,至less我觉得奇怪。

Windows时间和Hyper-V时间同步服务都在运行。

目前没有针对时间服务的组策略。

关于如何解决这个问题的build议?

这就是我最终做的,我假设的是:

Hyper-V主机(物理服务器)被设置为与选定的时间服务器同步,并且每个Hyper-V guest虚拟机被设置为与主机单独同步。 以下更改与默认值不同。

主机设置

首先停止时间服务:

 net stop w32time 

registry更改(基本HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ ):

  • w32time\Config\AnnounceFlags = 10
  • w32time\Parameters\NtpServers = 0.dk.pool.ntp.org,0x1 1.dk.pool.ntp.org,0x1 2.dk.pool.ntp.org,0x1 3.dk.pool.ntp.org,0x1
  • w32time\TimeProviders\NtpClient\SpecialPollInterval = 900 (15分钟)
  • w32time\TimeProviders\NtpServer\Enabled = 1

有些使用AnnounceFlags = 5,但与域控制器(在这种情况下没有设置)的关联导致ntp服务器不宣布自己(观察;不是事实),因此AnnounceFlags被设置为10 (在AnnounceFlags更多)

ntpservers = 0x1使用特殊轮询间隔(而不是标准的ntp轮询间隔)。 (更多在0x1,0x2,0x4和0x8) 。 使用SpecialPollInterval不是必需的,但它似乎被推荐(可能主要是为客人,而不是主机)。 如果您决定不使用SpecialPollInterval,则必须改为限制MinPollInterval和MaxPollInterval。 他们的默认值是10(1024秒)和15(32768秒); 我build议6(64秒)和10(1024秒))。

确保服务器有networking连接时启动时间服务:

 sc triggerinfo w32time start/networkon stop/networkoff 

默认情况下,启动(和停止)与域控制器的时间服务(在此设置中不存在)。 忘记这一步将在每次启动时停止你的时间服务器(在它自动启动后不久)。 这个问题很难跟踪。

然后再次启动服务:

 net start w32time 

现在,主机每15分钟轮询一个ntp时间服务器,并提供其他客户端的ntp服务器。 我有防火墙udp:123,以确保只允许客人进入。

服务器可能需要长达15分钟的时间(SpecialPollInterval),直到它宣布其function作为一个可靠的时间服务器到世界(客人)。 这意味着客人可以在服务开始后15-20分钟自由运行。

来宾设置

客人比主人漂移得多(也相互比较),并且需要相对较短的轮询时间间隔。 由于这一点,使用远程ntp服务器是不理想的,因为我们有一个可靠的ntp服务器(刚刚configuration),我们将使用此(而且仅此)。 客人都可以使用虚拟networking访问主机。

确保Hyper-V时间集成服务已安装并正在运行。 使用此设置,将在虚拟服务器启动时使用,也可从保存恢复时使用。 它不会被用作时间源。

停止时间服务:

 net stop w32time 

进行必要的registry更改(基于HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\ ):

  • w32time\Config\AnnounceFlags = 10
  • w32time\Parameters\NtpServers = 192.168.0.100,0x9
  • w32time\TimeProviders\NtpClient\SpecialPollInterval = 300 (5分钟)
  • w32time\TimeProviders\NtpServer\Enabled = 0
  • w32time\TimeProviders\VMICTimeProvider\Enabled = 0

确保服务器有networking连接时启动时间服务:

 sc triggerinfo w32time start/networkon stop/networkoff 

然后再次启动服务:

 net start w32time 

结论

有了这个设置,时间应该能够很好地控制主机和客人。

对于超v客人有两种select – 启用时间同步并同步到主机(进而可以同步到ntp服务器),或者让每个guest虚拟机直接与NTP进行同步。

要与主机同步,请转至“Hyper-Vpipe理器”,在“集成服务”下,确保选中“时间同步”。 确保客人集成服务已安装(可能删除并重新安装它们),并重置w32time

微软不build议closures时间同步,但它可能会导致你的问题,所以我会试试看。 转到Hyper-Vpipe理器并closures时间同步。 然后像任何独立的物理主机一样configurationw32time。 再一次,在所有的陋习之后,最好先重新设置w32time。

微软的博客对时间同步如何在hyper-v中工作有相当好的描述。 如果你还没有,我会给它一个阅读