ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

Hyper-V 時刻同期 仮想マシンのRTCまたはリアルタイムクロックに関する情報

Hyper-V 時刻同期 仮想マシンのRTCまたはリアルタイムクロックに関する情報になります。かなり詳しく書かれている英語の情報があったので、時刻同期について調べている方にはかなり参考になると思います。

 

情報元はこちら※元は英語です

 

Hyper-Vでの時刻同期

https://docs.microsoft.com/ja-jp/archive/blogs/virtual_pc_guy/time-synchronization-in-hyper-v?WT.mc_id=EM-MVP-8322

 

情報の抜粋です。

 

問題#1-実行中の仮想マシンは時間を追跡できなくなります。

 

すべてのコンピューターにはハードウェアクロック(RTCまたはリアルタイムクロックと呼ばれます)が含まれていますが、ほとんどのオペレーティングシステムはこのクロックに依存していません。代わりに、(起動時に)この時計から時間を1回読み取り、独自の内部ルーチンを使用して、経過した時間を計算します。

 

問題は、これらの内部ルーチンが、基盤となるハードウェアの動作(割り込みが配信される頻度など)について仮定を立てており、これらの仮定は、仮想マシン内で物事が異なるという事実を考慮していないことです。複数の仮想マシンを同じ物理ハードウェアで実行するようにスケジュールする必要があるという事実は、これらの基盤となるシステムに常に小さな違いをもたらします。この結果、時間は仮想マシン内でドリフトしているように見えます。

 

ここで注意する必要があることの1つは、仮想マシンの時間がドリフトする速度が、Hyper-Vサーバーの合計システム負荷の影響を受けることです。より多くのことを実行する仮想マシンが増えると、時間のドリフトが速くなります。

仮想マシンのタイムドリフトに対処するには、信頼できるソースから定期的にリアルタイムを取得し、仮想マシンの時刻を更新するプロセスが必要です。

Hyper-Vは、これを行うための時刻同期統合サービスを提供します。これを行う方法は、管理オペレーティングシステムから時間の読み取り値を取得し、それらをゲストオペレーティングシステムに送信することです。ゲストオペレーティングシステム内に入ると、これらの時間の読み取り値は、Windowsタイムプロバイダーの形式でWindowsタイムキーピングインフラストラクチャに配信されます。

 

 

 

問題#2 –保存された仮想マシン/スナップショットは、復元時に間違った時刻になります。

保存された状態またはスナップショットから仮想マシンを復元する場合、ゲストオペレーティングシステムのメモリと実行状態を元に戻し、保存された状態/スナップショットが取得されたときの状態と正確に一致させます。これには、ゲストオペレーティングシステムによって計算された時間が含まれます。したがって、スナップショットが1か月前に取得された場合、日時はまだ1か月前であると報告します。

興味深いことに、この時点で、システムRTCの正しい(いくつかの注意点があります)時刻を報告します。ただし、残念ながら、ゲストオペレーティングシステムは重要なことが発生したことを認識していません。そのため、RTCにアクセスして確認することはなく、内部で計算された時間で続行します。

これに対処するために、Hyper-V時刻同期統合サービスは、保存された状態またはスナップショットから戻ってきたことを検出し、時刻を修正します。これは、Windowsが提供する通常のユーザーモードインターフェイスを介して時間変更要求を発行することによって行われます。これにより、ユーザーが座って手動で時間を変更したように見えます。この方法では、管理オペレーティングシステムとゲストオペレーティングシステムタイムゾーンの違いも正しく調整されます。

 

 

問題#3 –仮想マシンの起動時に正しい「RTC値」がない

 

仮想マシンには「バッテリー」がありません。仮想マシンがオフになっている場合、その時間を追跡するコンポーネントはありません。代わりに、仮想マシンを起動するたびに、管理オペレーティングシステムから時間を取得し、これを仮想マシンのリアルタイムクロックに入れます。

これは、Hyper-V時刻同期統合サーバーを使用せずに実行されます(統合サービスが読み込まれるずっと前に発生します)。

このアプローチの欠点は、管理オペレーティングシステムとゲストオペレーティングシステムの間の潜在的タイムゾーンの違いが考慮されていないことです。これは、「タイムゾーン」が仮想マシンで実行されるソフトウェアの構成要素であり、仮想ハードウェアとはまったく通信されないためです。つまり、仮想マシンを起動するときに、ゲストオペレーティングシステム仮想マシンがどのタイムゾーンにあると信じているかを知る方法はありません。

この問題に対する部分的な緩和策の1つは、Hyper-V時刻同期コンポーネントが初めて読み込まれるときに、時刻の初期ユーザーモードセットを実行して、時刻ができるだけ早く修正されるようにすることです(同じ手法を使用)問題#2で説明したように)。

 

仮想マシン内でドメインコントローラーを実行している場合は、Hyper-Vの時刻同期を有効のままにしておくことをお勧めしますが、外部の時刻ソースも設定することをお勧めします。とあります。

 

Hyper-Vの時刻がずれることがたまにあるようですが、その際に、Hyper-V時刻同期プロバイダーが使われている場合は、部分的に無効にすることも可能なようなので検討できます。