เป็นไปได้หรือไม่ที่จะทำให้ Virtualbox VM เริ่มต้นพร้อมกันถ้าเป็นเช่นนั้น


9

ฉันพยายามใช้ VB เพื่อตั้งค่า Windows 7 VM สำหรับใช้ในหลักสูตรฝึกอบรม ฉันต้องการให้เครื่องเสมือนเริ่มต้นจากเงื่อนไขเดียวกันเสมอโดยเฉพาะ:

  1. VM จะเริ่มต้นในวันและเวลาเดียวกันเสมอ
  2. ดิสก์ยังคงไม่เปลี่ยนแปลงเนื่องจากการฝึกครั้งก่อน

ฉันได้หาวิธีกำหนดค่าดิสก์เป็น "ไม่เปลี่ยนรูป" ซึ่งควรดูแล (2) แต่ฉันไม่สามารถทำให้ VM เริ่มต้นพร้อมกันได้ หลังจากพบบางสิ่งรอบตัวฉันพบสิ่งนี้:

เมื่อติดตั้งและเริ่มการทำงานแล้ว Virtualbox Guest Additions จะพยายามซิงโครไนซ์เวลาแขกกับเวลาโฮสต์ สิ่งนี้สามารถป้องกันได้โดยห้ามการให้บริการแขกจากการอ่านนาฬิกาโฮสต์:

VBoxManage setextradata "ชื่อ VM" "VBoxInternal / อุปกรณ์ / VMMDev / 0 / กำหนดค่า / GetHostTimeDisabled" 1

ฉันลองสิ่งนี้ด้วย VM ปิดตัวเองและเมื่อมันเริ่มต้นขึ้น แต่ดูเหมือนจะไม่ทำอะไรเลย ในหน้าเอกสารเดียวกันมีการกล่าวถึงพารามิเตอร์ "--timesync-set-start" แต่ฉันไม่สามารถเห็นรูปแบบใด ๆ สำหรับการตั้งค่าวันที่และเวลา ความช่วยเหลือจะได้รับการต้อนรับ


ด้วย "ดูเหมือนว่าจะไม่ทำอะไรเลย" คุณหมายถึง "เวลาและวันที่ของระบบได้รับการซิงโครไนซ์กับโฮสต์" หรือไม่?
Sopalajo de Arrierez

มันควรจะเป็นวิธีการแก้ปัญหาสำหรับคุณที่จะกำหนดเวลาและวันที่หลังจากบูต Windows (ไม่กี่วินาทีต่อมาฉันหมายถึง) ฉันคิดว่าสคริปต์. cmd ง่าย ๆ
Sopalajo de Arrierez

Windows เองอาจถูกกำหนดค่าให้ซิงโครไนซ์เวลากับเซิร์ฟเวอร์เวลาอินเทอร์เน็ต
Thorbjørn Ravn Andersen

คำตอบ:


16

คุณต้องดำเนินการดังต่อไปนี้เพื่อให้เวลาแขกเป็นไปตามที่ได้รับ:

1. ปิดใช้งานการซิงค์เวลาของเครื่องเสมือนของคุณ:

1.1 ปิดการใช้งานโฮสต์เพื่อ Guest 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 Disable GuestAddition Timesync" ของคุณเป็นตัวเลือกเดียวที่ดูเหมือนจะใช้ได้สำหรับฉัน การเปลี่ยนแปลงโฮสต์ยังคงได้รับการคืนค่าโดย VirtualBox ฉันจะดูไฟล์หลังจากที่ฉันเริ่มต้น VM และรายการ extradata xml ใหม่ถูกลบออก
Graymatter

5

ขั้นตอนต่อไปนี้จะใช้งานได้หากเครื่องโฮสต์คือ Windows / Linux

  1. หาก "เครื่องเป้าหมาย" เป็น Windows: เปิด "เครื่องเสมือนเป้าหมาย" และใช้ "แผงควบคุม -> วันที่และเวลา -> เวลาอินเทอร์เน็ต -> เปลี่ยนการตั้งค่า -> ปิดการใช้งาน" ซิงโครไนซ์กับเซิร์ฟเวอร์เวลาอินเทอร์เน็ต ""

  2. คัดลอกบรรทัดด้านล่างเป็นไฟล์ "yourfilename.ps1" (Windows) / "yourfilename.sh" (Linux) บนเครื่องโฮสต์ แก้ไขไฟล์นี้ตามที่อธิบายไว้ในขั้นตอนที่ 3 4. 5


HOST: 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

