手邊有幾台 Windows 測試主機出現系統時間不準的狀況。主機隸屬同一 AD 網域,理論上會自動向 DC 校時,但這幾台主機時鐘有快有慢,彼此甚至差三分鐘以上(最多到 207 秒),對照 Log 記錄或資料寫入時間變得極為困難,讓我沒法置之不理。

撈過界進場研究了一下,學到新知識,也解決了問題。

處理 Windows 時間同步問題,基本上全靠萬用工具 - w32tmWindows Time Service (W32Time),常用指令如下:

# 查看本機時鐘與校時來源的時差
w32tm /query /status
# 立即與校時來源同步時間
w32tm /resync
# 查看網域 DC 與本機時鐘的時差
w32tm /monitor
# 查看指定 NTP 伺服器與本機時鐘的時差
w32tm /monitor /computers:watch.stdtime.gov.tw
# 設定網域 DC 作為同步來源 (需重啟 W32Time 服務)
w32tm /config /syncfromflags:domhier /update
# 指定 NTP 伺服器作為同步來源 (需重啟 W32Time 服務)
w32tm /config /manualpeerlist:watch.stdtime.gov.tw /syncfromflags:manual /update
# 重啟 W32Time 服務
net stop w32time
net start w32time
# 註冊 W32Time 服務,寫入預設 Registry
w32tm /register 
# 取消註冊 W32Time 服務,清除設定相關 Registry
w32tm /unregister

這幾台機器使用 DC 作為校時來源,W32Time 服務也有執行,理論上會系統時間會定期與 DC 同步,就算沒有,手動執行 w32tm /resysnc 也該被校正。但排除原本設定有誤,我在每台機器重新設定 w32tm /config /syncfromflags:domhier /update 以 DC 為校時來源,重啟 W32Time 服務並 w32tm /resync 後,大部分機器時間已正常(註:當系統時間差異較大時,不會一次調到正確時間,會分次逐步靠攏),但獨獨有一台快了 170 秒,怎麼 resync 都校正不回來。

仔細查看 w32tm /query /configuration 顯示的系統設定,發現一處可疑:

問題主機是台 VM,TimeProviders 有個 VMICTimeProviver,Enabled 旗標為 1,我不知道會不會對同步造成影響,但既然要以 DC 時間為準,把它停用可以排除干擾,應該是有益無害。修改 Registry 將 Enabled 改成 0:

重啟 W32Time 服務再跑一次 resync,觀察到時間誤差逐漸縮小,走針的 Windows 總算回歸正途。


Comments

# by 馬克

VMware的guest在reboot時,還是會跟底層校一次時,如果底層的時間有可能不對的話,建議乾脆從底層關掉校時選項。

# by Jeffrey

to 馬克,感謝分享(筆記)。

# by Leo

To 黑大, 實在感謝經常分享技術文章,讓我可以常常過來竊取經驗與知識。

# by Ross Chen

To 馬克:如果這樣的話,那 host 如果有跟 NTP 對時呢?

Post a comment


37 - 22 =