Virtualbox VMを常に同時に開始することは可能ですか?


9

VBを使用して、トレーニングコースで使用するWindows 7 VMをセットアップしようとしています。仮想マシンを常に同じ条件で起動させたい、特に:

  1. VMは常に同じ日時に起動します
  2. 前の演習の結果、ディスクは変更されません。

(2)を処理する「不変」としてディスクを構成する方法を考えましたが、VMを同時に起動できません。周りを見回した後、私はこれを見つけました:

Virtualbox Guest Additionsをインストールして開始すると、ゲストの時刻とホストの時刻の同期が試行されます。これは、ゲストサービスがホストクロックを読み取らないようにすることで防止できます。

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

VMをシャットダウンして起動してみましたが、何も実行されないようです。上の同じドキュメントページパラメータの言及は、しかし、私は、日付と時刻を設定するためのフォーマットの一切の言及を見ることができない「--timesyncセットがスタート」もあります。助けを歓迎します。


「何もしないようです」とは、「システムの時刻と日付がホストと同期している」という意味ですか?
Sopalajo de Arrierez 2014

それはあなたがWindowsの起動後(数秒後、つまり)に時刻と日付を設定するための解決策ですか?単純な.cmdスクリプトでそれができるはずだと思います。
Sopalajo de Arrierez 2014

Windows自体も、インターネットタイムサーバーに対して時刻を同期するように構成されている場合があります。
するThorbjörnRavnアンデルセン

回答:


16

ゲストの時間を維持するには、次のアクションを実行する必要があります。

1.仮想マシンの時刻同期を無効にします。

1.1ホストからゲストへのTimesyncを無効にする

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 Timesyncを無効にする

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によって元に戻され続けました。VMを起動し、新しいextradata xmlエントリが削除された後、ファイルを確認します。
Graymatter

5

ホストマシンがWindows / Linuxの場合、次の手順が機能します。

  1. 「ターゲットマシン」がWindowsの場合:「ターゲット仮想マシン」を開き、「コントロールパネル->日時->インターネット時間->設定の変更->「インターネットタイムサーバーとの同期」を無効にします。

  2. 以下の行をホストマシンのファイル「yourfilename.ps1」(Windows)/「yourfilename.sh」(Linux)としてコピーします。手順3の説明に従って、このファイルを編集します。


ホスト: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ホストでも動作しますが、テストはしていません。
Norman Breau

1

OP(MartinK)の元の質問に回答するには:Virtualbox VMを常に同じ時間から開始することは可能ですか?

それは簡単に可能です

(a) "GetHostTimeDisabled"プロパティを= 1に設定し、コマンドラインでVBoxManageコマンドを使用します(オフラインモード、つまりVMを起動する前)。

(b)以前に取得した保存済みのスナップショットからVMを起動します。(希望する開始時間)

これが機能するたびに、コマンドは必要ありません。(WindowsホストのWindowsゲストでテスト済み)

この答えは、 "GetHostTimeDisabled"パラメータ設定を逃したことを除いて、オリバーザルツブルクによる以前の答えに近いものです。保存されたスナップショットでは、OfCourse Internet Time Sync(NTP)を無効にする必要があります。


0

スナップショットを使用します。

  1. 新しいスナップショットを作成するには、スナップショットの概要で[ スナップショットを撮る ]ボタンを使用します。

    ここに画像の説明を入力してください

  2. スナップショットに名前を付けて保存します。

  3. 後で固定状態を起動する場合は、[ スナップショット復元]ボタンを使用して以前のスナップショットに戻します。

    ここに画像の説明を入力してください

スナップショットの日付が常に同じになるようにしたい場合は、時計の設定ダイアログで[ インターネットタイムサーバーと同期 ]チェックボックスオフにして、Windowsのインターネット時刻同期を無効にすることをお勧めします。


それは優れた解決策であり、問​​題を解決してくれると思います。その場合、スナップショットを使用すれば、ディスクを「不変」にすることを気にする必要はないようです-私は正しいですか?また、問題を解決するためにこれは必要ありませんが、以前の投稿で述べたVBoxManageコマンドの目的(およびそれらを機能させる方法)に興味があります
Martin K

そのコマンドについてのドキュメントを参照してください:virtualbox.org/manual/ch09.html#disabletimesync私は不変ディスクが何の利点を持っているか、またはこのコンテキストでそれが実際に何を意味しているのかわかりません。
Der Hochstapler 2014

私の元の投稿によると、私はあなたが参照しているドキュメントをすでに見て、それを機能させるように試みました-それは何もしませんでした。私は何かが欠けているに違いありません-しかし、何ですか?
マーティンK 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.