สร้างโคลนของเครื่อง VirtualBox ที่ไม่ทำให้เกิดการเปิดใช้งาน Windows อีกครั้งหลังจากติดตั้ง Windows


14

คำแนะนำส่วนใหญ่สำหรับการติดตั้ง Windows บน VirtualBox ที่จะทำหน้าที่เป็นแม่แบบสำหรับงานของ Windows ได้อย่างรวดเร็วบอกให้คุณใช้เวลาไม่กี่ขั้นตอนในการเตรียมเครื่องเสมือนก่อนที่จะติดตั้ง Windows (แนะนำที่ดีที่สุดที่ฉันพบ: grahamrhay.wordpress.com ; อีกคำแนะนำที่ดีเป็นธรรม: www .windowstablettv.com ) น่าเสียดายที่ฉันไม่ได้อ่านคำแนะนำเหล่านี้ก่อนที่จะติดตั้งและเปิดใช้งาน Windows บน VM ที่ฉันต้องการใช้เป็นเทมเพลต

ฉันต้องการทราบวิธีโคลน VM ที่ใช้งานอยู่ของฉันในลักษณะที่ไม่ต้องเปิดใช้งานใหม่จาก Windows

ค้นหาไฟล์นิยาม VM เทมเพลต (ไฟล์ VBOX หรือ XML สำหรับ VM /VirtualBox/Machine/Hardware) โหนด (XPath ID) ไม่มีuuidแอตทริบิวต์ แต่ถ้าฉันพยายามใช้VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>เพื่อตั้ง UUID ใหม่สำหรับเทมเพลต VM แล้วเทมเพลต VM จะสูญเสียสถานะการเปิดใช้งาน! (โชคดีที่ฉันทำการสำรองข้อมูลของเทมเพลต) ดังนั้นเพื่อให้บรรลุเป้าหมายของฉันฉันไม่สามารถทำตามคำแนะนำเหล่านั้นได้โดยอ้างว่าฉันยังไม่ได้ติดตั้ง Windows

คำตอบ:


11

โชคดีที่ฉันสังเกตเห็นบางสิ่งเกี่ยวกับเครื่องเสมือนทั้งหมดของฉันที่ฉันไม่ได้เตรียมไว้ตามที่แนะนำไว้

ฉันวิ่งVBoxManage showvminfo <uuid|name>และพบว่าUUIDค่าที่ตรงกับHardware UUIDค่าทำให้ฉันคิดว่าถ้า VM Definition ใด ๆ ไม่มีuuidแอตทริบิวต์ใน/VirtualBox/Machine/Hardwareโหนด VM จะใช้ค่า "Machine UUID" เป็นค่า "Hardware UUID" ดังนั้นสำหรับ VM แม่แบบของฉันมันมี "ฮาร์ดแวร์ UUID" ที่ฉันสามารถใช้ได้ ฉันต้องหาวิธีถ่ายโอนไปยังโคลนนิ่งที่ฉันจะทำ

เพื่อให้แน่ใจว่าการถ่ายโอน UUID คุณสามารถใช้หนึ่งในสองวิธี:

  • คุณสามารถแก้ไขไฟล์นิยาม VM เทมเพลตได้โดยตรง "ฮาร์ดแวร์ UUID" จะถ่ายโอนไปยังโคลนหาก/VirtualBox/Machine/Hardwareมีuuidคุณลักษณะ ดังนั้นคัดลอก/VirtualBox/Machine uuidแอตทริบิวต์และเพิ่มไปยัง/VirtualBox/Machine/Hardware uuidแอตทริบิวต์ คุณอาจต้องการเริ่มต้นฐานข้อมูลเครื่อง VirtualBox อีกครั้งหลังจากนี้โดยปิด / ฆ่ากระบวนการ VirtualBox ใด ๆ ที่คุณกำลังเรียกใช้ (บางครั้ง VBoxSVC ยังคงติดอยู่บน Windows คุณอาจต้องกำจัดมันจากตัวจัดการงาน)
  • คุณสามารถโคลนเทมเพลตของคุณและสร้างเทมเพลต VM ใหม่จากนั้นใช้VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>เพื่อตั้งค่า "ฮาร์ดแวร์ UUID" ของเทมเพลตใหม่เป็น "Machine UUID" / "UUID ฮาร์ดแวร์" ของเทมเพลตดั้งเดิม ฉันบอกว่าคุณต้องโคลน VM เพื่อสร้างเทมเพลต VM ใหม่เพราะถ้าคุณพยายามตั้ง "Hardware UUID" ด้วยคำสั่งนี้บนเทมเพลตดั้งเดิมมันจะไม่เพิ่มแอuuidททริบิวไปยัง/VirtualBox/Machine/Hardwareโหนดเนื่องจากมันยังสามารถบอกเป็นนัยได้ จาก "Machine UUID" และจะไม่คัดลอกค่านี้ไปยังโคลนใด ๆ ที่ทำ

ยังไม่ชัดเจนว่า VM ที่คุณพูดถึงอยู่ในจุดแรก; นอกจากนี้ยังใช้งานได้ดีกว่าVBoxManage modifyvm --hardwareuuid <uuid>
CharlesB

2
modifyvmคำสั่งจะไม่ตั้ง/VirtualBox/Machine/Hardwareโหนดuuidแอตทริบิวต์ถ้าคุณผ่าน UUID ที่มีค่าเดียวกันกับ VM ของ/VirtalBox/Machineโหนดuuidแอตทริบิวต์ คุณต้องแก้ไขไฟล์ VBOX โดยตรง
palswim

