Apakah mungkin untuk mendapatkan VM Virtualbox selalu mulai dari waktu yang sama, jika demikian bagaimana?

9

Saya mencoba menggunakan VB untuk mengatur VM Windows 7 untuk digunakan dalam kursus pelatihan. Saya ingin mesin virtual selalu memulai dari kondisi yang sama, khususnya:

  1. VM selalu dimulai pada tanggal dan waktu yang sama
  2. Disk tetap tidak berubah sebagai hasil dari latihan sebelumnya

Saya telah mengetahui cara mengkonfigurasi disk sebagai "tidak dapat diubah" yang seharusnya menangani (2), tetapi saya tidak bisa membuat VM memulai pada saat yang sama. Setelah beberapa melihat-lihat saya menemukan ini:

Setelah diinstal dan dimulai, Tambahan Tamu Virtualbox akan mencoba menyinkronkan waktu tamu dengan waktu host. Ini dapat dicegah dengan melarang layanan tamu membaca jam host:

VBoxManage setextradata "Nama VM" "VBoxInternal / Perangkat / VMMDev / 0 / Config / GetHostTimeDisabled" 1

Saya mencoba ini dengan VM dimatikan, dan dengan itu mulai, tetapi tampaknya tidak melakukan apa-apa. Pada halaman dokumentasi yang sama ada juga penyebutan parameter "--timesync-set-start" namun saya tidak dapat melihat penyebutan format untuk pengaturan tanggal dan waktu. Bantuan akan disambut.

Martin K
sumber
Dengan "sepertinya tidak melakukan apa-apa", maksud Anda "waktu & tanggal sistem tetap disinkronkan dengan tuan rumah"?
Sopalajo de Arrierez
Haruskah itu menjadi solusi bagi Anda untuk mengatur waktu & tanggal setelah boot Windows (beberapa detik kemudian, maksud saya)? Script .cmd sederhana harus melakukan itu, saya pikir.
Sopalajo de Arrierez
Windows sendiri mungkin juga dikonfigurasikan untuk menyinkronkan waktu dengan server waktu internet.
Thorbjørn Ravn Andersen

Jawaban:

16

Anda perlu melakukan tindakan berikut untuk membuat waktu tamu tetap seperti semula:

1. Nonaktifkan sinkronisasi waktu dari mesin virtual Anda:

1.1 Nonaktifkan Host ke Guest Timesync

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

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

Untuk mengembalikan kembali:

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

1.2 Nonaktifkan GuestAddition Timesync

Gunakan regedit.exe untuk memodifikasi registri.

Temukan cabang ini: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ VBoxService

Ubah nilai dalam ImagePathdari

system32\VBoxService.exe

untuk

system32\VBoxService.exe --disable-timesync

Mulai ulang VM Anda atau mulai ulang layanan "VirtualBox Guest Additions Service".

2. Nonaktifkan sinkronisasi waktu Windows.

Periksa pengaturan waktu. Nonaktifkan sinkronisasi waktu internet.

Sumber: http://www.ppq.ch/snippets/15-vobxtime

Madwyn
sumber
Terima kasih. "1.2 Disable GuestAddition Timesync" Anda adalah satu-satunya opsi yang sepertinya berfungsi untuk saya. Perubahan host terus dikembalikan oleh VirtualBox. Saya akan melihat file setelah saya memulai VM dan entri xml extradata baru dihapus.
Graymatter
5

Langkah-langkah berikut akan berhasil, jika mesin host adalah Windows / Linux.

  1. Jika "mesin target" adalah Windows: Buka "mesin virtual target" dan terapkan "Panel Kontrol -> Tanggal dan Waktu -> Waktu Internet -> Ubah Pengaturan -> Nonaktifkan" Sinkronisasi dengan server waktu Internet "".

  2. Salin baris di bawah ini sebagai file "yourfilename.ps1" (Windows) / "yourfilename.sh" (Linux) pada mesin host. Edit file ini seperti yang dijelaskan pada langkah 3. 4. 5.


PEMBAWA ACARA: 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

