다음을 통해 공유


여러 차이점 디스크가 있는 검사점을 병합하는 방법

적용 대상: Windows Server 2022, Windows Server 2019, Windows Server 2016

소개

이 문서에서는 Hyper-V에서 여러 차이점 디스크를 생성한 경우 검사점을 VM(가상 머신)에 병합하는 데 사용할 수 있는 방법을 설명합니다. 사용하는 방법은 상황의 세부 정보에 따라 달라집니다.

Hyper-V 관리자에서 볼 수 있는 검사점 병합

Hyper-V 관리자에서 볼 수 있는 검사점은 가장 간단하게 처리할 수 있습니다. 일반적으로 상황에 맞는 메뉴에서 검사점 삭제 명령을 사용하여 이러한 검사점을 삭제할 수 있습니다.

상황에 맞는 메뉴에 검사점 삭제 명령이 포함된 Hyper-V 관리자의 검사점 스크린샷

경우에 따라 검사점 삭제 및 검사점 삭제 하위 트리가 상황에 맞는 메뉴에 표시되지 않습니다. 이는 타사 백업 소프트웨어가 검사점을 생성하지만 백업 작업 후에 삭제하지 않는 경우에 발생할 수 있습니다.

이러한 경우 Delete 키를 사용하여 검사점을 삭제할 수 있습니다.

요약하면 Hyper-V 관리자에서 검사점을 삭제하고 차이점 디스크 파일을 병합하려면 다음 단계를 수행합니다.

  1. Hyper-V 관리자에서 가상 머신을 선택합니다.
  2. 검사점 목록에서 삭제할 검사점을 마우스 오른쪽 단추로 클릭한 다음 다음 작업 중 하나를 수행합니다.
    • 검사점 삭제를 선택합니다.
    • 검사점 삭제를 사용할 수 없는 경우 검사점을 선택한 다음 Del을 선택합니다.

Hyper-V 관리자에서 볼 수 없는 검사점 병합

Hyper-V 관리자가 특정 VM에 대한 검사점을 표시하지 않는 상황이 발생할 수 있습니다. 동시에 해당 파일 시스템 폴더에는 여러 차이점이 있는 디스크 파일이 표시됩니다. 이는 타사 백업 소프트웨어가 검사점을 생성하지만 백업 작업 후에 삭제하지 않는 경우에 발생할 수 있습니다.

VM을 종료할 수 있는지 여부에 따라 두 가지 방법 중 하나로 차이점 디스크 파일을 병합할 수 있습니다.

VM을 종료할 수 있는 경우

차이점 보관용 디스크 파일을 병합하려면 VM을 종료합니다. 일반적으로 차이점 보관 디스크 파일은 VM 종료 프로세스의 일부로 병합됩니다.

VM을 종료할 수 없는 경우

차이점 보관용 디스크를 온라인 VM에 병합할 수 있습니다. 그러나 Windows PowerShell 스크립트를 포함하는 다단계 프로세스입니다. 이렇게 하려면 다음 일반적인 단계를 수행합니다.

  1. 모든 차이점 디스크 파일(VHD 파일)을 백업합니다.
  2. 함수를 만들고 실행합니다Get-VHDChain. 이 단계는 이 섹션의 뒷부분에 자세히 설명되어 있습니다.
  3. 병합 명령을 만들고 실행합니다. 이 단계는 이 섹션의 뒷부분에 자세히 설명되어 있습니다.
  4. 병합된 부모 VHD를 가리키도록 VM 설정을 변경합니다.
  5. VM을 시작합니다. 성공적인 시작은 병합이 성공적으로 완료되었음을 의미합니다.

Get-VHDChain 함수 만들기 및 실행

  1. Hyper-V 호스트 서버에서 관리 PowerShell 명령 프롬프트 창을 엽니다.

  2. 다음 스크립트를 복사한 다음 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에 대한 차이점 디스크 집합)을 식별하는 함수를 정의합니다.

  3. 다음 명령을 실행합니다.

    Get-vhdchain -name <virtual machine name>
    

    참고 항목

    이 명령 <에서 가상 머신 이름은> 가상 머신의 이름을 나타냅니다.

    스크립트가 실행되면 다음 출력과 유사한 출력이 표시됩니다.

    Get-VHDChain 스크립트의 출력 스크린샷

  4. 오류 없이 실행되는지 확인 Get-VHDChain 합니다.

    Important

    출력에 Get-VHDChain 오류가 포함된 경우 영향을 받는 차이점 디스크를 폴더에서 제거해야 합니다. 다음 예제에서 디스크 24는 오류를 생성했으며 차이점 보관용 디스크 폴더에서 제거해야 합니다.

    스크립트에서 오류를 생성할 때 Get-VHDChain 스크립트의 출력 스크린샷

병합 명령 만들기 및 실행

  1. 다음 지침에서는 C:\temp\merge.txt 스크립트를 만들어 디스크를 병합합니다. 다음 단계를 수행합니다.

    1. 로컬 C: 드라이브에서 temp라는 폴더를 만듭니다.

    2. 관리 PowerShell 창을 열고 다음 명령을 실행합니다.

      $vm = Read-Host("please enter the VMname") 
      
    3. 명령 프롬프트에서 가상 머신 이름을 입력합니다.

    4. 다음 스크립트를 복사한 다음 명령 프롬프트에 붙여넣습니다.

      $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
          }    
      }
      

      스크립트는 다음 스크립트와 유사해야 합니다.

      PowerShell 창에 붙여넣은 스크립트의 스크린샷.

  2. C:\temp\merge.txt 엽니다. 이 파일에는 쌍으로 그룹화된 명령줄 명령 목록이 포함되어 있습니다. 각 명령 쌍은 단일 차이점 디스크에 대한 병합 작업을 정의합니다.

  3. 첫 번째 쌍의 첫 번째 명령을 복사하여 명령 프롬프트에 붙여넣은 다음 실행합니다. 그런 다음 첫 번째 쌍의 두 번째 명령에 대해 동일한 작업을 수행합니다. 이러한 작업은 명령이 처리하는 차이점 디스크를 병합합니다.

  4. 디스크가 병합된 후 목록의 다음 차이점 보관 디스크에 대해 이전 단계를 반복합니다. merge.txt 파일에서 주소를 지정하는 모든 차이점 디스크에 대해 계속합니다.