VirtualBox: How to sync host and guest time?

The time in my guest VM is faster than the host time by about 20-30 minutes. What can can I do so that the time in the guest is the same as on the host?


For a Linux host, first install the DKMS (Dynamic Kernel Module Support) package on the guest machine (source):

$ sudo apt-get install dkms

Then install Guest Additions into guest system:

$ sudo apt-get install virtualbox-guest-additions

Also, here are descriptions of some commands to tune VirtualBox time synchronization.


The following setup allows my guest to reliably maintain a time that is accurate to within 1 second of my host. It is tested with the host running VirtualBox 4.3.26 and the guest running the same version of VirtualBox Guest Additions. As for VirtualBox 5.x, I haven't thus far had any need to make these configuration changes; the time has automatically been in sync.

Reference: https://www.virtualbox.org/manual/ch09.html#changetimesync


On the host, list VMs to ascertain the name of the relevant VM.

$ VBoxManage list vms | awk '{print $1}'
"CentOS6"

On the host, configure time synchronization parameters for the guest by running the commands below. First set $VMNAME with its appropriate value. If the value of $VMNAME contains a space, it should of course be quoted.

$ VBoxManage guestproperty set ${VMNAME} "/VirtualBox/GuestAdd/VBoxService/--timesync-interval" 10000
$ VBoxManage guestproperty set ${VMNAME} "/VirtualBox/GuestAdd/VBoxService/--timesync-min-adjust" 100
$ VBoxManage guestproperty set ${VMNAME} "/VirtualBox/GuestAdd/VBoxService/--timesync-set-on-restore" 1
$ VBoxManage guestproperty set ${VMNAME} "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold" 1000

The values of the time parameters above have been constrained to multiples of 10. It may be tempting to set timesync-set-threshold to 10000 instead, but this can risk a rather drastic time change when it's triggered, and may therefore break applications.


On the host, view the updated relevant values for the guest. These can be reconfirmed at any time.

$ VBoxManage guestproperty enumerate ${VMNAME} | grep timesync | sort
Name: /VirtualBox/GuestAdd/VBoxService/--timesync-interval, value: 10000, timestamp: 1402110397618554000, flags:
Name: /VirtualBox/GuestAdd/VBoxService/--timesync-min-adjust, value: 100, timestamp: 1402110777505446000, flags:
Name: /VirtualBox/GuestAdd/VBoxService/--timesync-set-on-restore, value: 1, timestamp: 1402110904964050000, flags:
Name: /VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold, value: 1000, timestamp: 1402110660162295000, flags:

On the guest, stop and disable all internal NTP and related timekeeping services. They should not be used as they are likely to interfere with VirtualBox. On a CentOS 6 guest:

$ sudo /sbin/chkconfig ntpd off
$ /sbin/chkconfig --list | grep ntp
ntpd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
ntpdate         0:off   1:off   2:off   3:off   4:off   5:off   6:off

On the guest, restart the service named vboxadd-service. Assuming Guest Additions was previously installed, this service would have been installed and enabled. On a CentOS 6 guest:

$ /sbin/service vboxadd-service status
Checking for VBoxService ...running
$ sudo /sbin/service vboxadd-service restart
Stopping VirtualBox Guest Addition service                 [  OK  ]
Starting VirtualBox Guest Addition service                 [  OK  ]
$ /sbin/service vboxadd-service status
Checking for VBoxService ...running

If the time on the guest is not yet synced, reboot the guest.