Compartilhar via


Como mesclar pontos de verificação com vários discos diferenciais

Aplica-se a: Windows Server 2022, Windows Server 2019, Windows Server 2016

Introdução

Este artigo descreve os métodos que você pode usar para mesclar pontos de verificação em uma VM (máquina virtual) se o Hyper-V tiver gerado muitos discos diferenciais. O método que você usa depende dos detalhes da situação.

Mesclando pontos de verificação que você pode exibir no Gerenciador do Hyper-V

Os pontos de verificação que você pode exibir no Gerenciador do Hyper-V são os mais simples de manipular. Normalmente, você pode usar o comando Excluir Ponto de Verificação no menu de contexto para excluir esses pontos de verificação.

Captura de tela de um ponto de verificação no Gerenciador do Hyper-V no qual o menu de contexto inclui o comando Excluir Ponto de Verificação.

Em alguns casos, Excluir ponto de verificação e Excluir subárvore de ponto de verificação não aparecem no menu de contexto. Isso pode ocorrer se o software de backup de terceiros gerar pontos de verificação, mas não os excluir após uma operação de backup.

Nesses casos, você ainda pode usar a tecla Delete para excluir o ponto de verificação.

Em resumo, para excluir pontos de verificação no Gerenciador do Hyper-V (e mesclar os arquivos de disco diferenciais), siga estas etapas:

  1. Em Hyper-V Manager, selecione a máquina virtual.
  2. Na lista Pontos de verificação, clique com o botão direito do mouse no ponto de verificação que você deseja excluir e execute uma das seguintes ações:
    • Selecione Excluir ponto de verificação.
    • Se Excluir Ponto de Verificação não estiver disponível, selecione o ponto de verificação e, em seguida, selecione Del.

Mesclando pontos de verificação que você não pode exibir no Gerenciador do Hyper-V

Você pode encontrar uma situação em que o Gerenciador do Hyper-V não mostra pontos de verificação para uma VM específica. Ao mesmo tempo, a pasta do sistema de arquivos correspondente mostra muitos arquivos de disco diferenciais. Isso pode ocorrer se o software de backup de terceiros gerar pontos de verificação, mas não os excluir após uma operação de backup.

Você pode mesclar os arquivos de disco diferenciais de duas maneiras, dependendo se você pode desligar a VM.

Quando você pode desligar a VM

Para mesclar os arquivos de disco diferenciais, desligue a VM. Normalmente, os arquivos de disco diferenciais são mesclados como parte do processo de desligamento da VM.

Quando você não pode desligar a VM

Você pode mesclar discos diferenciais em uma VM online. No entanto, esse é um processo de várias etapas que envolve scripts do Windows PowerShell. Para fazer isso, siga estas etapas gerais:

  1. Faça backup de todos os arquivos de disco diferenciais (arquivos VHD).
  2. Crie e execute a Get-VHDChain função. Esta etapa é descrita em detalhes mais adiante nesta seção.
  3. Crie e execute comandos de mesclagem. Esta etapa é descrita em detalhes mais adiante nesta seção.
  4. Altere as configurações da VM para apontar para o VHD pai mesclado.
  5. Inicie a VM. Uma inicialização bem-sucedida significa que a mesclagem foi concluída com êxito.

Criar e executar a função Get-VHDChain

  1. No servidor host Hyper-V, abra uma janela administrativa do Prompt de Comando do PowerShell.

  2. Copie o script a seguir e cole-o na janela do 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++
                }
            }
        }
    }
    ==================================
    

    Esse script define uma Get-VHDChain função que identifica a cadeia VHD (o conjunto de discos diferenciais para a VM).

  3. Execute o comando a seguir:

    Get-vhdchain -name <virtual machine name>
    

    Observação

    Nesse comando, <o nome> da máquina virtual representa o nome da máquina virtual.

    Quando o script é executado, você deve ver uma saída semelhante à saída a seguir.

    Captura de tela da saída do script Get-VHDChain.

  4. Certifique-se de que Get-VHDChain seja executado sem erros.

    Importante

    Se a Get-VHDChain saída contiver erros, você precisará remover os discos diferenciais afetados da pasta. No exemplo a seguir, o Disco 24 gerou um erro e deve ser removido da pasta de disco diferencial.

    Captura de tela da saída do script Get-VHDChain quando o script gera um erro.

Criar e executar comandos de mesclagem

  1. As instruções a seguir criam um script em C:\temp\merge.txt para mesclar os discos. Siga estas etapas:

    1. Na unidade C: local, crie uma pasta chamada temp.

    2. Abra uma janela do PowerShell Administrativo e execute o seguinte comando:

      $vm = Read-Host("please enter the VMname") 
      
    3. No prompt de comando, insira o nome da máquina virtual.

    4. Copie o script a seguir e cole-o no prompt de comando.

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

      O script deve ser semelhante ao seguinte script:

      Captura de tela do script depois que ele é colado em uma janela do PowerShell.

  2. Abra C:\temp\merge.txt. Esse arquivo contém uma lista de comandos de linha de comando agrupados em pares. Cada par de comandos define as operações de mesclagem para um único disco diferencial.

  3. Copie o primeiro comando do primeiro par, cole-o no prompt de comando e execute-o. Em seguida, faça o mesmo para o segundo comando do primeiro par. Essas operações mesclam o disco diferencial que os comandos endereçam.

  4. Depois que o disco for mesclado, repita as etapas anteriores para o próximo disco diferencial na lista. Continue para todos os discos diferenciais que o arquivo merge.txt endereça.