看起来从暂停状态恢复 VirtualBox VM 时不可能进行时间更新。
我在网上阅读了几天并尝试了许多不同的事情后得出了这个结论,但特别是放入tinker panic 0
了 [/etc/ntp.conf] 文件。之后我重新启动了 ntpd 服务,然后通过暂停机器状态几分钟然后恢复来继续测试它。时间从中断处继续(并且不同步)。
很多人以前都问过这个问题,但他们似乎都演变成一些略有不同的变化。
- NTP 在虚拟机中不同步
- https://stackoverflow.com/questions/14629704/ntp-client-undisciplined-local-clock/14634941#14634941
- https://serverfault.com/questions/686087/ntp-running-server-time-is-wrong-on-vm
虚拟机中的我的来宾:CentOS Linux 版本 7.3.1611
[root@CentOS7 ~]# systemctl list-unit-files ntpd*
UNIT FILE STATE
ntpd.service enabled
以防万一有人想知道,我确实禁用了 chrony 服务,这样就不会出现任何冲突,因为由于可用的文档,我更喜欢 NTPD。
[root@CentOS7 ~]# systemctl list-unit-files chron*
UNIT FILE STATE
[email protected] static
chrony-wait.service disabled
chronyd.service disabled
[email protected] disabled
在我考虑 cronjob 之前,有人有什么最后的建议吗?虽然绝对不是最佳的,但至少会起作用。
== 策略更改 - 尝试使用来宾添加来同步主机的时间 ==
因此我按照建议在 VirtualBox 中安装了 Guest Additions iso。令人惊讶的是,在那里遇到了问题。
Unable to insert the virtual optical disk C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso into the machine Centos.
Could not mount the media/drive 'C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso' (VERR_PDM_MEDIA_LOCKED).
Result Code: E_FAIL (0x80004005)
Component: ConsoleWrap
Interface: IConsole {872da645-4a9b-1727-bee2-5585105b9eed}
Callee: IMachine {b2547866-a0a1-4391-8b86-6952d82efaa0}
解决这个问题的方法是启动我的 Centos 桌面 GUI,我在其中看到了 ISO。我右键单击,单击“使用运行软件打开”,安装成功。这是但仍然没有同步时间,即使在禁用 ntpd 后也是如此。
所以我找到了这个线程: https://www.virtualbox.org/ticket/15179
在终端上启动 VBoxService 进程并输出详细信息:
/usr/sbin/VBoxService -fvvv
这导致:
00:00:00.010360 timesync vgsvcTimeSyncWorker: Host: 2017-02-11T21:39:17.257000000Z (MinAdjust: 100 ms)
00:00:00.010428 timesync vgsvcTimeSyncWorker: Guest: - 2017-02-11T21:30:01.781953000Z => 555 475 047 000 ns drift
00:00:00.010491 timesync vgsvcTimeSyncAdjust: adjtime by 555 475 047 000 ns
但它实际上并没有调整时间,或者这可能意味着它以纳秒为单位调整时间,这将永远花费时间。嗯...
作为最后的手段我尝试过:
/usr/sbin/VBoxService -fvvv --timesync-set-on-restore 1
我想我已经在这件事上浪费了足够多的时间了。我将尝试使用 ntpd -g 执行 cronjob。
答案1
可以使用 VirtualBox Guest Additions 从主机同步时间,该功能随我的 VirtualBox 5.1.14 一起提供。请参阅我编辑的问题,了解有关尝试安装来宾添加时解决错误的更多信息。
我的答案的最后结局:我试图将其设为 systemctl 服务,但它不断抛出错误,所以我将其放入我的 .bashrc 文件中:
/usr/sbin/VBoxService --timesync-set-on-restore 1 --timesync-set-threshold 5000 > /dev/null
有用非常很好,并且做了它应该做的事情。