家のWindows PCは最近NASの仕事も別のホストに奪われたのでほぼテレビの録画のためだけに存在している。だから24/365稼働もすでにしていない。
そのテレビ録画だが、なんか番組の頭が1,2分くらい撮れていない。数秒程度なら現在のテレビ放送の仕組みとしては理解できなくもないが、1分を超えるのは尋常じゃない。マザボの電池切れのときのような数時間ドカンとズレるとか何年も巻き戻るとかじゃないからクロックオシレータがおかしいのかしら。
と、思って調べたら、直近のWindowsクリーンインストールの後に時刻同期設定をするのを忘れてた。
Q. 何でWindowsの時刻同期設定を忘れたら時間が狂うの?
A. 現在のWindowsの初期値では時刻同期してくれないから。
いやいやtime.windows.comと定期的に同期するよね?
それは7日ごとの決まった時間(日曜日の深夜1時)に運良くWindowsが起動していて、且つtime.windows.comが正常に時刻を返してくれたらというハードルの高い条件付きよ。こんなので時刻合わせできると期待しちゃダメ。
そこで、時刻同期する設定を行う。
変なトリガー起動サービス削除
まず、Windowsに最初から設定されている週1実行のトリガー起動サービスを削除する。こいつが有効だと週1回の時刻同期の後にActive Directoryドメイン非参加のPCではw32timeサービスが(動いていたら)停められてしまう。マイクロソフトらしいなんとも意味不明なアホアホ仕様。
Windows10を最新状態に更新しているなら「スタートボタン」を左クリック、「Windowsシステムツール」を左クリック、「コマンドプロンプト」を右クリック、「その他」「管理者として実行」で管理者権限のコマンドプロンブトを開く。 Windows10が古い状態ならスタートボタンを右クリックして「コマンドプロンプト(管理者)」をクリック。
以下この記事中のコマンドはPowerShellでは絶対に実行しないこと。
C:\Windows\system32> sc triggerinfo w32time delete
[SC] ChangeServiceConfig2 SUCCESS
緑字のコマンドを入力して[Enter]、SUCCESSが返れば成功。
w32timeサービスの自動開始設定
C:\Windows\system32> sc config w32time start= delayed-auto
[SC] ChangeServiceConfig SUCCESS
これでw32timeのサービス起動設定が「自動(遅延実行)」になった。
確認コマンドを実行。
C:\Windows\system32> sc qc w32time
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: w32time
TYPE : 20 WIN32_SHARE_PROCESS
START_TYPE : 2 AUTO_START (DELAYED)
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : C:\Windows\system32\svchost.exe -k LocalService
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : Windows Time
DEPENDENCIES :
SERVICE_START_NAME : NT AUTHORITY\LocalService
START_TYPE が AUTO_START (DELAYED) になっていればOK.
w32timeサービスを起動
C:\Windows\system32> sc start w32time
SERVICE_NAME: w32time
TYPE : 30 WIN32
STATE : 2 START_PENDING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x7d0
PID : 4772
FLAGS :
このコマンドでw32timeサービスを起動。すぐに結果を返してくれるのは良いが、まだSTATEがSTART_PENDINGになっている。
C:\Windows\system32> sc query w32time
SERVICE_NAME: w32time
TYPE : 30 WIN32
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
このコマンドはw32timeサービスの起動コマンド実行から10秒以上経ってから実行。STATEがRUNNINGになっていれば「実行中」になっている。これでOK.
個人的にはWindowsのGUI画面の情報なんか全然信用してなくてCUIの文字情報を盲目的に信じる傾向があるが、世の中には逆の人もいるということで、一応Windows窓アプリの画面で確認。
スタートボタンを左クリック、「Windows 管理ツール」から「サービス」を起動して右列のリストを下にスクロールして「Windows Time」を探す。
状態が「実行中」でスタートアップの種類が「自動(遅延開始)」になっている筈。これだけのこと。
同期先指定
C:\Windows\system32> w32tm /config /manualpeerlist:"192.168.0.1,0x9" コマンドは正しく完了しました。 C:\Windows\system32> w32tm /config /syncfromflags:manual /update コマンドは正しく完了しました。
上のコマンドの192.168.0.1の部分は同期させたいNTPサーバのアドレスに置き換えて。LAN内にNTPサーバがあるならそのアドレスを指定。家庭用ルーターにNTPサーバ機能があって有効にしているならそのルーターのアドレスを指定する。
NTPソースは複数指定できるので「192.168.0.1,0x9 192.168.0.2,0x2」のように半角スペースを挟んで指定する。
上では2つのw32tm /config を実行しているが、オプションを纏めて1回の実行でも構わない。
基本的に家庭や職場・学校の個々の端末から公開NTPサーバに時刻を取りに行くのは無しの方向で。特に福岡大のNTPサーバは今後時期不明に停止するとのことなので設定しないこと。家庭内・組織内にNTPサーバなんか無いよということであればヘタに公開NTPサーバを指定するよりは寧ろ初期値のtime.windows.comにしたままの方がマシ。(こっちは混んでもmicrosoftの自業自得)
どうしてもtime.windows.com以外の公開NTPサーバから時刻を貰わなくてはならない場合は同期頻度を1日1回(orそれ以下)に下げること。
以前(一時期だけど) INTAA.NETのNTPサーバをpool.ntp.orgに参加させたらNTPサーバとルーターが悲鳴を上げたので公開NTPサーバって大変だなって思った。だから公開NTPサーバの負荷にならないよう皆で協力しようね。
サーバアドレスの後の,0x?はフラグ。
- 0x1: 指定するとSpecialInterval(同期間隔固定)、指定しないとMaxPollIntervalとMinPollIntervalを使用
- 0x2: UseAsFallbackOnly (フォールバック用NTPサーバのフラグに付ける)
- 0x4: SymmetricActive (相互同期モード NTPサーバ用かと)
- 0x8: Client (NTPクライアントとして要求)
- 0x9: 0x1 + 0x8 (NTPクライアントとして固定間隔で時刻を取る)
- 0xa: 0x2 + 0x8 (NTPクライアントとして代替NTPから時刻を取る)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\ParametersのNtpServer文字列値。だからレジストリファイルをダブルクリックで設定を適用という方法もある。(下の方にダウンロードリンク)
1 2 3 4 5 | Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"NtpServer"="192.168.0.1,0x9"
"Type"="NTP"
|
同期間隔指定
- SpecialPollInterval : 固定間隔 Windows独自の設定
- MaxPollInterval : 最大間隔
- MinPollInterval : 最小間隔
3つの値の内、SpecialPollIntervalとMaxPollInterval&MinPollIntervalは排他設定っぽいけど実際の動作は違う(不明な)ようなので注意。
SpecialPollIntervalは値(秒)毎に時刻同期するという指定で、10進数の秒で指定する。
MaxPollInterval(最大間隔)とMinPollInterval(最小間隔) の値は単純な秒数ではなく2の「べき乗」の秒数なので値が7なら7秒ではなく27(=128秒: 2分と少し)、値が8なら28(=256秒 : 約4分ちょっと)になるので注意。
- 29 : 512秒 (約8分半)
- 210 : 1024秒 (約17分)
- 211 : 2048秒 (約34分)
- 212 : 4096秒 (約1時間8分)
- 213 : 8192秒 (約2時間16分半)
- 214 : 16384秒 (約4時間33分)
- 215 : 32768秒 (約9時間6分)
- 216 : 65536秒 (約18時間12分)
- 217 : 131072秒 (約1日と12時間24分半)
- 218 : 262144秒 (約3日と49分)
1 2 3 4 | Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient]
"SpecialPollInterval"=dword:00000384
|
16進数で384は10進数で900 = 15分。30分はdword:00000708、1時間はdword:0000e10、2時間はdword:00001c20 。
1 2 3 4 5 | Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"MaxPollInterval"=dword:0000000f
"MinPollInterval"=dword:0000000a
|
dword:0000000fは10進数では15でこの値では215秒の意味なので9時間余り、dword:0000000aは10進数では10で210秒(約17分)、これが初期値。 SpecialPollIntervalを使うつもりでもMaxPollInterval, MinPollIntervalに影響されるようなので、SpecialPollIntervalと矛盾しない範囲でそれぞれ設定しておく。SpecialPollIntervalがMaxPollInterval&MinPollIntervalの値の範囲内にあるようにすると矛盾しない。
レジストリファイル
レジストリを変更するコマンドもあるが、間違ったレジストリのコマンドが通ってしまうので怖い、同様にレジストリエディタで直に変更もあまり好ましく思っていないので、レジストリファイルを使って登録することにしている。(次回以降のクリーンインストール後の設定でも使えるし)まぁ、コマンドをバッチファイルでも良いんだけど。
- ntp_server_name.reg NTPサーバ指定用レジストリ
- ntp_interval.reg ポーリング間隔指定用レジストリ
「がとらぼ」のウェブサーバーではレジストリファイルをクリックするとテキストファイルとして表示されるようになっているので上のリンクを右クリックしてファイルとして保存する。
ダウンロードしたらメモ帳やエディタで開いて必要に応じて値の変更を行ってから上書き保存し、ファイルをダブルクリックするとレジストリが適用される。
ローカルグループポリシーエディタで変更
Windows 10 Proエディション以上の場合はローカルグループポリシーエディタでの設定も可(ただし、前述のNTPサーバ指定とSpecialPollIntervalだけ)。
ローカルグループポリシーエディタの左列から「コンピューターの構成」「管理用テンプレート」「システム」「Windows タイムサービス」「タイム プロバイダー」を辿る。
右列から「Windows NTPクライアントを構成する」をダブルクリック
上部の「有効」ラジオボタンを選択する。
NtpServerにNTPサーバとフラグを指定する。(前述参照)
SpecialPollIntervalの秒数を指定。(普通の10進数の整数)
「適用」「OK」を押す。
同様の手順で1つ前の画像の右列「Windows NTPクライアントを有効にする」の項目の上部の「有効」ラジオボタンを選択して適用・OKを押す。
確認
C:\Windows\system32> w32tm /query /status /verbose
閏インジケーター: 0 (警告なし)
階層: 4 (二次参照 - (S)NTP で同期)
精度: -23 (ティックごとに 119.209ns)
ルート遅延: 0.1493977s
ルート分散: 8.3389868s
参照 ID: 0xC0A80001 (ソース IP: 192.168.0.1)
最終正常同期時刻: 2018/03/04 19:18:20
ソース: 192.168.0.1,0x9
ポーリング間隔: 10 (1024s)
フェーズ オフセット: 0.4989077s
クロック レート: 0.0156250s
State Machine: 1 (保留)
タイム ソース フラグ: 0 (なし)
サーバーのロール: 0 (なし)
最終同期エラー: 0 (コマンドは正しく完了しました。)
最終正常同期時刻からの時間: 171.9005943s
コマンドプロンプトだとこんな感じ。
指定はSpecialPollInterval 900秒(15分)の筈だけどポーリング間隔は210(=1024)秒で約17分になってる。いろいろ試したけど2nな値にしかならないのでSpecialPollIntervalが使われないのは何でかしら。なんかドキュメントどおりじゃなくて納得できないけど、そういうものなのかな、所詮Windowsだし。というか「固定間隔」というWindows独自の変なのは使えない方が良いのか・・
一応、GUI画面でも確認しておく。
デスクトップの時計をクリックし、「日付と時刻の設定」をクリックする。
下にスクロールして、「日付、時刻、地域の追加設定」をクリックする。
「日付と時刻」または、「日付と時刻の設定」をクリックする。
「日付と時刻」窓の上部の「インターネット時刻」タブを選択する。
指定したNTPサーバと同期できていること、次回の同期予定日時と前回正常に同期した日時を比較して指定どおりかそれに近い間隔になっていることを確認する。
この画面の「設定の変更」を触るとここまで行った変更が上書きされる可能性があるので手を付けないのが無難。
関連記事:- Tiny 11をMicrosoftと通信させない名前解決変更
- マイクロソフト PCマネージャというアプリを触ってみた
- Windows 11のシステム要件を満たさないPCでWindows11の大型アップデートを適用
- Windows 11でWindows Updateの自動更新を停止する
- Windows 11でWindows Updateによる更新を手動で停める (後編)
- Windows 11でWindows Updateによる更新を手動で停める (前編)
- Windows 11のシステム要件を満たさないPCでWindows10からWindows11にアップグレード
- WindowsでもUnbound (Remote controlの準備)
- Windows 11リリース (例のごとくシステム要件を満たさないPCにインストール)
- Androidスマホ画面をWindowsで表示 (ワイヤレスディスプレイ プロジェクション)
- Windows 11上で「このPCは現在、Windows 11システム要件を満たしていません」
- MS公式誰でもDLできるWindows 11 インサイダー版を古いPCにインストールと休止無効化設定
- Windows IMEで半角/全角キーの割り当てをIMEオフだけに変更(Linuxも)
- Windows 11システム要件に満たないPCにISOファイル無改造でインストール
- Windows 11上で「このPCではWindows 11を実行できません」
- Windows 11を9年前の超非力なノートPCにインストールしてみた
- 情報セキュリティ Windows 10でUSBメモリの自動実行を不可にする
- 情報セキュリティ Windows 10でUSBメモリの読み書きを不可にする
- Windows 10を旧型ノートPCにクリーンインストールしてみた
- DVDFab 11がリリースされた
- WinlogbeatでWindowsイベントログを可視化 後編
- WinlogbeatでWindowsイベントログを可視化 中編
- WinlogbeatでWindowsイベントログを可視化 前編
- Windows 10のメールでZ-Push (Exchange)を利用する
- Chrome OS (Chromium OS)を触ってみた
- Windows 10の時刻同期設定
- Windowsで写真現像 darktable 2.4
- 音楽プレーヤー Plexamp
- どうしてもWindowsの共有フォルダが見えない対処
- Windows 10 Fall Creators Update