システム全体の時刻が大きくずれてしまった場合に、システムを停止せず安全に時刻を合わせる方法
1.準備
(1)NTPサーバ(2)WIndowAPI関数「SetSystemTimeAdjustment」を操作可能なツール
(3)各サーバのNTP関連の設定調整
・予期せぬstep動作(時刻を瞬時に合わせる)によるシステムダウンを抑止するようレジストリの設定を行います。
・設定の確認 コマンドプロンプトから下記コマンドを入力
w32tm /query /configuration /verbose
具体的には
slewモード(徐々に時刻を合わせる)での時刻同期を行う限界時刻差を超える前に時刻同期を行わないように設定してしまいます。
slewモードの動作条件は
1.同期先との時刻差 < MaxAllowedPhaseOffset
2.同期先との時刻差 / PhaseCorrectRate/UpdateInterval < System Clock Rate/2
のどちらも満たす必要があります。
System Clock Rateはコマンドプロンプトより
w32tm /query /status /verbose にて確認可能です。
つまり、上記1,2の条件を満たす時刻差以内の値をMaxNegPhageCorrection,MaxPosPhageCorrectionそれぞれに設定しておけば予期せぬSTEP動作によるシステムダウンは防げることになります。
上記のパラメータは実際どこにあるのかというと・・・ 2パターンあります
1.上図のように括弧内がローカルとなっている場合は
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
の配下に各パラメータがあります。
2.括弧内がポリシーとなっている場合は
gpedit.mscを実行後 「コンピュータの構成」⇒「管理用テンプレート」⇒「システム」⇒「Windows タイムサービス」⇒「グローバル構成設定」
の配下に各パラメータがあります。
2.手順
(1)準備したNTPサーバとシステム全体の時刻を同期させます・ドメイン環境であるならば、ドメインサーバをNTPとして時刻同期をとります
*NTPサーバのコマンドプロンプトから
w32tm /config /manualpeerlist:同期先IP /syncfromflags:manual
(2)時刻同期が完了したら、準備したNTPサーバの時刻同期設定を解除します
・時刻の差が10ms程度になっていることを確認すること
*NTPサーバのコマンドプロンプトから
w32tm /stripchart /computer:同期先IP
と入力し時刻の差異を確認する
・下記コマンドにより同期設定を解除します
*NTPサーバのコマンドプロンプトから
w32tm /config /update manualpeerlist:""
(3)時刻同期設定解除後に、準備したツールにて「SetSystemTimeAdjustment」を呼び出しNTPサーバの時刻の速度を調整します。
・ここではtimeadjxというツールを使用しました
*NTPサーバのコマンドプロンプトよりツールのあるフォルダへ移動し
timeadjx get
と入力し、現在の設定を確認する
続いて timeadjx set xxxx
と入力し、時刻の速度を調整します。
現在の設定より小さい値を入れると時刻の進みが遅くなり、大きい値なら早くなります
設定値より1大きい値で時刻を進めるタイミングで100nsほど早く時刻が進みます
・時刻の進行を極端に遅くしたり、早くしたりすると他サーバの時刻同期がうまくいかないため
速度調整は現在値から±10程度にするのが無難
(4)システムの時刻同期先を用意したNTPサーバに変更します
(5)NTPサーバの時刻が標準時間と数10ms程度まで縮まったら一旦(3)の設定を解除します
・信頼できるNTPサーバと接続可能であれば、これ以後はそちらに同期をとるように設定を変更します
・外部の時刻が取れない環境の場合は、なるべく時刻がずれないように時刻の速度を調整をします
以上
0 件のコメント:
コメントを投稿