Freigeben über


Zusammenführen von Prüfpunkten mit mehreren unterschiedlichen 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 unterschiedliche Datenträger generiert hat. Die methode, die 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 handhaben. 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 auftreten, wenn Sicherungssoftware von Drittanbietern Prüfpunkte generiert, sie aber nach einem Sicherungsvorgang nicht löscht.

In diesen Fällen können Sie den Prüfpunkt weiterhin mit der ENTF-TASTE löschen.

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

  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 der Löschprüfpunkt nicht verfügbar ist, wählen Sie den Prüfpunkt aus, und wählen Sie 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 unterschiedlichen Datenträgerdateien an. Dies kann auftreten, wenn Sicherungssoftware von Drittanbietern Prüfpunkte generiert, sie aber nach einem Sicherungsvorgang nicht löscht.

Sie können die unterschiedlichen 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

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

Wenn Sie den virtuellen Computer nicht herunterfahren können

Sie können unterschiedliche 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 unterschiedlichen 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 Zusammenführungsbefehlen. 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 die VM. 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 identifiziert (die Gruppe von unterschiedlichen Datenträgern für die VM).

  3. Führen Sie den folgenden Befehl aus:

    Get-vhdchain -name <virtual machine name>
    

    Notiz

    In diesem Befehl <stellt der Name> des virtuellen Computers den Namen des virtuellen Computers dar.

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

    Screenshot der Ausgabe des Skripts

  4. Stellen Sie sicher, dass die Get-VHDChain Ausführung ohne Fehler ausgeführt wird.

    Wichtig

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

    Screenshot der Ausgabe des Skripts

Erstellen und Ausführen von Zusammenführungsbefehlen

  1. Die folgenden Anweisungen erstellen ein Skript in C:\temp\merge.txt , um die Datenträger zusammenzuführen. Führen Sie folgende Schritte aus:

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

    2. Öffnen Sie ein PowerShell-Verwaltungsfenster, 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 der Befehlszeilenbefehle, die in Paaren gruppiert sind. Jedes Befehlspaar definiert die Zusammenführungsvorgänge für einen einzelnen unterschiedlichen Datenträger.

  3. Kopieren Sie den ersten Befehl des ersten Paars, fügen Sie ihn an der Eingabeaufforderung ein, und führen Sie ihn aus. Führen Sie dann dieselbe Aktion für den zweiten Befehl des ersten Paars aus. Diese Vorgänge führen den unterschiedlichen Datenträger zusammen, den die Befehlsadresse hat.

  4. Wiederholen Sie nach dem Zusammenführen des Datenträgers die vorherigen Schritte für den nächsten unterschiedlichen Datenträger in der Liste. Fahren Sie für alle unterschiedlichen Datenträger fort, die von den merge.txt Dateiadressen verwendet werden.