ホストがスリープ状態から復帰した後、Debian Hyper-V ゲストが時間を更新しないのはなぜですか?

ホストがスリープ状態から復帰した後、Debian Hyper-V ゲストが時間を更新しないのはなぜですか?

Hyper-V がインストールされ有効になっている Windows 10 物理 (ラップトップ) ホストを所有していますが、ごく普通の Debian 9 ゲスト インストールの場合、ホストがしばらくスリープ状態になってから再び起動された後 (ゲストがホストとともに一時停止されていると想定)、時計が更新されないという問題が発生しています。

私の理解する限り、この問題はHyper-V統合サービスによって簡単に処理されるはずです。仮想マシン設定 (すべての統合サービスが有効) とゲスト (すべてのhv_*モジュールがロードされている) の両方で有効になっており、サービスの 1 つが時間を同期して最新の状態に維持します。

では、なぜ私の場合はうまくいかないのでしょうか? NTP はインストールしておらず、インストールするつもりもありません。これは、一部は原則として (Hyper-V の問題をトラブルシューティングするため)、一部はゲストがインターネット接続やリモート ホスト サービスなしで動作する必要があるためです。私のホストのタイムゾーンは明示的に UTC に設定されており (ラップトップを持って頻繁に移動するため、ゲストを特定のタイムゾーンに静的に関連付ける必要も希望もありません)、TZ代わりに必要に応じて変数を使用します。

私は Microsoft のページや Altaro の記事をいくつか読みましたが、非常に情報に富んでいるように見えましたが、この点については理解できませんでした。また、Stack Exchange サイトでいくつかの回答を読みましたが、その半分は NTP の使用を推奨していますが、残りの半分は主に他のことに関するものであったり、必要なアドバイスを提供していないものでした。

ホストがスリープ状態から復帰したときにゲスト上で発火しない信号があるかもしれないことは理解していますが (たとえば、ACPI を介してゲストをスリープ状態にした場合など)、これは解決済みの問題ではないでしょうか?

ノートパソコンのカバーを確実に閉じて(スリープ状態にして)、最新のタイムスタンプでゲストのところに戻ることができるようにするには、どこで何をトラブルシューティングすればよいですか?

答え1

これをチェックして:参考:

有効な修正方法は、LIS hyperv タイムソース ptp0 のみを構成するのではなく、他のすべての時間サービスを無効にして chrony を使用することです。

LIS タイムソースが次の方法で利用可能であることを確認します。

ls /sys/class/ptp
ptp0

cat /sys/class/ptp/ptp0/clock_name 
hyperv

次に、ディストリビューションに chrony をインストールし、構成の場所を確認してから、ptp? デバイスの場所に対応する構成を作成します。

/etc/chrony.conf:

refclock PHC /dev/ptp0 trust
makestep 1 -1

これにより、chrony は 1 つの大きなステップで hyperv ptp0 ソースを介してシステム時間を修正できるようになります。

ポーリング時間は、次の方法で 4 秒 (2 の累乗) まで短縮できます。

refclock PHC /dev/ptp0 trust poll 2

PS: これは、hyperv/LIS のバグ/見落としのようです。

関連情報