Udostępnij za pośrednictwem


Jak scalić punkty kontrolne z wieloma dyskami różnicowymi

Dotyczy: Windows Server 2022, Windows Server 2019, Windows Server 2016

Wprowadzenie

W tym artykule opisano metody, których można użyć do scalania punktów kontrolnych z maszyną wirtualną, jeśli funkcja Hyper-V wygenerowała wiele dysków różnicowych. Używana metoda zależy od szczegółów sytuacji.

Scalanie punktów kontrolnych, które można wyświetlić w Menedżerze funkcji Hyper-V

Punkty kontrolne, które można wyświetlić w Menedżerze funkcji Hyper-V, są najprostsze do obsłużenia. Zazwyczaj można użyć polecenia Usuń punkt kontrolny w menu kontekstowym, aby usunąć te punkty kontrolne.

Zrzut ekranu przedstawiający punkt kontrolny w Menedżerze funkcji Hyper-V, w którym menu kontekstowe zawiera polecenie Usuń punkt kontrolny.

W niektórych przypadkach usuń punkt kontrolny i usuń poddrzewo punktu kontrolnego nie są wyświetlane w menu kontekstowym. Taka sytuacja może wystąpić, jeśli oprogramowanie do tworzenia kopii zapasowych innej firmy generuje punkty kontrolne, ale nie usuwa ich po operacji tworzenia kopii zapasowej.

W takich przypadkach nadal można użyć klucza Usuń, aby usunąć punkt kontrolny.

Podsumowując, aby usunąć punkty kontrolne w Menedżerze funkcji Hyper-V (i scalić pliki dysków różnicowych), wykonaj następujące kroki:

  1. W Menedżerze funkcji Hyper-V wybierz maszynę wirtualną.
  2. Na liście Punkty kontrolne kliknij prawym przyciskiem myszy punkt kontrolny, który chcesz usunąć, a następnie wykonaj jedną z następujących akcji:
    • Wybierz pozycję Usuń punkt kontrolny.
    • Jeśli usuwanie punktu kontrolnego nie jest dostępne, wybierz punkt kontrolny, a następnie wybierz pozycję Del.

Scalanie punktów kontrolnych, których nie można wyświetlić w Menedżerze funkcji Hyper-V

Może wystąpić sytuacja, w której Menedżer funkcji Hyper-V nie wyświetla punktów kontrolnych dla określonej maszyny wirtualnej. W tym samym czasie odpowiedni folder systemu plików zawiera wiele różnicowych plików dysku. Taka sytuacja może wystąpić, jeśli oprogramowanie do tworzenia kopii zapasowych innej firmy generuje punkty kontrolne, ale nie usuwa ich po operacji tworzenia kopii zapasowej.

Pliki dysku różnicowego można scalić na jeden z dwóch sposobów, w zależności od tego, czy można zamknąć maszynę wirtualną.

Kiedy można zamknąć maszynę wirtualną

Aby scalić pliki dysków różnicowych, zamknij maszynę wirtualną. Zazwyczaj różnicowe pliki dysków są scalane w ramach procesu zamykania maszyny wirtualnej.

Kiedy nie można zamknąć maszyny wirtualnej

Dyski różnicowe można scalić z maszyną wirtualną online. Jest to jednak wieloetapowy proces obejmujący skrypty programu Windows PowerShell. Aby to zrobić, wykonaj następujące ogólne kroki:

  1. Tworzenie kopii zapasowej wszystkich plików dysków różnicowych (plików VHD).
  2. Utwórz i uruchom Get-VHDChain funkcję. Ten krok został szczegółowo opisany w dalszej części tej sekcji.
  3. Tworzenie i uruchamianie poleceń scalania. Ten krok został szczegółowo opisany w dalszej części tej sekcji.
  4. Zmień ustawienia maszyny wirtualnej, aby wskazywały scalony nadrzędny wirtualny dysk twardy.
  5. Uruchom maszynę wirtualną. Pomyślne uruchomienie oznacza, że scalanie zostało ukończone pomyślnie.

Tworzenie i uruchamianie funkcji Get-VHDChain

  1. Na serwerze hosta funkcji Hyper-V otwórz administracyjne okno wiersza polecenia programu PowerShell.

  2. Skopiuj następujący skrypt, a następnie wklej go w oknie programu 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++
                }
            }
        }
    }
    ==================================
    

    Ten skrypt definiuje Get-VHDChain funkcję, która identyfikuje łańcuch dysków VHD (zestaw dysków różnicowych dla maszyny wirtualnej).

  3. Uruchom następujące polecenie:

    Get-vhdchain -name <virtual machine name>
    

    Uwaga

    W tym poleceniu <nazwa> maszyny wirtualnej reprezentuje nazwę maszyny wirtualnej.

    Po uruchomieniu skryptu powinny zostać wyświetlone dane wyjściowe podobne do następujących danych wyjściowych.

    Zrzut ekranu przedstawiający dane wyjściowe skryptu Get-VHDChain.

  4. Upewnij się, że Get-VHDChain działa bez błędów.

    Ważne

    Jeśli dane Get-VHDChain wyjściowe zawierają błędy, należy usunąć dyski różnicowe, których dotyczy problem, z folderu. W poniższym przykładzie dysk 24 wygenerował błąd i należy go usunąć z folderu dysku różnicowego.

    Zrzut ekranu przedstawiający dane wyjściowe skryptu Get-VHDChain, gdy skrypt generuje błąd.

Tworzenie i uruchamianie poleceń scalania

  1. Poniższe instrukcje umożliwiają utworzenie skryptu w folderze C:\temp\merge.txt w celu scalenia dysków. Wykonaj te kroki:

    1. Na lokalnym dysku C: utwórz folder o nazwie temp.

    2. Otwórz okno administracyjne programu PowerShell, a następnie uruchom następujące polecenie:

      $vm = Read-Host("please enter the VMname") 
      
    3. W wierszu polecenia wprowadź nazwę maszyny wirtualnej.

    4. Skopiuj poniższy skrypt, a następnie wklej go w wierszu polecenia.

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

      Skrypt powinien przypominać następujący skrypt:

      Zrzut ekranu przedstawiający skrypt po wklejeniu go do okna programu PowerShell.

  2. Otwórz plik C:\temp\merge.txt. Ten plik zawiera listę poleceń wiersza polecenia, które są pogrupowane w pary. Każda para poleceń definiuje operacje scalania dla pojedynczego dysku różnicowego.

  3. Skopiuj pierwsze polecenie pierwszej pary, wklej je w wierszu polecenia, a następnie uruchom je. Następnie wykonaj to samo dla drugiego polecenia pierwszej pary. Te operacje scalają dysk różnicowy, z którego odnoszą się polecenia.

  4. Po scaleniu dysku powtórz powyższe kroki dla następnego dysku różnicowego na liście. Kontynuuj dla wszystkich dysków różnicowych, które merge.txt adresy plików.