Hri*_*tov 20 virtualization time-synchronization libvirt kvm-virtualization
在我的主机上,我使用 libvirt 和 KVM 来宾。当主机关闭时,libvirt 挂起来宾。当主机启动时,libvirt 恢复来宾。问题是,如果访客暂停并在 24 小时后恢复,那么访客时间是过去的 24 小时。
我认为问题可能出在时钟源上,但它已经设置为“kvm-clock”。
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource
kvm-clock tsc hpet acpi_pm
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
kvm-clock
Run Code Online (Sandbox Code Playgroud)
小智 14
我有同样的问题,我还没有找到好的解决方案。这是我发现的:
问题是恢复后,guest上的系统和硬件时钟时间不同:
root@guest:~# date; hwclock
Sat Oct 11 13:09:38 UTC 2014
Sat Oct 11 13:10:42 2014 -0.454380 seconds
Run Code Online (Sandbox Code Playgroud)
在主持人身上,他们同意:
root@four:~# date; hwclock
Sat Oct 11 13:11:35 UTC 2014
Sat Oct 11 13:11:36 2014 -1.000372 seconds
Run Code Online (Sandbox Code Playgroud)
解决方案是hwclock --hctosys在来宾恢复后运行。但是,我还没有找到仅在来宾系统上进行更改的方法,因为来宾没有注意到它已暂停和恢复。
有可能在来宾上运行称为QEmu 来宾代理的软件,并从主机通知来从来宾硬件时钟更新来宾系统时钟。但是,该页面提到由于 JSON 解析器的问题,来宾代理使主机和来宾容易受到彼此的攻击(至少我相信受影响的代码也在主机上运行,我不确定) )。无论如何,这是设置方法:
如libvirt wiki 中所述,为代理设置 virtio 串行通道(另请参阅libvirt 域格式文档)。
串行通道可用后,在来宾上安装并启动 QEmu 来宾代理。(Debian:. apt-get install --no-install-recommends qemu-guest-agent)
通过挂起、等待和恢复触发时钟偏移。然后在主机上运行以下命令来更正它:virsh qemu-agent-command backup '{"execute":"guest-set-time"}'The wiki page that using virsh qemu-agent-commandis unsupported,但我还没有找到任何其他命令来完成这项工作。
我发现了两个关于在 libvirt 中自动化调用guest-set-timeon resume from suspend 的讨论:
但是,据我所知,还没有实现。
我在Stoney-cloud.org 的 wiki上找到了有关如何向访客代理提交命令的信息。
我也尝试tickpolicy="catchup"在libvirt 计时器配置中进行设置,但这并没有解决问题。
使用代理的另一种方法是使用 ntp 守护程序或从 cron 作业定期调用 ntpdate。我不推荐后者,因为它会导致时间倒退,这会混淆程序(例如,Dovecot IMAP 服务器不会尝试处理倒退的时间并可能终止)。
我尝试了以下 ntp 守护进程:
openntpd:在我的测试中以每 60 分钟约 2 秒的速度非常缓慢地校正时间。时间偏移为 120 秒。此外,如果时间偏移太大,openntpd会抛出错误,并且在我的测试中,在这种情况下完全无法更正时间。openntpd 的优点: 可以在 chroot 中以普通用户身份运行。
chrony:在我的测试中更正了 30 分钟内 120 秒的时间偏移。chrony 可以配置为以普通用户身份运行。chroot 支持没有实现。可以为每个 NTP 服务器配置 NTP 服务器轮询间隔。
systemd-timesyncd:在我的测试中更正了 30 秒内 120 秒的时间偏移。默认以普通用户身份运行。但是,NTP 服务器的轮询间隔增加到 2048 秒,因此在最坏的情况下,直到恢复后 34 分钟才会检测到挂起/恢复。这似乎不可配置。此外,我观察到 timesyncd 将时间倒退,这会导致与在 cron 中调用 ntpdate 相同的问题(见上文)。
chrony 解决了这个问题。Openntpd 不适合,因为它的修正率太低,而且似乎不可配置。systemd-timesyncd 也不能完全解决问题,因为它的轮询间隔是不可配置的。
我测试了以下 Debian 版本的 NTP 守护进程:openntpd 20080406p-10、chrony 1.30-1 和 systemd 215-5+b1。
kvm-clock 在来宾启动时将来宾时间与主机时间同步。您应该在来宾中使用 ntp 客户端,并关闭/启动而不是使用挂起/恢复。
| 归档时间: |
|
| 查看次数: |
19805 次 |
| 最近记录: |