Compartir a través de


Cómo combinar puntos de control que tienen varios discos de diferenciación

Resumen

Al trabajar con Hyper-V checkpoints, es posible que tenga que combinar los discos diferenciales asociados en la máquina virtual (VM). En la mayoría de los casos, puede eliminar puntos de control mediante Hyper-V Manager, que combina automáticamente los discos de diferenciación. Sin embargo, en algunas situaciones, como cuando el software de copia de seguridad de terceros crea puntos de control pero no los limpia, es posible que encuentre puntos de control que no aparezcan en Hyper-V Manager o que no se puedan eliminar a través de la interfaz estándar.

En este artículo se describe cómo:

  • Elimine los puntos de control y fusione discos de diferenciación mediante Hyper-V Manager.
  • Combinar discos diferenciales cuando los puntos de control no están visibles en Hyper-V Manager.
  • Usar scripts de PowerShell para combinar discos diferenciales sin apagar la máquina virtual.

Elija el método que mejor se adapte a su escenario en función de si los puntos de control están visibles en Hyper-V Manager y si puede apagar la máquina virtual.

Combinar puntos de control que puede ver en Hyper-V Manager

Los puntos de control que puede ver en Hyper-V Manager son los más sencillos de controlar. Normalmente, puede usar el comando Eliminar punto de control en el menú contextual para eliminar estos puntos de control.

Captura de pantalla de un punto de control en Hyper-V Administrador en el que el menú contextual incluye el comando Eliminar punto de control.

En algunos casos, Delete Checkpoint y Delete Checkpoint Subtree no aparecen en el menú contextual. Esto puede ocurrir si el software de copia de seguridad de terceros genera puntos de comprobación, pero no los elimina después de una operación de copia de seguridad.

En estos casos, todavía puede usar la clave Eliminar para eliminar el punto de control.

En resumen, para eliminar puntos de control en Hyper-V Manager (y combinar los archivos de disco de diferenciación), siga estos pasos:

  1. En Hyper-V Manager, seleccione la máquina virtual.
  2. En la lista Puntos de control , haga clic con el botón derecho en el punto de control que desea eliminar y, a continuación, realice una de las siguientes acciones:
    • Seleccione Eliminar punto de control.
    • Si Eliminar punto de control no está disponible, seleccione el punto de control y, a continuación, seleccione Del.

Combinar puntos de control que no se pueden ver en Hyper-V Manager

Es posible que encuentre una situación en la que Hyper-V Manager no muestre puntos de control para una máquina virtual específica. Al mismo tiempo, la carpeta correspondiente del sistema de archivos muestra muchos archivos de disco diferencial. Esto puede ocurrir si el software de copia de seguridad de terceros genera puntos de comprobación, pero no los elimina después de una operación de copia de seguridad.

Puede fusionar los archivos de disco de diferenciación de una de estas dos maneras, dependiendo de si puede apagar la máquina virtual.

Cuando se puede apagar la máquina virtual

Apague la máquina virtual para combinar los archivos de disco diferencial. Normalmente, los archivos de disco de diferenciación se fusionan como parte del proceso de apagado de la máquina virtual.

Cuando no se puede apagar la máquina virtual

Puede combinar discos diferenciales en una máquina virtual en ejecución. Sin embargo, se trata de un proceso de varios pasos que implica scripts de Windows PowerShell. Para ello, siga estos pasos generales:

  1. Realice una copia de seguridad de todos los archivos de disco de diferenciación (archivos VHD).
  2. Cree y ejecute la Get-VHDChain función . Este paso se describe en detalle más adelante en esta sección.
  3. Cree y ejecute comandos de combinación. Este paso se describe en detalle más adelante en esta sección.
  4. Cambie la configuración de la máquina virtual para que apunte al disco duro virtual (VHD) principal combinado.
  5. Inicie la máquina virtual. Un inicio correcto significa que la combinación se completó correctamente.

Creación y ejecución de la función Get-VHDChain

  1. En el servidor host de Hyper-V, abra una ventana administrativa del símbolo del sistema de PowerShell.

  2. Copie el siguiente script y péguelo en la ventana de 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++
                }
            }
        }
    }
    
    

    Este script define una Get-VHDChain función que identifica la cadena de VHD (el conjunto de discos de diferenciación para la máquina virtual).

  3. Ejecute el siguiente comando:

    Get-vhdchain -name <virtual machine name>
    

    Nota:

    En este comando, <nombre de la máquina virtual> representa el nombre de la máquina virtual.

    Cuando se ejecuta el script, debería ver una salida similar a la siguiente.

    Captura de pantalla de la salida del script de Get-VHDChain.

  4. Asegúrese de que Get-VHDChain se ejecuta sin errores.

    Importante

    Si el Get-VHDChain resultado contiene errores, tiene que quitar los discos de diferenciación afectados de la carpeta. En el siguiente ejemplo, el Disco 24 generó un error y se debe quitar de la carpeta de disco diferencial.

    Captura de pantalla de la salida del script de Get-VHDChain cuando el script genera un error.

Creación y ejecución de comandos de combinación

  1. Las instrucciones siguientes crean un script en C:\temp\merge.txt para combinar los discos. Siga estos pasos:

    1. En la unidad C: local, cree una carpeta denominada temp.

    2. Abra una ventana de PowerShell administrativo y, a continuación, ejecute el siguiente comando:

      $vm = Read-Host("please enter the VMname") 
      
    3. En el símbolo del sistema, escriba el nombre de la máquina virtual.

    4. Copie el siguiente script y péguelo en el símbolo del sistema.

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

      El script debe ser similar al siguiente script:

      Captura de pantalla del script después de pegarlo en una ventana de PowerShell.

  2. Abra C:\temp\merge.txt. Este archivo contiene una lista de comandos de línea de comandos que se agrupan en pares. Cada par de comandos define las operaciones de combinación para un único disco de diferenciación.

  3. Copie el primer comando del primer par, péguelo en el símbolo del sistema y, a continuación, ejecútelo. A continuación, siga el mismo procedimiento para el segundo comando del primer par. Estas operaciones combinan el disco diferencial que los comandos especifican.

  4. Después de combinar el disco, repita los pasos anteriores para el siguiente disco diferencial de la lista. Continúe con todos los discos de diferenciación que menciona el archivo merge.txt.