我正在尝试使用 VB 设置 Windows 7 VM 以用于培训课程。我希望虚拟机始终从相同的条件启动,特别是:
- VM 总是在同一日期和时间启动
- 由于之前的行使,磁盘保持不变
我已经弄清楚了如何将磁盘配置为“不可变”,这应该可以解决 (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的时间同步。
检查时间设置。禁用互联网时间同步。
答案2
如果主机是 Windows/Linux,则以下步骤将有效。
如果“目标机器”是Windows:打开“目标虚拟机”并应用“控制面板->日期和时间->Internet时间->更改设置->禁用“与Internet时间服务器同步””。
将以下行复制为主机上的文件“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
- 使用 VirtualBox 安装路径更新“vbox_path”。(主机:Windows)
- 使用将要启动的 VirtualBox Image 的名称更新“vm_name”。
- 使用更新“start_utc”http://www.epochconverter.com/. 目标机器将始终以“start_utc”时间启动。
- 从“开始”菜单打开“Windows PowerShell”行政人员.(主机:Windows)
运行以下命令并回答问题[Y]。(主机:Windows)
Set-ExecutionPolicy RemoteSigned
右键单击“yourfilename.ps1”并选择“使用 PowerShell 运行”以启动目标机器。(主机:Windows)
启动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
使用快照。
要创建新快照,只需使用拍摄快照按钮快照概述:
命名快照并保存。
当您想要稍后启动固定状态时,可以使用还原快照按钮:
如果你想确保你的快照总是有相同的日期,你可能需要禁用互联网时间同步在 Windows 中,取消选中与 Internet 时间服务器同步时钟配置对话框中的复选框。