如何在VirtualBox内同步主机唤醒时间?

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

假设虚拟机正在运行。 然后,主机进入待机模式。 再次唤醒后,虚拟机仍在运行,但内部时钟继续在主机closures时停止。 所以这主要是指:让主机hibernate15分钟,再次唤醒,然后虚拟机的内部时钟延迟15分钟。

我怎样才能解决这个问题(手动设置时间不是一个显而易见的select;-))? 当主机系统改变其状态时,是否有办法在Vagrant虚拟机内运行脚本?

我已经阅读了文档 ,默认情况下,VirtualBox Guest Additions每隔10秒就会与主机同步一次。 显然这没有发生,但我找不到任何地方,它被禁用。 那么有什么想法?

PS:Guest Additions已安装,并且与正在使用的VirtualBox版本相匹配。

文档在这里缺less一些细节。

什么VirtualBox每10秒只是轻微的调整(如0.005秒)。 只有在时差达到阈值(默认20分钟)时才会进行“真实”重新同步。

你可以用下面的命令减lessthresold(即10秒):

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

总结@zilupe和@Slobodan Kovacevic的答案,解决方法是将以下内容添加到Vagrantfile

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

每次当desync> 1s(1000ms)时,这将同步时钟,

我给出了另一个解决scheme来同步guest和host之间的时间而不安装Virtualbox guest添加:

  1. 在你的guest虚拟机上安装ntp,并在/etc/ntp.conf注释这些行:

     disable auth broadcastclient 

然后,用service ntp restart启动ntp

  1. 在您的主机上进行广播:

    • 对于Linux用户,编辑/etc/ntp.conf文件并configuration广播(您必须修改IP):

      广播192.168.123.255

    • 对于Windows用户,请激活“ Windows时间 ”服务。 然后你可以阅读这个页面来configuration它来广播时间

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

对于我来得到timesync工作,我不得不这样做:

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

它打开时间同步。 出于某种原因,这是closures的。

您可以在VM中安装VirtualBox Guest Additions,以便通过VB自动同步时间。

我find一个解决scheme:

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

之后,每次login到linux系统时,都会同步一次。