为什么主机从睡眠中唤醒后我的 Debian Hyper-V 来宾没有更新时间?

amn*_*amn 5 debian virtualization hyper-v

我有一台安装并启用了 Hyper-V 的 Windows 10 物理(笔记本电脑)主机,但我遇到了一个问题,对于一个相当普通的 Debian 9 来宾安装,在主机休眠一段时间后时钟没有更新,并且然后再次被唤醒(我假设来宾与主机暂停)。

据我了解,这个问题应该可以平凡的Hyper-V的集成服务,其处理同时启用了在虚拟机设置(所有集成服务启用)和来宾(所有hv_*模块被加载),和其中一个这些服务同步时间并确保它保持最新。

那么,为什么它在我的情况下不起作用?我没有安装 NTP,我不想,部分是原则上(专门解决 Hyper-V 的问题),部分是因为来宾必须在没有 Internet 连接和远程主机服务的情况下工作。我的主机时区明确设置为 UTC(我经常使用笔记本电脑漫游,既不需要也不希望将访客与特定时区静态关联),并TZ根据需要使用变量。

我已经阅读了 Microsoft 的大量页面和一些 Altaro 文章,这些文章似乎非常有见地,但未能在这方面启发我。我还在 Stack Exchange 网站上阅读了许多答案,其中一半建议使用 NTP,另一半主要是关于其他事情,或者只是不提供所需的建议。

我知道当主机从睡眠中恢复时,可能有一些信号不会在来宾上触发(例如,如果您通过 ACPI 使来宾进入睡眠状态就会如此),但这不应该是一个解决了问题?

我可以在哪些地方排除故障,以确保我可以可靠地关闭笔记本电脑的盖子(使其进入睡眠状态),并期望以最新的时间戳返回给我的客人?

and*_*ndy 4

检查这个:https: //github.com/clearlinux/distribution/issues/39

可行的修复方法是禁用所有其他时间服务并使用 chrony,而不是仅配置 LIS hyperv 时间源 ptp0。

确保 LIS 时间源可通过以下方式获得:

ls /sys/class/ptp
ptp0

cat /sys/class/ptp/ptp0/clock_name 
hyperv
Run Code Online (Sandbox Code Playgroud)

现在为您的发行版安装 chrony 并检查配置位置,然后创建与您的 ptp 相对应的配置?设备位置。

/etc/chrony.conf:

refclock PHC /dev/ptp0 trust
makestep 1 -1
Run Code Online (Sandbox Code Playgroud)

这将允许 chrony 通过 hyperv ptp0 源以一个大步骤更正系统时间。

通过以下方式可以将轮询时间缩短至 4 秒(2 的幂):

refclock PHC /dev/ptp0 trust poll 2
Run Code Online (Sandbox Code Playgroud)

PS:这似乎是 hyperv/LIS 中的一个错误/疏忽。