VMware와 달리 Hyper-V에는 가상 머신(VM)을 복제하는 기능이 기본 제공되지 않습니다(복제는 Virtual Machine Manager에서만 지원). 기존 VM의 전체 사본을 만들려면 Hyper-V의 내보내기와 가져오기 기능을 활용해야 합니다. 이 글에서는 Hyper-V 관리자 GUI, PowerShell, 그리고 Windows Admin Center(WAC)를 사용해 Hyper-V에서 가상 머신을 복제하는 세 가지 방법을 소개합니다.
복제 전 필수 확인 사항: Windows SID 초기화
Windows 게스트 OS가 실행 중인 가상 머신을 복제할 때는 복제본이 원본과 동일한 SID(Security Identifier)를 갖게 된다는 점에 유의해야 합니다. 반드시 Sysprep 도구를 사용해 Windows 게스트의 SID를 초기화해야 합니다. 참조용 Windows 이미지를 만든 경우 복제하기 전에 아래 명령을 실행하세요:
%WINDIR%\system32\sysprep\sysprep.exe /generalize /shutdown /oobe
명령을 실행하면 VM이 종료되며, 다음 부팅 시 원본 VM과 복제본 모두에서 새로운 SID가 생성됩니다. 또한 Active Directory 도메인에 가입된 VM은 복제하지 않는 것이 좋습니다.
목차
- Hyper-V 관리자에서 VM 내보내기 및 가져오기
- PowerShell로 Hyper-V VM 내보내기, 가져오기, 복제하기
- Windows Admin Center로 Hyper-V 가상 머신 복제하기
Hyper-V 관리자에서 VM 내보내기 및 가져오기
먼저 VM을 별도의 디렉터리로 내보냅니다. Hyper-V 관리자 콘솔을 열고 대상 VM을 마우스 오른쪽 버튼으로 클릭한 뒤 컨텍스트 메뉴에서 내보내기(Export)를 선택합니다.
Windows Server 2012 R2 이상(무료 Hyper-V Server 포함)의 Hyper-V에서는 가상 머신을 중지하지 않고도 실행 중인 상태 그대로 내보낼 수 있습니다.

가상 머신을 내보낼 대상 디렉터리를 지정합니다.

내보내기 진행 상태는 Hyper-V 콘솔의 VM 상태 창에 표시됩니다.
많은 관리자들이 VM 내보내기를 Hyper-V에서 가장 간편한 VM 백업 방법으로 활용하고 있습니다.

특정 검사점(스냅샷)만 내보낼 수도 있습니다. 검사점 트리에서 해당 검사점을 마우스 오른쪽 버튼으로 클릭하고 내보내기를 선택하면 됩니다.

VM을 가져오려면 Hyper-V 관리자에서 호스트 이름을 클릭하고 가상 머신 가져오기(Import Virtual Machine)를 선택합니다.

그런 다음 가져올 VM 파일이 들어 있는 폴더의 경로를 지정합니다. Hyper-V에서 VM을 가져올 때는 호스트에 VM을 등록하는 세 가지 옵션이 제공됩니다:
- 가상 머신을 현재 위치에 등록(기존 고유 ID 사용) — 가져온 파일이 있는 디렉터리에 VM을 등록합니다(VM ID 유지)
- 가상 머신 복원(기존 고유 ID 사용) — VM 파일을 다른 폴더로 복사합니다(원래 VM ID 유지)
- 가상 머신 복사(새 고유 ID 생성) — VM을 다른 디렉터리로 복사하고 새 VM ID를 생성합니다

Hyper-V 호스트의 각 VM은 호스트 내에서 고유해야 하는 ID를 가집니다. 따라서 다른 호스트로 VM을 가져오거나 복제하는 경우에는 VM ID를 변경할 필요가 없습니다.
반면 중복된 ID를 가진 VM을 같은 호스트에 가져오려고 하면 다음과 같은 오류가 발생합니다:
The operation failed because a virtual machine with the same identifier already exists. Select a new identifier and try the operation again.
새 ID를 가진 VM 복제본을 만들기 위해 여기서는 세 번째 옵션을 선택했습니다. 마법사가 VM 파일을 저장할 폴더를 지정하도록 안내하며, 기본적으로 Hyper-V 호스트 설정에 지정된 폴더가 사용됩니다.

그런 다음 가상 머신의 가상 디스크(VHDX 파일)가 저장될 디렉터리를 선택합니다.

모든 단계가 완료되면 새로 복제된 가상 머신이 Hyper-V 콘솔에 나타납니다.
PowerShell로 Hyper-V VM 내보내기, 가져오기, 복제하기
이번에는 PowerShell을 사용해 내보내기/가져오기 방식으로 Hyper-V 가상 머신을 복제하는 방법을 살펴보겠습니다.
VM을 내보내려면 아래 명령을 실행합니다:
Export-VM -Name win10 -Path 'C:\VHD\export'

