主机从休眠状态恢复后,如何正确同步作为虚拟客户机运行的 Linux 中的时间?

主机从休眠状态恢复后,如何正确同步作为虚拟客户机运行的 Linux 中的时间?

我使用多个虚拟盒进行开发,当我推送 git 提交时,正确的时间和日期对我来说很重要。我不会关闭我的主机 - 它运行了几个月而没有重新启动。我只在晚上和周末让它休眠。这给我的客户操作系统(来自 turnkeylinux.org 的所有 debian)带来了奇怪的问题 - 一段时间后,客户操作系统的日期会偏离几天。

尽管所有客户机都使用 NTP,但如果检测到日期偏差较大(几个小时似乎就足够了),它就无法工作。有没有办法强制 NTP 同步,即使时间差很大?或者有任何其他解决方案可以在主机从休眠状态恢复后恢复客户机上的正确日期和时间?

答案1

简单来说:安装(ntp 包和)VirtualBox Guest Additions:)

  • 主机:Windows 6.1 SP1,x64,3GB
  • VirtualBox:v4.3.6
  • 客户:Debian 7.3,32 位,768 KB

从 VirtualBox 中,将文件附加Oracle\VirtualBox\VBoxGuestAdditions.iso到客户系统(设置/存储)并以 root 身份

cd /media/cdrom0
sh ./VBoxLinuxAdditions.run

VirtualBox 帮助中的“9.4. Linux 和 Solaris 客户机的高级配置”描述了这些步骤,但我必须linux-headers-3.2.0-4-486先安装该软件包。
然后,以 root 身份,

/usr/lib/VBoxGuestAdditions/vboxadd setup
/usr/lib/VBoxGuestAdditions/vboxadd-service setup
/usr/lib/VBoxGuestAdditions/vboxadd setup

之后,重新启动客户端。

我已经通过退出客户系统(Alt+ F4,然后命令 VirtualBox 保存客户机的状态),等待 5 分钟,然后重新启动客户系统进行了检查
。起初,时钟从之前的值恢复,但几秒钟后一切正常(时钟同步)

答案2

NTP 服务器并非设计用于在虚拟机内部运行。它需要高分辨率系统时钟,并且对时钟中断的响应时间要达到高精度。NTP 客户端可以运行在某些虚拟化解决方案中。在机器的基本操作系统上运行 NTP,然后让各种客户操作系统利用系统上创建的良好时钟。即便这样也还不够,因为您可能需要启用其他工具或内核选项,以便虚拟机客户端能够充分同步其虚拟时钟与物理系统时钟。

来源:支持 NTP 已知问题

从该声明中,并读到您的重要部分是 git 提交时间,那么编写一个预提交钩子来从您的主机收集时间就很简单了,您只需询问您的主机即可获得该时间:

ssh hostmachine "date +%Y%m%d%H%M%s"

相关内容