强制 Ubuntu 客户机从 VirtualBox 上的 Windows 主机更新日期

强制 Ubuntu 客户机从 VirtualBox 上的 Windows 主机更新日期

我使用 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

但它似乎工作得更好一些(如果你的主机时钟正确的话)。

相关内容