3

สคริปต์ PowerShell นี้ทำงาน:

  1. โคลนเครื่องที่เปิดใช้งานแล้ว
  2. ปิด virtualbox precesses จากตัวจัดการงาน
  3. เรียกใช้สคริปต์นี้แก้ไขตัวแปรให้เป็นค่าของคุณ

จำไว้ว่าชื่อเครื่องเสมือนนั้นต้องตรงตามตัวพิมพ์ใหญ่ - เล็ก

$ORIGVirtualMachineName="BaseDevWin7"
$clonedVirtualMachineName="DevWin7a"
$vboxDir="c:\Program Files\Oracle\VirtualBox"
cd $vboxDir
$uid=$($($(.\VBoxManage.exe showvminfo $ORIGVirtualMachineName|select-string "Hardware UUID:").ToString()).Split())[4]
.\VBoxManage modifyvm $clonedVirtualMachineName --hardwareuuid $uid

2

ขอบคุณคำแนะนำข้างต้นฉันได้ทำการโคลนเครื่องกับแขก Win7 ที่ทำงานบนโฮสต์ Kubuntu สำหรับการทดสอบโดยไม่ต้องเปิดใช้งานอีกครั้ง

เครื่องของฉันเปิดใช้งานแล้วและ (ตามที่อธิบายข้างต้น) ไม่มี UUID ฮาร์ดแวร์

สำหรับฉันดูเหมือนว่า MACHINE UUID นั้นใช้สำหรับการจัดการ Virtualbox เท่านั้นในขณะที่ HARDWARE UUID นั้นถูกใช้โดยตรรกะการเปิดใช้งาน Windows หากไม่มีฮาร์ดแวร์ UUID Virtualbox จะให้เครื่อง UUID แก่แขกเช่น Microsoft รู้ว่าเครื่อง UUID

ดังนั้นนี่คือวิธีการทำงานที่ดีโดยไม่ต้องเปิดใช้งานใหม่ในกรณีของฉัน: 1) คัดลอกเครื่องเสมือน (โฟลเดอร์) ด้วยเบราว์เซอร์ไฟล์ปกติ 2) เปิดไฟล์. vbox ในโปรแกรมแก้ไขข้อความอย่างง่าย 3) เนื่องจากไม่มีแอตทริบิวต์ UUID สำหรับ "ฮาร์ดแวร์" ให้คัดลอกแอตทริบิวต์ UUID ของเครื่อง (เช่น uuid = "{xxx11111-2222-3333-4444-xxxxxxxxxxxx}") ไปยังรายการ "ฮาร์ดแวร์" 4) สร้าง UUID ใหม่สำหรับเครื่องเช่นกับ uuidgenerator.net 5) เขียนทับค่า UUID ของเครื่องด้วยค่า UUID ที่สร้างขึ้น => เสร็จสิ้น

เพื่อจัดการเครื่องทั้งสองแบบขนานใน VB Manager มันยุ่งยากมากขึ้น:
1. เปลี่ยนชื่อไฟล์ harddisk .vdi ของโคลน
2. ในบรรทัดคำสั่งให้ UUID ใหม่ให้กับ harddisk ผ่านคำสั่ง "VBoxManage คำสั่งภายใน sethduuid .vdi. VBManager จะตั้งค่า UUID ใหม่และแสดง
3. ใน VB Manager เพิ่มเครื่องใหม่แก้ไขเครื่องโดยการเพิ่มไฟล์ harddisk ใหม่ (และลบ vdi ต้นฉบับหากยังมีอยู่)

ตอนนี้คุณมี ID ที่ไม่ซ้ำกันสำหรับเครื่องเสมือนและฮาร์ดดิสก์ทั้งหมด คุณสามารถจัดการทั้งสองเครื่องภายใน VB Manager แบบขนาน


1

โคลนเครื่องเต็ม อย่าเริ่มเลย

จากบรรทัดคำสั่ง:

VBoxManage modifiedvm "ชื่อ VM ที่ถูกโคลน" - hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

ในฐานะที่เป็น UUID ใช้หมายเลขเครื่อง (หรือรหัสฮาร์ดแวร์ถ้ามี) จากเครื่องเดิม

ในการรับ UUID นั้นให้ใช้:

VBoxManage showvminfo "ชื่อ VM ดั้งเดิม"

สิ่งนี้น่าจะใช้ได้ ทดสอบกับผู้เยี่ยมชม Windows 10 แล้วเปิดใช้งานแล้ว


วิธีนี้ใช้งานได้ในกรณีส่วนใหญ่ยกเว้นตำแหน่งที่ UUID ตรงกับแอตทริบิวต์/VirtalBox/MachineของโหนดVM uuidตามที่คำถามและความคิดเห็นอื่นระบุไว้
palswim

0

คำตอบข้างต้นใช้งานได้! ฉันทดสอบบนเทมเพลต Windows 10

"โคลนแบบเต็มเครื่องห้ามเริ่มจากบรรทัดคำสั่ง: VBoxManage modifiedvm" ชื่อ VM ที่โคลน "--hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx As UUID ใช้หมายเลขเครื่อง (หรือรหัสฮาร์ดแวร์ถ้ามี) เครื่องดั้งเดิมในการรับ UUID นั้นให้ใช้: VBoxManage showvminfo "Original VM name"

สิ่งนี้น่าจะใช้ได้ ทดสอบกับผู้เยี่ยมชม Windows 10 แล้วเปิดใช้งานแล้ว

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