【问题标题】:Windows libvirt/QEMU guest VM resets timezone to host timezone after rebootWindows libvirt/QEMU 来宾虚拟机在重新启动后将时区重置为主机时区
【发布时间】:2020-09-14 08:05:12
【问题描述】:

我使用 libvirt/QEMU 创建了一个 Windows 2012 虚拟机。运行 VM 的虚拟机管理程序(裸机)基于 UTC 时区,但 Windows VM 中的时区应为亚利桑那时区。我能够使用 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 说明来避免这种情况?有没有其他人遇到过同样的问题?

【问题讨论】:

    标签: windows timer qemu libvirt hypervisor


    【解决方案1】:

    &lt;clock offset='localtime'&gt; 指示 QEMU 设置访客时间以匹配主机的本地时间视图。由于您说主机本地时间设置为 UTC,因此每次启动时来宾时间都将设置为 UTC。您在来宾内部所做的更改只会持续到下一次冷重启。

    您希望访客时区与主机时区不同,因此您需要“timzeone”偏移量而不是“localtime”偏移量。 IIUC,Arizone 在 MST,所以这样的事情应该可以完成&lt;clock offset='timezone' timezone='mst'&gt; 的工作。另见https://libvirt.org/formatdomain.html#time-keeping

    【讨论】:

    • 感谢@DanielB 的回复。添加&lt;clock offset='timezone' timezone='mst'&gt; 可以解决时间问题,但我的另一个问题是,如果我不想在 xml 中硬编码时区怎么办?如果我将时区设置为 CEST,那么它应该在下次重新启动后自动拾取 CEST。任何其他时区也是如此。我不想对其进行硬编码,而是应该存储用户选择的内容并在重启后保留它
    • 问题是默认选择时选择时区窗口将更新BIOS时钟到此时钟。大多数其他操作系统不会触及 BIOS 时钟并将其保留为 UTC,只需将操作系统系统时间调整为本地时间即可。您可以强制 Windows 在 UTC wiki.archlinux.org/index.php/System_time#UTC_in_Windows 中保留 BIOS,然后您可以在 libvirt 中使用 &lt;clock offset='utc'&gt; 并完全从来宾控制时区..
    猜你喜欢
    • 2015-10-30
    • 2022-01-17
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2016-09-06
    • 2012-06-21
    相关资源
    最近更新 更多