是否可以使Virtualbox VM始终从同一时间启动,如果可以,怎么办?


9

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

  1. VM始终在同一日期和时间启动
  2. 由于之前的练习,磁盘保持不变

我已经研究出如何将磁盘配置为“不可变的”,这应该照顾(2),但是我无法同时启动VM。环顾四周后,我发现:

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

VBoxManage setextradata“ VM名称”“ VBoxInternal / Devices / VMMDev / 0 / Config / GetHostTimeDisabled” 1

我在关闭虚拟机并启动的情况下尝试了此操作,但似乎没有任何作用。在同一文档页面上,还提到了参数“ --timesync-set-start”,但是我看不到任何用于设置日期和时间的格式。欢迎提供帮助。


使用“似乎什么也没做”,您是说“系统时间和日期无论如何都与主机同步”?
Sopalajo de Arrierez 2014年

在Windows启动后设置时间和日期(几秒钟后,我是说)是否可以作为一种解决方案?我认为,一个简单的.cmd脚本应该可以做到这一点。
Sopalajo de Arrierez 2014年

Windows本身也可能配置为与Internet时间服务器同步时间。
托尔比约恩Ravn的安徒生

Answers:


16

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

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

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

2.禁用Windows的时间同步。

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

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


谢谢。您的“ 1.2禁用GuestAddition Timesync”是唯一对我有用的选项。主机更改不断被VirtualBox还原。启动虚拟机并删除新的extradata xml条目后,我将查看该文件。
Graymatter

5

如果主机是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映像名称更新“ vm_name”。
  3. 使用http://www.epochconverter.com/更新“ start_utc” 。目标机器将始终以“ 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)运行目标虚拟机。


对于谁拥有一台Linux主机的用户,我已经创建了一个基于这个答案,你可以在这里找到一个bash脚本:gist.github.com/breautek/be83414034b973d53691645d6e178bb4就将其保存为startvm.sh,chmod +x startvm.sh并使用./startvm.sh运行它。也许也可以在Mac主机上工作,但我尚未对其进行测试。
诺曼·布劳

1

要回答OP(MartinK)的原始问题:是否可以始终从同一时间启动Virtualbox VM,如果可以,怎么办?

可以简单地通过

(a)在命令行上使用VBoxManage命令(在脱机模式下,即在启动VM之前)设置“ GetHostTimeDisabled”属性= 1

(b)从之前采取的“保存的快照”启动VM。(在所需的开始时间)

每次工作时,都不需要其他命令。(已针对Windows主机中的Windows Guest进行测试)

除了他错过了“ GetHostTimeDisabled”参数设置之外,此答案与Oliver Salzburg的较早答案更接近。在已保存的快照中,应禁用OfCourse Internet时间同步(NTP)。


0

使用快照。

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

    在此处输入图片说明

  2. 命名快照并保存。

  3. 如果您想在以后启动固定状态,请使用“ 还原快照”按钮还原到以前的快照:

    在此处输入图片说明

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


我认为,这是一个很好的解决方案,可以为我解决问题。看来,如果我使用快照,则无需费心将磁盘设置为“不可变”-对吗?另外,尽管我不需要用它来解决问题,但我对上一篇文章中提到的VBoxManage命令的用途(以及如何使它们工作)感到好奇
Martin K

请参阅有关该命令的文档:virtualbox.org/manual/ch09.html#disabletimesync我看不到不可变磁盘会带来什么好处,或者在这种情况下它实际上意味着什么。
Der Hochstapler 2014年

根据我的原始帖子,我已经查看了您所引用的文档,并试图使其正常工作-但是它什么也没做。我一定想念什么-但是呢?
Martin K
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.