적용 대상: Windows Server 2022, Windows Server 2019, Windows Server 2016
소개
이 문서에서는 Hyper-V에서 여러 차이점 디스크를 생성한 경우 검사점을 VM(가상 머신)에 병합하는 데 사용할 수 있는 방법을 설명합니다. 사용하는 방법은 상황의 세부 정보에 따라 달라집니다.
Hyper-V 관리자에서 볼 수 있는 검사점 병합
Hyper-V 관리자에서 볼 수 있는 검사점은 가장 간단하게 처리할 수 있습니다. 일반적으로 상황에 맞는 메뉴에서 검사점 삭제 명령을 사용하여 이러한 검사점을 삭제할 수 있습니다.
경우에 따라 검사점 삭제 및 검사점 삭제 하위 트리가 상황에 맞는 메뉴에 표시되지 않습니다. 이는 타사 백업 소프트웨어가 검사점을 생성하지만 백업 작업 후에 삭제하지 않는 경우에 발생할 수 있습니다.
이러한 경우 Delete 키를 사용하여 검사점을 삭제할 수 있습니다.
요약하면 Hyper-V 관리자에서 검사점을 삭제하고 차이점 디스크 파일을 병합하려면 다음 단계를 수행합니다.
- Hyper-V 관리자에서 가상 머신을 선택합니다.
- 검사점 목록에서 삭제할 검사점을 마우스 오른쪽 단추로 클릭한 다음 다음 작업 중 하나를 수행합니다.
- 검사점 삭제를 선택합니다.
- 검사점 삭제를 사용할 수 없는 경우 검사점을 선택한 다음 Del을 선택합니다.
Hyper-V 관리자에서 볼 수 없는 검사점 병합
Hyper-V 관리자가 특정 VM에 대한 검사점을 표시하지 않는 상황이 발생할 수 있습니다. 동시에 해당 파일 시스템 폴더에는 여러 차이점이 있는 디스크 파일이 표시됩니다. 이는 타사 백업 소프트웨어가 검사점을 생성하지만 백업 작업 후에 삭제하지 않는 경우에 발생할 수 있습니다.
VM을 종료할 수 있는지 여부에 따라 두 가지 방법 중 하나로 차이점 디스크 파일을 병합할 수 있습니다.
VM을 종료할 수 있는 경우
차이점 보관용 디스크 파일을 병합하려면 VM을 종료합니다. 일반적으로 차이점 보관 디스크 파일은 VM 종료 프로세스의 일부로 병합됩니다.
VM을 종료할 수 없는 경우
차이점 보관용 디스크를 온라인 VM에 병합할 수 있습니다. 그러나 Windows PowerShell 스크립트를 포함하는 다단계 프로세스입니다. 이렇게 하려면 다음 일반적인 단계를 수행합니다.
- 모든 차이점 디스크 파일(VHD 파일)을 백업합니다.
- 함수를 만들고 실행합니다
Get-VHDChain
. 이 단계는 이 섹션의 뒷부분에 자세히 설명되어 있습니다. - 병합 명령을 만들고 실행합니다. 이 단계는 이 섹션의 뒷부분에 자세히 설명되어 있습니다.
- 병합된 부모 VHD를 가리키도록 VM 설정을 변경합니다.
- VM을 시작합니다. 성공적인 시작은 병합이 성공적으로 완료되었음을 의미합니다.
Get-VHDChain 함수 만들기 및 실행
Hyper-V 호스트 서버에서 관리 PowerShell 명령 프롬프트 창을 엽니다.
다음 스크립트를 복사한 다음 PowerShell 창에 붙여넣습니다.
function Get-VHDChain { [CmdletBinding()] param( [string]$ComputerName = $env:COMPUTERNAME, [string[]]$Name = '*' ) try { $VMs = Get-VM -ComputerName $ComputerName -Name $Name -ErrorAction Stop } catch { Write-Warning $_.Exception.Message } foreach ($vm in $VMs){ $VHDs = ($vm).harddrives.path foreach ($vhd in $VHDs){ Clear-Variable VHDType -ErrorAction SilentlyContinue try { $VHDInfo = $vhd | Get-VHD -ComputerName $ComputerName -ErrorAction Stop } catch { $VHDType = 'Error' $VHDPath = $vhd Write-Verbose $_.Exception.Message } $i = 1 $problem = $false while (($VHDInfo.parentpath -or $i -eq 1) -and (-not($problem))){ If ($VHDType -ne 'Error' -and $i -gt 1){ try { $VHDInfo = $VHDInfo.ParentPath | Get-VHD -ComputerName $ComputerName -ErrorAction Stop } catch { $VHDType = 'Error' $VHDPath = $VHDInfo.parentpath Write-Verbose $_.Exception.Message } } if ($VHDType -ne 'Error'){ $VHDType = $VHDInfo.VhdType $VHDPath = $VHDInfo.path } else { $problem = $true } [pscustomobject]@{ Name = $vm.name VHDNumber = $i VHDType = $VHDType VHD = $VHDPath } $i++ } } } } ==================================
이 스크립트는
Get-VHDChain
VHD 체인(VM에 대한 차이점 디스크 집합)을 식별하는 함수를 정의합니다.다음 명령을 실행합니다.
Get-vhdchain -name <virtual machine name>
참고 항목
이 명령 <에서 가상 머신 이름은> 가상 머신의 이름을 나타냅니다.
스크립트가 실행되면 다음 출력과 유사한 출력이 표시됩니다.
오류 없이 실행되는지 확인
Get-VHDChain
합니다.Important
출력에
Get-VHDChain
오류가 포함된 경우 영향을 받는 차이점 디스크를 폴더에서 제거해야 합니다. 다음 예제에서 디스크 24는 오류를 생성했으며 차이점 보관용 디스크 폴더에서 제거해야 합니다.
병합 명령 만들기 및 실행
다음 지침에서는 C:\temp\merge.txt 스크립트를 만들어 디스크를 병합합니다. 다음 단계를 수행합니다.
로컬 C: 드라이브에서 temp라는 폴더를 만듭니다.
관리 PowerShell 창을 열고 다음 명령을 실행합니다.
$vm = Read-Host("please enter the VMname")
명령 프롬프트에서 가상 머신 이름을 입력합니다.
다음 스크립트를 복사한 다음 명령 프롬프트에 붙여넣습니다.
$vhds=Get-VM $vm | Select-Object -Property VMId | Get-VHD if (Test-Path '.\merge.txt'){Remove-Item -Path '.\merge.txt'} foreach($vhd in $vhds){ $chain=[ordered]@{} while ($vhd.ParentPath){ $chain.add($vhd.Path,$vhd.ParentPath) $vhd=Get-VHD -Path $vhd.ParentPath } $chain.GetEnumerator() | ForEach-Object { $line='Merge-VHD -Path "{0}" -Destination "{1}"' -f $_.key, $_.value $line | Out-File -FilePath .\merge.txt -Append } }
스크립트는 다음 스크립트와 유사해야 합니다.
C:\temp\merge.txt 엽니다. 이 파일에는 쌍으로 그룹화된 명령줄 명령 목록이 포함되어 있습니다. 각 명령 쌍은 단일 차이점 디스크에 대한 병합 작업을 정의합니다.
첫 번째 쌍의 첫 번째 명령을 복사하여 명령 프롬프트에 붙여넣은 다음 실행합니다. 그런 다음 첫 번째 쌍의 두 번째 명령에 대해 동일한 작업을 수행합니다. 이러한 작업은 명령이 처리하는 차이점 디스크를 병합합니다.
디스크가 병합된 후 목록의 다음 차이점 보관 디스크에 대해 이전 단계를 반복합니다. merge.txt 파일에서 주소를 지정하는 모든 차이점 디스크에 대해 계속합니다.