Windows 10 Hyper-Vでスリープ復帰後にゲストの時刻を同期する方法
ゲストOSが実行中に、Windows 10がスリープして復帰すると、ゲストOSは時刻がスリープ前のままで復帰する。
Hyper-VはゲストOSの起動時と再開時に時刻をホストOSと同期する。 ホストOSのスリープ復帰時には同期しない。 そのためホストOSがスリープするたびに時刻のずれが大きくなっていく。
ゲストOSがLinuxで時刻同期をxntpdやchronyで行っていても、 時刻の差が大きいとデフォルトの設定では時刻の同期を行わずプロセスが異常終了するため、 問題の解決とはならない。
対処法1: ホストOSのスリープ復帰時にVMを一時停止/再開する
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による時刻同期を設定してなくても同期できる。
参考: