如何在VirtualBox中同步主机唤醒的时间



我正在使用VirtualBox在Vagrant内部运行一个基于Ubuntu 12.04的盒子。到目前为止,一切都很好 - 除了一件事:

假设 VM 正在运行。然后,主机进入待机模式。再次唤醒它后,VM 仍在运行,但其内部时钟在主机关闭时停止的位置继续。所以这基本上意味着:让主机进入睡眠状态 15 分钟,再次唤醒它,然后 VM 的内部时钟会延迟 15 分钟。

我该如何解决这个问题(由于明显的原因,手动设置时间不是一个选项;-))?有没有办法在主机系统更改其状态时在 Vagrant VM 内部运行脚本?

我在文档中读到,默认情况下,VirtualBox Guest 添加每 10 秒与主机同步一次时间。显然这没有发生,但我找不到任何禁用它的地方。那么有什么想法吗?

PS:来宾添加已安装并与正在使用的VirtualBox版本匹配。

文档在此处缺少一些详细信息。

VirtualBox每10秒所做的只是轻微的调整(大约0.005秒)。仅当时差达到阈值(默认为 20 分钟)时,才会完成"真正的"重新同步。

您可以使用以下命令将脱粒时间(即减少到 10 秒):

VBoxManage guestproperty set <vm-name> "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold" 10000

总结@zilupe和@Slobodan科瓦切维奇的答案,解决方案是在Vagrantfile中添加以下内容:

config.vm.provider 'virtualbox' do |vb|
   vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
end

每次不同步变为 1 秒(1000 毫秒)时,这将同步时钟>

我给出了另一种解决方案来同步来宾和主机之间的时间,而无需安装Virtualbox来宾添加:

  1. 在您的客人上安装 NTP,并在/etc/ntp.conf中取消注释这些行:

    disable auth
    broadcastclient
    

然后,使用service ntp restart重新启动ntp

  1. 主机上的活动广播:

    • 对于 Linux 用户,请编辑您的/etc/ntp.conf文件并配置广播(您必须调整 IP):

      广播 192.168.123.255

    • 对于 Windows 用户,请激活"Windows 时间"服务。然后,您可以阅读此页面以将其配置为广播时间

    然后,重新启动主机上的时间服务。

为了让我获得时间同步工作,我必须这样做:

vboxmanage setextradata «machine-name» "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 0

它会打开时间同步。出于某种原因,它关闭了。

我找到了一个解决方案:

  1. 安装 NTPDATE
  2. 为 ntpdate
  3. 添加"s"权限,这允许非 root 用户以 root 用户身份运行 ntpdate: sudo chmod u+s /usr/sbin/ntpdate
  4. ~/.bashrc中添加一行:ntpdate -u ntp.ubuntu.com

之后,每次登录linux系统时,时间都会同步一次。

您可以在虚拟机中安装VirtualBox来宾添加功能,以通过VB自动同步时间。

最新更新