Freigeben über


Zusammenführen von Prüfpunkten mit mehreren differenzierenden Datenträgern

Gilt für: Windows Server 2022, Windows Server 2019, Windows Server 2016

Einführung

In diesem Artikel werden Methoden beschrieben, mit denen Sie Prüfpunkte in einem virtuellen Computer (VM) zusammenführen können, wenn Hyper-V viele differenzierende Datenträger generiert hat. Welche Methode Sie verwenden, hängt von den Details der Situation ab.

Zusammenführen von Prüfpunkten, die Sie im Hyper-V-Manager anzeigen können

Prüfpunkte, die Sie im Hyper-V-Manager anzeigen können, sind am einfachsten zu behandeln. In der Regel können Sie den Befehl Prüfpunkt löschen im Kontextmenü verwenden, um diese Prüfpunkte zu löschen.

Screenshot eines Prüfpunkts im Hyper-V-Manager, in dem das Kontextmenü den Befehl

In einigen Fällen werden prüfpunkt löschen und Prüfpunktunterstruktur löschen nicht im Kontextmenü angezeigt. Dies kann vorkommen, wenn Sicherungssoftware von Drittanbietern Prüfpunkte generiert, diese aber nach einem Sicherungsvorgang nicht löscht.

In diesen Fällen können Sie den Prüfpunkt weiterhin mit dem Entf-Schlüssel löschen.

Um Prüfpunkte im Hyper-V-Manager zu löschen (und die differenzierenden Datenträgerdateien zusammenzuführen), führen Sie die folgenden Schritte aus:

  1. Wählen Sie im Hyper-V-Manager den virtuellen Computer aus.
  2. Klicken Sie in der Liste Prüfpunkte mit der rechten Maustaste auf den Prüfpunkt, den Sie löschen möchten, und führen Sie dann eine der folgenden Aktionen aus:
    • Wählen Sie Prüfpunkt löschen aus.
    • Wenn Prüfpunkt löschen nicht verfügbar ist, wählen Sie den Prüfpunkt und dann Entf aus.

Zusammenführen von Prüfpunkten, die im Hyper-V-Manager nicht angezeigt werden können

Möglicherweise tritt eine Situation auf, in der Hyper-V-Manager keine Prüfpunkte für einen bestimmten virtuellen Computer anzeigt. Gleichzeitig zeigt der entsprechende Dateisystemordner viele differenzierende Datenträgerdateien an. Dies kann vorkommen, wenn Sicherungssoftware von Drittanbietern Prüfpunkte generiert, diese aber nach einem Sicherungsvorgang nicht löscht.

Sie können die differenzierenden Datenträgerdateien auf eine von zwei Arten zusammenführen, je nachdem, ob Sie den virtuellen Computer herunterfahren können.

Wenn Sie den virtuellen Computer herunterfahren können

Fahren Sie den virtuellen Computer herunter, um die differenzierenden Datenträgerdateien zusammenzuführen. In der Regel werden die differenzierenden Datenträgerdateien im Rahmen des Herunterfahrens der VM zusammengeführt.

Wenn Sie den virtuellen Computer nicht herunterfahren können

Sie können differenzierende Datenträger in einer Online-VM zusammenführen. Dies ist jedoch ein mehrstufiger Prozess, der Windows PowerShell Skripts umfasst. Führen Sie dazu die folgenden allgemeinen Schritte aus:

  1. Sichern Sie alle differenzierenden Datenträgerdateien (VHD-Dateien).
  2. Erstellen Sie die Funktion, und führen Sie sie Get-VHDChain aus. Dieser Schritt wird weiter unten in diesem Abschnitt ausführlich beschrieben.
  3. Erstellen und Ausführen von Mergebefehlen Dieser Schritt wird weiter unten in diesem Abschnitt ausführlich beschrieben.
  4. Ändern Sie die VM-Einstellungen so, dass sie auf die zusammengeführte übergeordnete VHD verweisen.
  5. Starten Sie den virtuellen Computer. Ein erfolgreicher Start bedeutet, dass die Zusammenführung erfolgreich abgeschlossen wurde.

Erstellen und Ausführen der Get-VHDChain-Funktion

  1. Öffnen Sie auf dem Hyper-V-Hostserver ein Administratives PowerShell-Eingabeaufforderungsfenster.

  2. Kopieren Sie das folgende Skript, und fügen Sie es dann in das PowerShell-Fenster ein:

    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++
                }
            }
        }
    }
    ==================================
    

    Dieses Skript definiert eine Get-VHDChain Funktion, die die VHD-Kette (den Satz differenzierender Datenträger für den virtuellen Computer) identifiziert.

  3. Führen Sie den folgenden Befehl aus:

    Get-vhdchain -name <virtual machine name>
    

    Hinweis

    In diesem Befehl < steht der Name > des virtuellen Computers für den Namen des virtuellen Computers.

    Wenn das Skript ausgeführt wird, sollte eine Ausgabe angezeigt werden, die der folgenden Ausgabe ähnelt.

    Screenshot der Ausgabe des Get-VHDChain-Skripts.

  4. Stellen Sie sicher, dass Get-VHDChain fehlerfrei ausgeführt wird.

    Wichtig

    Wenn die Get-VHDChain Ausgabe Fehler enthält, müssen Sie die betroffenen differenzierenden Datenträger aus dem Ordner entfernen. Im folgenden Beispiel hat Datenträger 24 einen Fehler generiert und muss aus dem differenzierenden Datenträgerordner entfernt werden.

    Screenshot der Ausgabe des Get-VHDChain Skripts, wenn das Skript einen Fehler generiert.

Erstellen und Ausführen von Mergebefehlen

  1. Die folgenden Anweisungen erstellen ein Skript in C:\temp\merge.txt zum Zusammenführen der Datenträger. Gehen Sie folgendermaßen vor:

    1. Erstellen Sie auf dem lokalen Laufwerk C: einen Ordner mit dem Namen temp.

    2. Öffnen Sie ein Administratives PowerShell-Fenster, und führen Sie dann den folgenden Befehl aus:

      $vm = Read-Host("please enter the VMname") 
      
    3. Geben Sie an der Eingabeaufforderung den Namen des virtuellen Computers ein.

    4. Kopieren Sie das folgende Skript, und fügen Sie es dann an der Eingabeaufforderung ein.

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

      Das Skript sollte dem folgenden Skript ähneln:

      Screenshot des Skripts, nachdem es in ein PowerShell-Fenster eingefügt wurde.

  2. Öffnen Sie C:\temp\merge.txt. Diese Datei enthält eine Liste von Befehlszeilenbefehlen, die in Paaren gruppiert sind. Jedes Befehlspaar definiert die Zusammenführungsvorgänge für einen einzelnen differenzierenden Datenträger.

  3. Kopieren Sie den ersten Befehl des ersten Paars, fügen Sie ihn an der Eingabeaufforderung ein, und führen Sie ihn dann aus. Führen Sie dann die gleichen Schritte für den zweiten Befehl des ersten Paars aus. Bei diesen Vorgängen wird der differenzierende Datenträger zusammengeführt, den die Befehle adressieren.

  4. Wiederholen Sie nach dem Zusammenführen des Datenträgers die vorherigen Schritte für den nächsten Differenzdatenträger in der Liste. Fahren Sie mit allen differenzierenden Datenträgern fort, die von der merge.txt-Datei adressiert werden.