PEMBAWA ACARA: 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. Perbarui "vbox_path" dengan jalur instalasi VirtualBox. (Host: Windows)
  2. Perbarui "vm_name" dengan nama VirtualBox Image yang akan dimulai.
  3. Perbarui "start_utc" menggunakan dengan http://www.epochconverter.com/ . Mesin target akan mulai selalu dengan waktu "start_utc". Konverter Zaman
  4. Buka "Windows PowerShell" dari Start Menu sebagai Administrator . (Host: Windows)
  5. Jalankan perintah berikut dan jawab pertanyaan sebagai [Y]. (Host: Windows)

    Set-ExecutionPolicy RemoteSigned
    
  6. Jalankan dengan klik kanan pada "yourfilename.ps1" dan pilih "Run with PowerShell" untuk memulai mesin target. (Host: Windows)

  7. Mulai Terminal Linux, jalankan perintah di bawah ini untuk memulai mesin target (Host: Linux)

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

Catatan: Selalu gunakan langkah 8 (Host: Windows) / langkah 9 (Host: Linux) untuk menjalankan mesin virtual target.

Onur Turhan
sumber
Untuk pengguna yang memiliki host linux, saya telah membuat skrip bash berdasarkan jawaban ini yang dapat Anda temukan di sini: gist.github.com/breautek/be83414034b973d53691645d6e178bb4 Cukup simpan sebagai startvm.sh, chmod +x startvm.shdan gunakan ./startvm.shuntuk menjalankannya. Mungkin akan bekerja pada host mac juga, tapi saya belum mengujinya.
Norman Breau
1

Untuk menjawab Pertanyaan asli OP (MartinK): Apakah mungkin mendapatkan VM Virtualbox selalu dimulai dari waktu yang sama, jika demikian bagaimana?

Itu mungkin hanya dengan

(a) Mengatur properti "GetHostTimeDisabled" = 1, menggunakan perintah VBoxManage di baris perintah (dalam mode offline, yaitu sebelum memulai VM)

(B) Mulai VM, dari SnapShot Tersimpan diambil sebelumnya. (pada waktu mulai yang diinginkan)

Tidak diperlukan lagi perintah, setiap kali ini berhasil. (diuji untuk Tamu Windows di Host Windows)

Jawaban ini lebih dekat dengan jawaban sebelumnya oleh Oliver Salzburg, kecuali dia melewatkan pengaturan parameter "GetHostTimeDisabled". OfCourse Internet Time Sync (NTP) harus dinonaktifkan, dalam snapshot yang disimpan.

Bhishmar
sumber
0

Gunakan snapshot.

  1. Untuk membuat snapshot baru, cukup gunakan tombol Take Snapshot dalam ikhtisar Snapshots :

    masukkan deskripsi gambar di sini

  2. Namai foto itu dan simpan.

  3. Saat Anda ingin mem-boot kondisi tetap di lain waktu, kembalikan ke snapshot Anda sebelumnya dengan tombol Restore Snapshot :

    masukkan deskripsi gambar di sini

Jika Anda ingin memastikan bahwa snapshot Anda selalu memiliki tanggal yang sama, Anda mungkin ingin menonaktifkan sinkronisasi waktu internet di Windows dengan menghapus centang pada kotak Sinkronkan dengan server waktu Internet dalam dialog konfigurasi jam.

Der Hochstapler
sumber
Itu adalah solusi yang sangat baik dan memperbaiki masalah bagi saya, saya pikir. Tampaknya kemudian bahwa jika saya menggunakan snapshot saya tidak perlu repot-repot membuat disk "abadi" - apakah saya benar? Juga, walaupun saya tidak memerlukan ini untuk menyelesaikan masalah saya, saya ingin tahu tentang tujuan perintah VBoxManage yang saya sebutkan di posting sebelumnya (dan bagaimana cara membuatnya bekerja)
Martin K
Silakan merujuk ke dokumentasi tentang perintah itu: virtualbox.org/manual/ch09.html#disabletimesync Saya tidak melihat manfaat apa yang dimiliki disk yang tidak dapat diubah atau apa arti sebenarnya dari konteks ini.
Der Hochstapler
Sesuai posting asli saya, saya telah melihat dokumentasi yang Anda lihat dan mencoba membuatnya berfungsi - namun tidak melakukan apa-apa. Saya pasti kehilangan sesuatu - tapi apa?
Martin K