====== Windows 10 Hyper-Vでスリープ復帰後にゲストの時刻を同期する方法 ====== {{tag>hyperv}} ゲスト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のタスクスケジューラでスリープ復帰時に実行する。 {{:articles:hyperv_sync_time_after_sleep_01.png?nolink|全般}} VMの操作は管理者権限が必要なので、''最上位の特権で実行する''をチェックする。 {{:articles:hyperv_sync_time_after_sleep_02.png?nolink|トリガー}} トリガーの種類は''イベント時''、ログ: ''システム''、ソース: ''Power-Troubleshooter''、イベントID: ''1''。 {{:articles:hyperv_sync_time_after_sleep_03.png?nolink|操作}} プログラムは''PowerShell''、引数は''-Command "Get-VM | Where-Object {$_.State -eq 'Running'} | Suspend-VM -Passthru | Resume-VM"''。 {{:articles:hyperv_sync_time_after_sleep_04.png?nolink|条件}} ホストOSで一回設定すると全てのVMで使用でき、 ゲストOSでNTPによる時刻同期を設定してなくても同期できる。 参考: * https://www.torutk.com/projects/swe/wiki/Windows_Hyper-V * https://www.hide10.com/archives/26323 ===== 対処法2: ゲストOSのNTPの設定を変更する ===== [[http://doc.ntp.org/current-stable/miscopt.html#tinker|xntpd]]の場合は''tinker panic 0''、 [[https://chrony.tuxfamily.org/faq.html#_is_code_chronyd_code_allowed_to_step_the_system_clock|chrony]]の場合は''makestep 1 -1''を設定すると 時刻のずれが大きくても異常終了せずに時刻を同期する。