articles:hyperv_sync_time_after_sleep

Windows 10 Hyper-Vでスリープ復帰後にゲストの時刻を同期する方法

ゲストOSが実行中に、Windows 10がスリープして復帰すると、ゲストOSは時刻がスリープ前のままで復帰する。

Hyper-VはゲストOSの起動時と再開時に時刻をホストOSと同期する。 ホストOSのスリープ復帰時には同期しない。 そのためホストOSがスリープするたびに時刻のずれが大きくなっていく。

ゲストOSがLinuxで時刻同期をxntpdやchronyで行っていても、 時刻の差が大きいとデフォルトの設定では時刻の同期を行わずプロセスが異常終了するため、 問題の解決とはならない。

VMを再開すると時刻が同期されることを利用する。

PowerShellで実行中のVMを一時停止して再開するコマンドはこちら:

Get-VM | Where-Object {$_.State -eq 'Running'} | Suspend-VM -Passthru | Resume-VM

これを、Windowsのタスクスケジューラでスリープ復帰時に実行する。

全般

VMの操作は管理者権限が必要なので、最上位の特権で実行するをチェックする。

トリガー

トリガーの種類はイベント時、ログ: システム、ソース: Power-Troubleshooter、イベントID: 1

操作

プログラムはPowerShell、引数は-Command “Get-VM | Where-Object {$_.State -eq 'Running'} | Suspend-VM -Passthru | Resume-VM”

条件

ホストOSで一回設定すると全てのVMで使用でき、 ゲストOSでNTPによる時刻同期を設定してなくても同期できる。

参考:

xntpdの場合はtinker panic 0chronyの場合はmakestep 1 -1を設定すると 時刻のずれが大きくても異常終了せずに時刻を同期する。

  • 最終更新: 2020-07-18 04:58
  • by nabium