问题: ntpd
,当安装在运行 Ubuntu 的虚拟机上时(我曾在具有各种虚拟机管理程序(如 KVM 和 VMware ESX)的主机上遇到过这种情况),似乎容易出现严重的时钟漂移。我还没有找到任何好的方法,而且似乎并不是每个人都遇到过这种情况。
问题:我该如何防止这种情况发生?是否有任何设置/etc/ntp.conf
可以强制ntpd
更积极地同步虚拟机内的时间,或者我应该在每隔一段时间运行的作业ntpdate -b timeserver
中使用?cron
ntpdate -b
在 Ubuntu 虚拟机中使用时,建议使用哪种方法来避免跳跃或时钟漂移?
附注:我在运行 AIX 和 Solaris 的 vios(IBM 虚拟机管理程序)从属机器上也看到了类似的影响。因此,这个问题确实存在,而且似乎与虚拟机管理程序总体上有关。
答案1
我在运行 VMware ESX 的 Linux 机器上观察到了类似的症状。看来,这种偏差(每天几分钟)是由于 VM 内部的 NTP 和 VMware 工具都提供了时间同步。我们通过禁用VMware 工具属性(在 ESX 中的 VM 属性中)。之后,NTP 能够使时钟与远程时间服务器保持同步。如果您希望手动编辑文件.vmx
,放tools.syncTime = "0"
。
停止虚拟机内的 NTP 并让工具同步时间可能也有效,至少可以纠正服务器漂移。ESX 本身可以运行 NTP 守护程序。VMware 的计时最佳实践建议使用 NTP 而不是 VMWare Tools 进行时间同步。
VMware 发布了一份冗长的有关 VMware 虚拟机计时的论文。最相关的段落是“Clocksource Kernels”小节。VMware KB 也有Linux 客户机中计时故障排除技巧。
答案2
至少在 VirtualBox 中,你可以……我之前遇到过时间同步问题,但是调整 Guest Additions 时间同步参数似乎解决了这个问题。
以下是手册中的相关文字:
调整 Guest Additions 时间同步参数
VirtualBox Guest Additions 确保客户机的系统时间与主机时间同步。有几个参数可以调整。可以使用以下命令为特定 VM 设置参数:
VBoxManage guestproperty set "VM name" "/VirtualBox/GuestAdd/VBoxService/PARAMETER" VALUE
其中 PARAMETER 是下列之一:
--timesync-interval
指定与主机同步时间的间隔。默认值为 10000 毫秒(10 秒)。
--timesync-min-adjust
以毫秒为单位测量的最小绝对漂移值,用于进行调整。在 OS/2 上默认值为 1000 毫秒,在其他地方默认值为 100 毫秒。
--timesync-latency-factor
与时间查询延迟相乘以计算动态最小调整时间的因子。默认值为 8 倍,具体含义为:测量确定主机时间所需的时间(客户机必须联系 VM 主机服务,这可能需要一些时间),将此值乘以 8,仅当主机和客户机之间的时间差大于此值时才进行调整。否则不进行任何时间调整。
--timesync-max-latency
接受的最大主机计时器查询延迟。默认值为 250 毫秒。
--timesync-set-threshold
绝对漂移阈值(以毫秒为单位)从此处开始设置时间,而不是尝试平滑地调整时间。默认值为 20 分钟。
--timesync-set-start
设置启动时间同步服务的时间。
--timesync-set-on-restore 0|1
传递 1 作为参数时设置虚拟机从保存状态恢复后的时间(默认)。传递 0 可禁用。在后一种情况下,时间将平稳调整,这可能需要很长时间。
VBoxService
所有这些参数也可以指定为命令行参数。禁用 Guest Additions 时间同步
安装并启动后,VirtualBox Guest Additions 将尝试将客户机时间与主机时间同步。可以通过禁止客户机服务读取主机时钟来防止这种情况:
VBoxManage setextradata "VM name" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled"