コマンドプロンプトから時刻合わせを試みたけれども狙い通りの挙動にならない

OS: Windows 10 Pro version 1809

主として使用しているパソコンの時刻が日本標準時から1.2秒も進んでいた。コマンドプロンプトからチャッと時刻を同期して精密に時計を合わせようと試みたけれどもWindowsの時刻同期は挙動が掴み切れず、生半可な知見で臨んだところ忽ち返り討ちである。

図1. 時刻が1.2秒ずれている様子

w32tmコマンド一度きりの実施で時刻が確り同期される場合もあれば、何遍繰り返してもちっとも同期されないケースもあったから困る。まずはコマンドプロンプトを管理者として実行するところから始めねばならない。一先ず時刻同期の様子を確認しようと次のコマンドを流すとこういう有様である。

>w32tm /query /status
次のエラーが発生しました。 そのサービスを開始できませんでした。 (0x80070426)

Windows Time サービス(w32time)が実行されていないとw32tmコマンドの主たる機能が取り扱えないようである。w32timeを開始するにはこうである。

>net start w32time
Windows Time サービスを開始します.
Windows Time サービスは正常に開始されました。

改めて w32tm /query /status を実行すると時刻の同期にCMOS Clockを使うことを発見した。おおかたマザーボードに搭載されているCMOSの時計を照らし合わせに用いるという設定であるとおもわれる。これをNICTが公開しているNTPサーバ ntp.nict.jp に切り替える。

>w32tm /query /status
閏インジケーター: 3 (同期未実行)
階層: 0 (未指定)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.0000000s
ルート分散: 0.0000000s
参照 ID: 0x00000000 (未指定)
最終正常同期時刻: 未指定
ソース: Local CMOS Clock
ポーリング間隔: 10 (1024s)

NTPサーバの指定に続けてカンマを配して同期モードを16進数でセットできる風情である。1,2,4はSymmetric ActiveとかいうNTPサーバ同士でやり取りを交わすためのモードであった。クライアントとして使うPCには相応しくないとおもってClientモードを用いる0x8を記述した。

>w32tm /config /update /manualpeerlist:ntp.nict.jp,0x8 /syncfromflags:manual
コマンドは正しく完了しました。

>w32tm /query /status | find "ntp.nict.jp"
ソース: ntp.nict.jp,0x8

そうしたら /resync オプションで以って手づから時刻を同期させる。

>w32tm /resync
再同期コマンドをローカル コンピューターに送信しています
コマンドは正しく完了しました。

ズレが解消されたか確認をすると何ら効果を齎していない風情であった。幾度か実施を繰り返して見たけれどもほとんど動きが見られない。此は如何にとおもって調べるとじわじわと時刻を調整してゆくslewモードと一息に時刻を同期させるstepモードが用意されていた。諸条件を満たすとslewモードになり、そうでなければstepモードになるという仕組みである。

>w32tm /monitor /computers:ntp.nict.jp /nowarn
ntp.nict.jp[133.243.238.163:123]:
    ICMP: 25ms 遅延
    NTP: -1.1755319s ローカル コンピューターの時刻からのオフセット
         RefID: 'NICT' [0x5443494E]
         階層: 1
図2. 時刻がずれたままの様子

slewモードの条件を満たしたから時計がすぐに合わないのだといっときは納得したけれども腰を据えて条件式を計算したところ、ぜんぜん要件を満足しないからstepモードでパッとずれが解消されることが期待される筈であるのにどうも挙動がわからない。

>w32tm /debug /enable /file:"%userprofile%\desktop\w32tm.txt" /size:0 /entries:0-300
プライベート ログを有効にするコマンドをローカル コンピューターに送信しています...
コマンドは正しく完了しました。

>w32tm /resync
再同期コマンドをローカル コンピューターに送信しています
コマンドは正しく完了しました。

>w32tm /debug /disable
プライベート ログを無効にするコマンドをローカル コンピューターに送信しています...コマンドは正しく完了しました。

デバッグログを出力するよう設定して時刻同期を実施した際の内容を眺めたけれどもなんだかむつかしくてslewモードで時計を合わせようとしている情勢で或ることくらいしか掴めない。

もうすっかり厭になってしまって捨て鉢で時刻の自動設定をオフにしてから時刻を徒に大きくずらして改めて時刻を自動的に設定する設定をオンに切り替えたところ、何がどう作用したかは知れないけれども期せずしてstepモードのような働きによって時刻のぶれが慎ましい値へ落ち着いた。

>w32tm /stripchart /computer:ntp.nict.jp /period:5
図3. 大きく時刻をずらしてから時刻同期する様子

たいへん強引なやり方であるから決して常用できないけれども、退っ引きならない情勢であるときは不承不承この方法を選択せざるを得ない。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください