Compartir a través de


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

Se aplica a: Windows Server 2022, Windows Server 2019, Windows Server 2016

Introducción

En este artículo se describen los métodos que puede usar para combinar puntos de control en una máquina virtual (VM) si Hyper-V ha generado muchos discos de diferenciación. El método que usa depende de los detalles de la situación.

Combinación de puntos de control que puede ver en el Administrador de Hyper-V

Los puntos de control que puede ver en el Administrador de Hyper-V 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 el Administrador de Hyper-V en el que el menú contextual incluye el comando Eliminar punto de control.

En algunos casos, el subárbol Delete Checkpoint y Delete Checkpoint 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 el Administrador de Hyper-V (y combinar los archivos de disco de diferenciación), siga estos pasos:

  1. En Administrador de Hyper-V, 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.

Combinación de puntos de control que no se pueden ver en el Administrador de Hyper-V

Es posible que encuentre una situación en la que el Administrador de Hyper-V no muestre puntos de control para una máquina virtual específica. Al mismo tiempo, la carpeta del sistema de archivos correspondiente muestra muchos archivos de disco de diferenciación. 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 combinar los archivos de disco de diferenciación de una de estas dos maneras, en función de si puede apagar la máquina virtual.

Cuando se puede apagar la máquina virtual

Para combinar los archivos de disco de diferenciación, apague la máquina virtual. Normalmente, los archivos de disco de diferenciación se combinan como parte del proceso de apagado de la máquina virtual.

Cuando no se puede apagar la máquina virtual

Puede combinar discos de diferenciación en una máquina virtual en línea. 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 primario 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 comando siguiente:

    Get-vhdchain -name <virtual machine name>
    

    Nota

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

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

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

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

    Importante

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

    Captura de pantalla de la salida del script 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, haga lo mismo para el segundo comando del primer par. Estas operaciones combinan el disco de diferenciación que direccionan los comandos.

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