57

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

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

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

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

PS:Guest Additions 已安装并与所使用的 VirtualBox 版本相匹配。

4

6 回答 6

61

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

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

您可以使用以下命令减少阈值(即 10 秒):

VBoxManage guestproperty set <vm-name> "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold" 10000
于 2013-10-21T10:48:24.147 回答
28

总结@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) 时同步时钟

于 2016-06-21T13:45:31.107 回答
6

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

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

    disable auth
    broadcastclient
    

然后,重新ntp启动service ntp restart

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

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

      广播 192.168.123.255

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

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

于 2015-12-10T09:11:56.203 回答
4

为了让 timesync 正常工作,我必须这样做:

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

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

于 2016-04-30T20:23:34.003 回答
3

我找到了一个解决方案:

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

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

于 2017-09-29T02:41:07.487 回答
1

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

于 2013-10-21T09:48:36.573 回答