ไม่เหมือน VMWare Hyper-V ไม่มีฟีเจอร์สำเร็จรูปสำหรับการโคลน Virtual Machines (การโคลนพร้อมใช้งานเฉพาะใน Virtual Machine Manager) เพื่อสร้างสำเนาเต็มรูปแบบของ VM ที่มีอยู่ คุณจะต้องใช้ฟีเจอร์ Import และ Export ของ Hyper-V ในบทความนี้ เราจะแสดงวิธีโคลน Virtual Machine ใน Hyper-V โดยใช้ Import และ Export ด้วย Hyper-V Manager GUI, PowerShell และ Windows Admin Center (WAC)
%WINDIR%\system32\sysprep\sysprep.exe /generalize /shutdown /oobe
VM จะปิดเครื่องและ SID ใหม่จะถูกสร้างขึ้นที่การเริ่มต้นครั้งต่อไปบน Source VM และ Clone Copy ของมันทั้งสอง นอกจากนี้ ไม่แนะนำให้โคลน VM ที่เข้าร่วม Active Directory Domain
Export และ Import VMs ใน Hyper-V Manager
ขั้นแรก ส่งออก VM ไปยังไดเรกทอรีแยกต่างหาก เปิดคอนโซล Hyper-V Manager คลิกขวาที่ VM และเลือก Export ในเมนูบริบท
ระบุไดเรกทอรีที่คุณต้องการส่งออก Virtual Machine ไป
สถานะการส่งออก VM จะแสดงในแผ่นสถานะ VM ในคอนโซล Hyper-V ของคุณ
คุณสามารถส่งออก Checkpoint (Snapshot) เฉพาะของ Virtual Machine ได้ ในการทำเช่นนี้ ให้คลิกขวาที่ Checkpoint ที่ต้องการในต้นไม้ Checkpoints และเลือก Export
การ Import VM
ในการ Import VM ให้คลิกชื่อโฮสต์ใน Hyper-V Manager และเลือก Import Virtual Machine
จากนั้นระบุเส้นทางไปยังไดเรกทอรีที่โฟลเดอร์พร้อมไฟล์ VM ที่นำเข้าตั้งอยู่ เมื่อคุณ Import VM ใน Hyper-V คุณจะได้รับตัวเลือก 3 แบบของการลงทะเบียน VM บนโฮสต์:
- Register the virtual machine in-place (use the existing unique ID) — เพื่อลงทะเบียน VM ในไดเรกทอรีที่มีไฟล์ที่นำเข้า (VM ID คงเดิม)
- Restore the virtual machine (use the existing unique ID) — เพื่อคัดลอกไฟล์ VM ไปยังโฟลเดอร์อื่น (Original VM ID ถูกเก็บไว้)
- Copy the virtual machine (create a new unique ID) — เพื่อคัดลอก VM ไปยังไดเรกทอรีอื่นและสร้าง VM ID ใหม่
แต่ละ VM บนโฮสต์ Hyper-V มี ID ที่ต้องไม่ซ้ำกันภายในโฮสต์ หากคุณ Import หรือ Clone VM ไปยังโฮสต์อื่น คุณไม่จำเป็นต้องเปลี่ยน VM ID
หากคุณพยายาม Import VM ด้วย ID ซ้ำ จะเกิดข้อผิดพลาดดังนี้:
The operation failed because a virtual machine with the same identifier already exists. Select a new identifier and try the operation again.
เพื่อสร้าง VM Clone พร้อม ID ใหม่ เราได้เลือกตัวเลือกที่สาม Wizard จะพรอมต์ให้คุณระบุโฟลเดอร์ที่คุณต้องการวางไฟล์ VM โดยค่าเริ่มต้น โฟลเดอร์ที่ระบุในการตั้งค่าโฮสต์ Hyper-V จะถูกใช้
จากนั้นเลือกไดเรกทอรีที่ Virtual Disks ของ Virtual Machine (ไฟล์ vhdx) จะถูกเก็บ
จากนั้น VM ที่โคลนใหม่จะปรากฏในคอนโซล Hyper-V ของคุณ
วิธี Export, Import และ Clone Hyper-V VMs ด้วย PowerShell
Export VM
Export-VM -Name win10 -Path 'C:\VHD\export'
หากคุณต้องการส่งออก VM ที่กำลังทำงาน คุณสามารถใช้ตัวเลือก CaptureLiveState ซึ่งกำหนดวิธีการส่งออกหน่วยความจำของ VM มี 3 ตัวเลือก:
CaptureSavedState– ส่งออกหน่วยความจำ (ค่าเริ่มต้น)CaptureDataConsistentState– ส่งออกสถานะ VM จาก Hyper-V Production CheckpointCaptureCrashConsistentState– ไม่บันทึกเนื้อหาหน่วยความจำ
Export-VM -Name win10 -Path 'C:\VHD\export' -CaptureLiveState CaptureCrashConsistentState
หากคุณต้องการส่งออกสถานะ VM จาก Checkpoint เฉพาะ ให้ระบุชื่อของมัน
ขั้นแรก แสดงรายการ Checkpoints ที่พร้อมใช้งานสำหรับ VM:
Get-VMSnapshot -VMName win10
จากนั้นส่งออก Checkpoint โดยชื่อของมัน:
Export-VMSnapshot -Name "win10 - (6/17/2021 - 3:12:205 PM) Standard" -VMName win10 -Path 'C:\VHD\export'
Import VM
หลังจาก VM ถูกส่งออกแล้ว คุณสามารถนำเข้าได้ หากคุณต้องการลงทะเบียน VM ในที่เดิม (In-place) ให้รันคำสั่งต่อไปนี้:
Import-VM -Path "C:\VHD\export\win10\Virtual Machines\212cadd2-6543-bc2d-ca11-321ffa223f3b.vmcx"
ในตัวเลือก Path ให้ระบุตำแหน่งของไฟล์การกำหนดค่า VM (รูปแบบไฟล์ VMCX แทนที่รูปแบบ XML ของไฟล์การกำหนดค่า VM ใน Hyper-V Server 2016) เพื่อคัดลอก VM ไปยังโฟลเดอร์อื่นพร้อม ID เดียวกัน ใช้ตัวเลือก Copy เพื่อสร้าง VM ID ใหม่ ใช้ตัวเลือก GenerateNewId:
Import-VM -Path "C:\VHD\export\win10\Virtual Machines\212cadd2-6543-bc2d-ca11-321ffa223f3b.vmcx" -VhdDestinationPath "C:\VHD\win10_2" -VirtualMachinePath "C:\VHD\win10_2"
VhdDestinationPath ระบุไดเรกทอรีที่ไฟล์ VHDX ของ VM จะถูกคัดลอกไป และ VirtualMachinePath ตั้งค่าไดเรกทอรีของไฟล์การกำหนดค่า VM หากตัวเลือกไม่ได้ตั้งค่า ไฟล์ VM จะถูกคัดลอกไปยังไดเรกทอรีค่าเริ่มต้นที่ระบุในการตั้งค่าโฮสต์ Hyper-V (C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\)
คุณยังสามารถตั้งค่าโฟลเดอร์สำหรับเก็บ Checkpoints (SnapshotFilePath) และ Pagefile (SmartPagingFilePath) ได้
จัดการ VM ที่โคลนแล้ว
สังเกตว่า VM ที่โคลนปรากฏในคอนโซล Hyper-V ด้วยชื่อ VM ต้นทาง มาเปลี่ยนชื่อมัน แต่เราต้องการ VMID ก่อน:
get-vm | select VMNAME,VMId
คุณสามารถเห็นได้ว่ามี VM สองตัวที่มีชื่อเดียวกันและ ID ต่างกันบนโฮสต์ เปลี่ยนชื่อ VM ที่มี ID ต่างจาก ID ของ VM ที่นำเข้า คัดลอก ID ของ VM ใหม่และเปลี่ยนชื่อ:
get-vm | Where-Object {$_.VMId -eq "9a9d3332-f332-a231-8abc-9221aab32287"} | Rename-VM -NewName win10_2
จากนั้นคุณสามารถเปลี่ยนชื่อไฟล์ Virtual Hard Disk ได้เช่นกัน:
Get-VHD -VMId 9a9d3332-f332-a231-8abc-9221aab32287 | Select Path | Rename-Item -NewName win10_2.vhdx
Remove-VMHardDiskDrive -VMName win10_2 -ControllerType SCSI -ControllerLocation 0 -ControllerNumber 0
Add-VMHardDiskDrive -VMName win10_2 -ControllerType SCSI -ControllerNumber 0 -ControllerLocation 0 -Path "C:\VHD\win10_2\win10_2.vhdx"
เปลี่ยนที่อยู่ MAC ของ Virtual Adapter (คุณสามารถระบุ MAC Address แบบ Static ใหม่หรือกำหนดให้รับ MAC Address แบบ Dynamic)
Set-VMNetworkAdapter -VMName win10_2 -DynamicMacAddress
Start-VM -Name win10_2
ก่อนเชื่อมต่อ VM ใหม่ของคุณกับเครือข่าย แนะนำให้เปลี่ยนชื่อและเปลี่ยนที่อยู่ IP เป็นใหม่ (หากคุณใช้ DHCP ใน LAN ของคุณ คุณสามารถข้ามขั้นตอนนี้ได้) จากนั้นคุณจะสามารถเชื่อมต่อกับ VM ใหม่ของคุณผ่าน PowerShell Direct โดยใช้ Cmdlet Invoke-Command หรือ Enter-PSSession:
Enter-PSSession -ComputerName win10_2 -Credential (Get-Credential)
Rename-Computer win10_2
Remove-NetIPAddress -InterfaceAlias "Ethernet" -AddressFamily IPV4
New-NetIPAddress -IPAddress 192.168.13.71 -InterfaceAlias "Ethernet" -AddressFamily IPv4 -PrefixLength 24
Restart-Computer
วิธีโคลน Hyper-V Virtual Machines โดยใช้ Windows Admin Center
คุณสามารถโคลน Hyper-V VM ได้โดยตรงโดยไม่ต้อง Export และ Import ใน Windows Admin Center v2009 หรือใหม่กว่า
รัน WAC เลือกส่วน Virtual Machines และจากนั้นคลิก VM -> Manage -> Clone
จากนั้นระบุชื่อ VM ใหม่ของคุณและเลือกไดเรกทอรีที่คุณต้องการวางไฟล์ของมัน
รอจนกว่า VM จะถูกโคลน ID ใหม่จะถูกมอบหมายให้ VM ใหม่โดยอัตโนมัติ