我已经将 Ubuntu 服务器 12.04 安装为 KVM 主机,并创建了也运行 Ubuntu 服务器 12.04 的 Ubuntu 客户机。服务器处于 AST 时区,即 UTC + 3 小时。在客户机中正确设置时间后,date -s
我可以随意重新启动客户机,并在重新启动之间保留正确的时间。
但是,如果重新启动 KVM 主机(主机在重新启动之间没有时间问题),那么一旦我启动 KVM 客户机,它们都会比正确时间晚 3 个小时。以下输出显示主机和客户机上的系统时间和硬件时钟时间。
root@kvmhost1:~# date
Wed Jan 16 14:10:38 AST 2013
root@kvmhost1:~# hwclock
Wed 16 Jan 2013 02:10:40 PM AST -0.187899 seconds
root@kvmguest1:~# date
Wed Jan 16 11:10:45 AST 2013
root@kvmguest1:~# hwclock
Wed 16 Jan 2013 02:10:47 PM AST -0.521226 seconds
一旦客户端的时间被纠正,他们就可以重新启动,而不会出现时间错误的变化。
我尝试过/测试过的东西
- 我在三台独立的物理服务器上尝试过,都表现出完全相同的行为。
- 其中一个 kvm 主机正在运行 Ubuntu 11.04,并且发生了同样的行为。
- 我考虑过使用时间服务器来解决这个问题,但是Ubuntu 建议不要在 KVM 客户机上使用 NTP。关于这一点,有一个很好的讨论KVM 来宾时钟同步,这表明在客户机中运行的 kvm-clock 应该处理这个问题。
- 我已经在客户端运行
dmesg | grep kvm-clock
并且确认 kvm 时钟正在使用中。
更新
--localtime
我使用命令中的选项将硬件时钟设置为使用本地时间hwclock
。同样的问题仍然存在。不过,输出更清晰一些,因为软件和硬件时钟设置了相同的时间。
root@kvmhost1:~# date
Wed Jan 16 15:50:26 AST 2013
root@kvmhost1:~# hwclock
Wed 16 Jan 2013 03:50:29 PM AST -0.750378 seconds
root@kvmguest1:~# date
Wed Jan 16 12:50:29 AST 2013
root@kvmguest1:~# hwclock
Wed 16 Jan 2013 12:50:31 PM AST -0.849677 seconds
解决方案
迈克尔·汉普顿 (Michael Hampton) 的以下回答解决了这个问题。客户机是使用 kickstart 文件创建的,默认情况下不会将硬件时钟设置为 UTC 时间。我在 kickstart 时区选项中添加了 --utc 选项,解决了这个问题。kickstart 选项现在如下:
timezone --utc Asia/Bahrain
答案1
看来您以某种方式安装了客户机,使其认为硬件时钟是本地时间。 KVM 客户机应始终将其硬件时钟视为 UTC 时间,除非它们是 Windows 客户机(但即使是 Windows 客户机也可以设置为 UTC 硬件时钟)...
编辑/etc/default/rcS
文件,并将其更改UTC=no
为UTC=yes
。然后重置您的访客时钟。