실행 중인 VM을 내보낼 때는 VM 메모리 처리 방식을 결정하는 CaptureLiveState 옵션을 사용할 수 있습니다. 세 가지 옵션이 있습니다:
CaptureSavedState– 메모리 내용까지 내보냄(기본값)CaptureDataConsistentState– Hyper-V 프로덕션 검사점 기준의 VM 상태를 내보냄CaptureCrashConsistentState– 메모리 내용을 저장하지 않음
Export-VM -Name win10 -Path 'C:\VHD\export' -CaptureLiveState CaptureCrashConsistentState
특정 검사점의 VM 상태를 내보내려면 해당 검사점의 이름을 지정하면 됩니다.
먼저 VM에서 사용 가능한 검사점 목록을 확인합니다:
Get-VMSnapshot -VMName win10
그다음 검사점 이름으로 내보냅니다:
Export-VMSnapshot -Name "win10 - (6/17/2021 - 3:12:205 PM) Standard" -VMName win10 -Path 'C:\VHD\export'

VM을 내보낸 후에는 가져올 수 있습니다. 현재 위치에 그대로 등록하려면 다음 명령을 실행합니다:
Import-VM -Path "C:\VHD\export\win10\Virtual Machines\212cadd2-6543-bc2d-ca11-321ffa223f3b.vmcx"
Path 옵션에는 VM 구성 파일의 위치를 지정합니다(VMCX 파일 형식은 Hyper-V Server 2016부터 기존 XML 형식 구성 파일을 대체했습니다). 동일한 ID로 VM을 다른 폴더에 복사하려면 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는 VM의 VHDX 파일이 복사될 디렉터리를 지정하고, VirtualMachinePath는 VM 구성 파일이 저장될 디렉터리를 설정합니다. 옵션을 지정하지 않으면 VM 파일은 Hyper-V 호스트 설정에 지정된 기본 디렉터리(C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\)로 복사됩니다.
추가로 검사점 저장 폴더(SnapshotFilePath)와 스마트 페이징 파일(SmartPagingFilePath) 경로도 지정할 수 있습니다.

복제된 VM이 원본과 같은 이름으로 Hyper-V 콘솔에 나타난 것을 확인할 수 있습니다. 이름을 변경하려면 먼저 VMID를 확인해야 합니다:
get-vm | select VMNAME,VMId
호스트에 동일한 이름과 서로 다른 ID를 가진 두 개의 VM이 있는 것을 볼 수 있습니다. 가져온 VM의 ID와 다른 ID를 가진 새 VM의 이름을 변경합니다. 새 VM의 ID를 복사한 뒤 이름을 변경합니다:
get-vm | Where-Object {$_.VMId -eq "9a9d3332-f332-a231-8abc-9221aab32287"} | Rename-VM -NewName win10_2

그다음 가상 하드 디스크 파일의 이름도 변경할 수 있습니다:
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 주소도 변경합니다(새 정적 MAC 주소를 지정하거나 동적 할당 방식으로 구성할 수 있습니다).
Set-VMNetworkAdapter -VMName win10_2 -DynamicMacAddress
Start-VM -Name win10_2

새 VM을 네트워크에 연결하기 전에 컴퓨터 이름을 변경하고 새 IP 주소를 할당하는 것이 좋습니다(내부 네트워크에서 DHCP를 사용한다면 이 단계는 건너뛰어도 됩니다). 이후 Invoke-Command 또는 Enter-PSSession cmdlet을 사용해 PowerShell Direct로 새 VM에 연결할 수 있습니다:
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
Windows Admin Center로 Hyper-V 가상 머신 복제하기
Windows Admin Center v2009 이상에서는 내보내기/가져오기 과정 없이 Hyper-V VM을 직접 복제할 수 있습니다.
WAC를 실행하고 가상 머신 섹션을 선택한 후 VM → 관리 → 복제(Clone)를 차례로 클릭합니다.

그런 다음 새 VM의 이름을 지정하고 파일을 저장할 디렉터리를 선택합니다.

복제 마법사에는 "I have already run Sysprep on my VM(VM에서 이미 Sysprep을 실행했음)"이라는 옵션이 있습니다. Sysprep으로 이미지를 일반화하지 않은 상태에서 이 옵션을 활성화하지 않으면, Hyper-V가 원본 VM의 스냅샷을 생성한 뒤 Sysprep을 실행하고 새 VM으로 복제합니다. 이 과정에서 원본 VM이 여러 번 재시작되며 일시적으로 사용할 수 없습니다. 작업이 끝나면 원본 VM은 원래 상태로 되돌아가고 스냅샷은 자동으로 삭제됩니다.
참고로 Windows가 아닌 게스트 OS를 사용하는 VM을 복제할 때는 항상 위 옵션을 활성화해야 합니다.

VM 복제가 완료될 때까지 기다립니다. 새 VM에는 새로운 ID가 자동으로 할당됩니다.
