是否可以让 Virtualbox VM 总是从同一时间启动,如果可以,该怎么做?

是否可以让 Virtualbox VM 总是从同一时间启动,如果可以,该怎么做?

我正在尝试使用 VB 设置 Windows 7 VM 以用于培训课程。我希望虚拟机始终从相同的条件启动,特别是:

  1. VM 总是在同一日期和时间启动
  2. 由于之前的行使,磁盘保持不变

我已经弄清楚了如何将磁盘配置为“不可变”,这应该可以解决 (2) 问题,但我无法让虚拟机同时启动。经过一番寻找,我发现了这一点:

安装并启动后,Virtualbox Guest Additions 将尝试将客户机时间与主机时间同步。可以通过禁止客户机服务读取主机时钟来防止这种情况:

VBoxManage setextradata “虚拟机名称” “VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled” 1

我尝试在虚拟机关闭后再启动它,但似乎没有任何效果。相同的文档页面还提到了参数“--timesync-set-start”,但我没有看到任何关于设置日期和时间格式的提及。欢迎提供帮助。

答案1

您需要执行以下操作以使来宾时间保持原样:

1.禁用虚拟机的时间同步:

1.1 禁用主机与客户机时间同步

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/TM/TSCTiedToExecution" 1

要恢复:

VBoxManage setextradata <YOUR_VM_NAME> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 0

1.2 禁用 GuestAddition 时间同步

使用regedit.exe修改注册表。

找到此分支:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VBoxService

ImagePath更改来自的值

system32\VBoxService.exe

system32\VBoxService.exe --disable-timesync

重新启动您的虚拟机或重新启动服务“VirtualBox Guest Additions Service”。

2.禁用Windows的时间同步。

检查时间设置。禁用互联网时间同步。

来源:http://www.ppq.ch/snippets/15-vobxtime

答案2

如果主机是 Windows/Linux,则以下步骤将有效。

  1. 如果“目标机器”是Windows:打开“目标虚拟机”并应用“控制面板->日期和时间->Internet时间->更改设置->禁用“与Internet时间服务器同步””。

  2. 将以下行复制为主机上的文件“yourfilename.ps1”(Windows)/“yourfilename.sh”(Linux)。按照步骤 3、4、5 中的说明编辑此文件。


主机:WINDOWS

$vbox_path="C:\Program Files\ORACLE\VirtualBox"
$vm_name="Win7_VB"
$start_utc=1444176000

#DO NOT CHANGE ANYTHING BELOW THIS LINE
$now_utc_ms=[int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalMilliseconds
$dif_utc_ms=$start_utc * 1000 - $now_utc_ms
Write-Host "START UTC:" $start_utc*1000 " DIF UTC:" $dif_utc_ms " NEW UTC:" $now_utc_ms

cd $vbox_path
VBoxManage setextradata $vm_name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
VBoxManage setextradata $vm_name "VBoxInternal/TM/TSCTiedToExecution" 1
VBoxManage modifyvm     $vm_name --biossystemtimeoffset $dif_utc_ms
VBoxManage startvm      $vm_name
Start-Sleep -s 5

主机:Linux

#!/bin/sh
vbox_path="/usr/bin/"
vm_name="Win7_VB"
start_utc=1444176000

#DO NOT CHANGE ANYTHING BELOW THIS LINE
now_utc_ms=$(($(date +%s)*1000))
dif_utc_ms=$(($(($start_utc * 1000)) - $now_utc_ms))
echo "START UTC:" $(($start_utc * 1000)) " DIF UTC:" $dif_utc_ms "NOW UTC:" $now_utc_ms

cd $vbox_path
VBoxManage setextradata $vm_name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
VBoxManage setextradata $vm_name "VBoxInternal/TM/TSCTiedToExecution" 1
VBoxManage modifyvm     $vm_name --biossystemtimeoffset $dif_utc_ms
VBoxManage startvm      $vm_name
sleep 5
  1. 使用 VirtualBox 安装路径更新“vbox_path”。(主机:Windows)
  2. 使用将要启动的 VirtualBox Image 的名称更新“vm_name”。
  3. 使用更新“start_utc”http://www.epochconverter.com/. 目标机器将始终以“start_utc”时间启动。 纪元转换器
  4. 从“开始”菜单打开“Windows PowerShell”行政人员.(主机:Windows)
  5. 运行以下命令并回答问题[Y]。(主机:Windows)

    Set-ExecutionPolicy RemoteSigned
    
  6. 右键单击“yourfilename.ps1”并选择“使用 PowerShell 运行”以启动目标机器。(主机:Windows)

  7. 启动Linux终端执行以下命令启动目标机器(主机:Linux)

    chmod +x yourfilename.sh && sh yourfilename.sh
    

注意:始终使用步骤 8(主机:Windows)/步骤 9(主机:Linux)来运行目标虚拟机。

答案3

Onur Turhan 的回答附录:

在 Windows 10 主机上,我必须在 powershell 脚本中的四个 VBoxManage 中添加 .\ 才能使其正常工作:

.\VBoxManage setextradata $vm_name "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "0"
.\VBoxManage setextradata $vm_name "VBoxInternal/TM/TSCTiedToExecution" 1
.\VBoxManage modifyvm     $vm_name --biossystemtimeoffset $dif_utc_ms
.\VBoxManage startvm      $vm_name

答案4

使用快照。

  1. 要创建新快照,只需使用拍摄快照按钮快照概述:

    在此处输入图片描述

  2. 命名快照并保存。

  3. 当您想要稍后启动固定状态时,可以使用还原快照按钮:

    在此处输入图片描述

如果你想确保你的快照总是有相同的日期,你可能需要禁用互联网时间同步在 Windows 中,取消选中与 Internet 时间服务器同步时钟配置对话框中的复选框。

相关内容