HOST: 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. อัปเดต "vbox_path" ด้วยเส้นทางการติดตั้ง VirtualBox (โฮสต์: Windows)
  2. อัปเดต "vm_name" ด้วยชื่อ VirtualBox Image ซึ่งจะเริ่มขึ้น
  3. อัปเดต "start_utc" ใช้กับhttp://www.epochconverter.com/ เครื่องเป้าหมายจะเริ่มต้นเสมอด้วยเวลา "start_utc" Epoch Converter
  4. เปิด "Windows PowerShell" จากเมนู Start เป็นผู้ดูแลระบบ (โฮสต์: Windows)
  5. เรียกใช้คำสั่งและตอบคำถามต่อไปนี้เป็น [Y] (โฮสต์: Windows)

    Set-ExecutionPolicy RemoteSigned
    
  6. เรียกใช้ด้วยการคลิกขวาที่ "yourfilename.ps1" และเลือก "Run with PowerShell" เพื่อเริ่มเครื่องเป้าหมาย (โฮสต์: Windows)

  7. เริ่มต้นคำสั่งเรียกใช้งาน Linux Terminal เพื่อเริ่มเครื่องเป้าหมาย (โฮสต์: Linux)

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

หมายเหตุ: ใช้ขั้นตอนที่ 8 (โฮสต์: Windows) เสมอ / ขั้นตอนที่ 9 (โฮสต์: Linux) เพื่อเรียกใช้เครื่องเสมือนเป้าหมาย


สำหรับผู้ใช้ที่มีโฮสต์ linux ฉันได้สร้างสคริปต์ทุบตีตามคำตอบนี้ซึ่งคุณสามารถหาได้ที่นี่: 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 จาก SnapShot ที่บันทึกไว้ก่อนหน้านี้ (ในเวลาเริ่มต้นที่ต้องการ)

ไม่จำเป็นต้องมีคำสั่งเพิ่มเติมทุกครั้งที่ทำงาน (ทดสอบสำหรับผู้เยี่ยมชมของ Windows ในโฮสต์ของ Windows)

คำตอบนี้อยู่ใกล้กับคำตอบก่อนหน้านี้ของ Oliver Salzburg ยกเว้นว่าเขาพลาดการตั้งค่าพารามิเตอร์ "GetHostTimeDisabled" OfCourse Internet Time Sync (NTP) ควรจะปิดการใช้งานในภาพรวมที่บันทึกไว้


0

ใช้สแนปชอต

  1. หากต้องการสร้างสแนปชอตใหม่เพียงแค่ใช้ปุ่มถ่ายภาพรวมในภาพรวมSnapshots :

    ป้อนคำอธิบายรูปภาพที่นี่

  2. ตั้งชื่อสแนปชอตและบันทึก

  3. เมื่อคุณต้องการบู๊ตสถานะคงที่ในภายหลังให้เปลี่ยนกลับเป็นสแน็ปช็อตก่อนหน้าด้วยปุ่มกู้คืนสแนปชอต :

    ป้อนคำอธิบายรูปภาพที่นี่

ถ้าคุณต้องการเพื่อให้แน่ใจว่าภาพรวมของคุณมักจะมีวันเดียวกันคุณอาจต้องการที่จะปิดการใช้งานการประสานเวลาอินเทอร์เน็ตใน Windows โดยยกเลิกการเลือกตรงกันกับเซิร์ฟเวอร์เวลาบนอินเทอร์เน็ตช่องทำเครื่องหมายในการโต้ตอบการตั้งค่านาฬิกา


นั่นเป็นทางออกที่ยอดเยี่ยมและแก้ไขปัญหาสำหรับฉันฉันคิดว่า ดูเหมือนว่าถ้าฉันใช้สแน็ปช็อตฉันไม่จำเป็นต้องกังวลเกี่ยวกับการทำให้ดิสก์ "ไม่เปลี่ยนรูป" - ฉันถูกไหม? นอกจากนี้แม้ว่าฉันไม่ต้องการสิ่งนี้เพื่อแก้ปัญหาของฉัน แต่ฉันก็อยากรู้อยากเห็นเกี่ยวกับวัตถุประสงค์ของคำสั่ง VBoxManage ที่ฉันพูดถึงในโพสต์ก่อนหน้าของฉัน (และวิธีทำให้พวกเขาทำงาน)
Martin K

โปรดดูเอกสารประกอบเกี่ยวกับคำสั่งนั้น: virtualbox.org/manual/ch09.html#disabletimesyncฉันไม่เห็นว่าดิสก์ที่ไม่เปลี่ยนรูปจะมีประโยชน์อะไรหรือมีความหมายในบริบทนี้จริง ๆ
Der Hochstapler

ตามโพสต์ต้นฉบับของฉันฉันได้ดูเอกสารที่คุณอ้างถึงและพยายามทำให้มันใช้งานได้ - อย่างไรก็ตามมันไม่ได้ทำอะไรเลย ฉันต้องคิดถึงบางสิ่ง - แต่อะไรนะ
Martin K
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.