更改日期后恢复为当前日期

更改日期后恢复为当前日期

我有一台运行 x86_64 Ubuntu 22.04 的 VirtualBox VM。每当我尝试将日期更改为以前的日期(在我的情况下是 5 天前)时,日期总会在几秒钟后恢复为当前日期。

以下是我所做的:

我禁用了虚拟机中的两个网络连接,因此无法同步。
在设置面板中,我禁用了所有同步。

我试过了:

  • 在设置面板中更改日期
  • sudo date +%d --set="21"
  • sudo date -s "5 days ago"
  • sudo timedatectl set-time 2022-04-21
  • systemctl stop time-sync.target
  • systemctl stop time-set.target

我曾看到过有关硬件时钟的提及,但我得到的是:

hwclock --show
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --verbose option to see the details of our search for an access method. 

所以我假设虚拟机没有模拟一个。我没有正在运行的进程或安装与“*ntp*”匹配的软件包。

什么是恢复我的日期?

重新启动没有帮助。

(仅供参考,我有一台具有类似行为的 Windows VM,并且网络也断开了。)

编辑1

我在/var/log/syslog改变时间后注意到了这一点:

Apr 26 14:18:36 myvm kernel: [ 5336.382332] 13:18:36.743879 timesync vgsvcTimeSyncWorker: Radical guest time change: 432 002 205 702 000ns (GuestNow=1 650 979 116 743 855 000 ns GuestLast=1 650 547 114 538 153 000 ns fSetTimeLastLoop=true )

接下来是一堆 anacron 作业,但显然与时间无关......

编辑2

答案表明 VirtualBox 确实强制了该日期,但禁用此功能即使重新启动也无济于事;日期总是会恢复。

答案1

您需要在虚拟机关闭的情况下运行两个命令。

第一个是:

VBoxManage setextradata "Virtual Machine" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

对于第二个命令,首先计算您选择的日期和现在之间的毫秒数。

例如,对于日期2003-06-06,打开 PowerShell 并输入:

([datetime]"06/06/2003" - [datetime]::Now)

保留该TotalMilliseconds值并输入以下命令:

VBoxManage modifyvm "Virtual Machine" --biossystemtimeoffset <TotalMilliseconds-value>

来源: 如何在 VirtualBox 中设置 BIOS 日期

答案2

该命令提到:

VBoxManage setextradata "VM name" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

必须在虚拟机关闭的情况下运行,否则不会生效。您可以通过GetHostTimeDisabled在虚拟机的 .vbox XML 文件中搜索来仔细检查(通常在C:\Users\your.username\VirtualBox VMs\YourVM\YourVM.vboxWindows 主机中)。

相关内容