Windows libvirt / QEMU guest虚拟机在重启后将时区重置为主机时区

问题描述

我已经使用libvirt / QEMU创建了Windows 2012虚拟机。运行VM的虚拟机管理程序(裸机)基于UTC时区,但Windows VM中的时区应为Arizona时区。我可以使用libvirt xml中的以下计时器定义来解决时间漂移问题

<clock offset='localtime'>
    <timer name='hypervclock' present='yes'/>
    <timer name='rtc' tickpolicy='catchup' track='guest'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
</clock>

但是,一旦我重新启动虚拟机,时间会切换回UTC,但时区仍然显示为亚利桑那州时区,这是错误的。时间和时区都应该在亚利桑那州。我是否缺少任何libvirt指令来避免这种情况?还有其他人面临同样的问题吗?

解决方法

<clock offset='localtime'>指示QEMU设置来宾时间以匹配主持人的本地时间视图。由于您说的主机本地时间设置为UTC,因此每次引导时,来宾时间都将设置为UTC。您在guest虚拟机中所做的更改只会持续到下一次冷重启为止。

您希望访客时区与主机时区不同,因此需要“ timzeone”偏移而不是“ localtime”偏移。 IIUC,亚利桑那州(Arizone)正在MST中,因此应该执行<clock offset='timezone' timezone='mst'>这样的工作。另请参见https://libvirt.org/formatdomain.html#time-keeping