我使用 VirtualBox 3 在 Windows 主机上将 Ubuntu Server 作为客户机运行。Ubuntu Server 安装了客户机添加程序。
为了节省使用此图像的时间,我暂停而不是关闭。除了客户机上的时钟日期外,这种方法运行良好。
在客户机恢复后,我是否可以运行一个命令来强制它从底层主机设置时钟?
答案1
如果你将互联网连接路由到客户操作系统,你可以使用ntpdate
它的时钟与特殊的时间服务器同步,例如
sudo ntpdate ntp.ubuntu.com
答案2
由于您有一个 Windows 主机,因此您可以确保您有一个在本地运行的 ntp 服务器:关联
您可以通过运行以下命令来验证服务器是否已打开:
w32tm /query /configuration
请记住,您需要提升权限才能运行此命令。执行此命令后,您将获得一长串配置设置列表。我们特别关注 NtpServer 部分:
NtpServer (Local) DllName: C:\Windows\system32\w32time.dll (Local) Enabled: 1 (Local) InputProvider: 0 (Local) AllowNonstandardModeCombinations: 1 (Local)
第三行将指定 NtpServer(又称“服务器部分”)是否已打开。如果 Enabled 为 1,则表示已打开。如果看到 Enabled 为 0,则表示已关闭。如果您运行的不是 Vista 或 Server 2008,则可以直接查询注册表:
reg query HKLM\system\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer
您应该看到类似以下内容的条目:
Enabled REG_DWORD 0x1
与之前一样,1 表示开启,0 表示关闭。您可以随时通过运行以下命令来开启 NtpServer:
reg add HKLM\system\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer /v Enabled /t REG_DWORD /d 0x1 /f w32tm /config /update
第一个命令将注册表中的 Enabled 标志更改为 1(打开 NtpServer),然后第二个命令将告诉 w32time 服务需要重新读取注册表中的配置,以使更改生效。您可以通过再次调用 w32time 来确认 NtpServer 确实正在运行:
w32tm /query /configuration
然后在你的 Linux 客户端中使用它作为 ntp 服务器
ntpdate 10.0.2.2
(请记住,运行 NAT 时,10.0.2.2
是主机地址)。
我自己正在寻找答案并发现这很有用,因为我们的防火墙阻止了默认的 ntp 端口。
答案3
您应该安装 VirtualBox Guest Additions:https://www.virtualbox.org/manual/ch04.html#idm1933并删除已安装的所有 ntp/ntpd。请注意,Ubuntu/Debian 中有一个名为的软件包virtualbox-guest-dkms
,它将在您升级内核时重新编译,这是安装 Guest Additions 的最佳方式。
即使您长时间冻结虚拟机并从冻结状态重新启动,VirtualBox 也会保持日期调整。NTP 无法做到这一点,因为它的运行必须不间断。
更新:这似乎是一个错误:https://www.virtualbox.org/ticket/16181
更新:我已阅读以下帖子: https://forums.virtualbox.org/viewtopic.php?f=8&t=27279
并且似乎在客人中使用以下内容会有所帮助(这与OP的问题完全相反):
VBoxService --enable-timesync
奇怪的是,即使我设置了--timesync-set-on-restore 1
日志也显示Guest Property: /VirtualBox/GuestAdd/VBoxService/--timesync-set-on-restore not found
。
但它似乎工作得更好一些(如果你的主机时钟正确的话)。