Solucionar problemas de uma VM do Windows anexando o disco do sistema operacional a uma VM de recuperação usando o Azure PowerShell

Se a máquina virtual (VM) do Windows no Azure encontrar um erro de inicialização ou disco, talvez seja necessário executar as etapas de solução de problemas no próprio disco. Um exemplo comum seria uma atualização de aplicativo com falha que impede que a VM seja inicializada com êxito. Este artigo detalha como usar o Azure PowerShell para conectar o disco a outra VM do Windows para corrigir quaisquer erros e reparar sua VM original.

Importante

Os scripts neste artigo se aplicam apenas às VMs que usam Disco Gerenciado.

Visão geral do processo de recuperação

Agora podemos usar o Azure PowerShell para alterar o disco do SO para uma VM. Não precisamos mais excluir e recriar a VM.

O processo de solução de problemas é o seguinte:

  1. Pare a VM afetada.
  2. Crie um instantâneo do disco do sistema operacional da VM.
  3. Crie um disco a partir do instantâneo do disco do sistema operacional.
  4. Anexe o disco como um disco de dados a uma VM de recuperação.
  5. Conecte-se à VM de recuperação. Edite arquivos ou execute qualquer ferramenta para corrigir problemas no disco do sistema operacional copiado.
  6. Desmonte e desconecte o disco da VM de recuperação.
  7. Altere o disco do sistema operacional da VM afetada.

Você pode usar os comandos de reparo da VM para automatizar as etapas 1, 2, 3, 4, 6 e 7. Para obter mais documentação e instruções, consulte Reparar uma VM do Windows usando os comandos de reparo da Máquina Virtual do Azure.

Certifique-se de ter o Azure PowerShell mais recente instalado e conectado à sua assinatura:

Connect-AzAccount

Nos exemplos a seguir, substitua os nomes dos parâmetros por seus próprios valores.

Determinar problemas de inicialização

Você pode exibir uma captura de tela de sua VM no Azure para ajudar a solucionar problemas de inicialização. Esta captura de tela pode ajudar a identificar por que uma VM falha ao inicializar. O exemplo a seguir obtém a captura de tela da VM do Windows chamadamyVM no grupo de recursos chamadomyResourceGroup:

Get-AzVMBootDiagnosticsData -ResourceGroupName myResourceGroup `
    -Name myVM -Windows -LocalPath C:\Users\ops\

Revise a captura de tela para determinar por que a VM está falhando ao inicializar. Observe quaisquer mensagens de erro específicas ou códigos de erro fornecidos.

Pare a VM

O exemplo a seguir interrompe a VM chamada myVM do grupo de recursos chamado myResourceGroup:

Stop-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"

Aguarde até que a VM termine de excluir antes de prosseguir para a próxima etapa.

Crie um instantâneo do disco do sistema operacional da VM

O exemplo a seguir cria um instantâneo com o nome mySnapshot do disco do SO da VM chamada "myVM".

$resourceGroupName = 'myResourceGroup' 
$location = 'eastus' 
$vmName = 'myVM'
$snapshotName = 'mySnapshot'  

#Get the VM
$vm = get-azvm `
-ResourceGroupName $resourceGroupName `
-Name $vmName

#Create the snapshot configuration for the OS disk
$snapshot =  New-AzSnapshotConfig `
-SourceUri $vm.StorageProfile.OsDisk.ManagedDisk.Id `
-Location $location `
-CreateOption copy

#Take the snapshot
New-AzSnapshot `
   -Snapshot $snapshot `
   -SnapshotName $snapshotName `
   -ResourceGroupName $resourceGroupName 

Um instantâneo é uma cópia completa somente leitura de um VHD. Não pode ser anexado a uma VM. Na próxima etapa, criaremos um disco a partir desse instantâneo.

Crie um disco a partir do instantâneo

Este script cria um disco gerenciado com o nome newOSDisk do instantâneo chamado mysnapshot.

#Set the context to the subscription Id where Managed Disk will be created
#You can skip this step if the subscription is already selected

$subscriptionId = 'yourSubscriptionId'

Select-AzSubscription -SubscriptionId $SubscriptionId

#Provide the name of your resource group
$resourceGroupName ='myResourceGroup'

#Provide the name of the snapshot that will be used to create Managed Disks
$snapshotName = 'mySnapshot' 

#Provide the name of the Managed Disk
$diskName = 'newOSDisk'

#Provide the size of the disks in GB. It should be greater than the VHD file size.
$diskSize = '128'

#Provide the storage type for Managed Disk. Premium_LRS or Standard_LRS.
$storageType = 'Standard_LRS'

#Provide the Azure region (e.g. westus) where Managed Disks will be located.
#This location should be same as the snapshot location
#Get all the Azure location using command below:
#Get-AzLocation
$location = 'eastus'

$snapshot = Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName 
 
$diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot.Id
 
New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $diskName

Agora você tem uma cópia do disco original do sistema operacional. Você pode montar este disco em outra VM do Windows para fins de solução de problemas.

Anexe o disco a outra VM do Windows para solucionar problemas

Agora anexamos a cópia do disco original do sistema operacional a uma VM como um disco de dados. Este processo permite corrigir erros de configuração ou revisar aplicativos adicionais ou arquivos de log do sistema no disco. O exemplo a seguir anexa o disco denominadonewOSDisk à VM denominadaRecoveryVM.

Observação

Para anexar o disco, a cópia do disco original do sistema operacional e a VM de recuperação devem estar no mesmo local.

$rgName = "myResourceGroup"
$vmName = "RecoveryVM"
$location = "eastus" 
$dataDiskName = "newOSDisk"
$disk = Get-AzDisk -ResourceGroupName $rgName -DiskName $dataDiskName 

$vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName 

$vm = Add-AzVMDataDisk -CreateOption Attach -Lun 0 -VM $vm -ManagedDiskId $disk.Id

Update-AzVM -VM $vm -ResourceGroupName $rgName

Conecte-se à VM de recuperação e corrija os problemas no disco anexado

  1. RDP para sua VM de recuperação usando as credenciais apropriadas. O exemplo a seguir baixa o arquivo de conexão RDP para a VM chamadaRecoveryVM no grupo de recursos chamadomyResourceGroup e faz o download paraC:\Users\ops\Documents

    Get-AzRemoteDesktopFile -ResourceGroupName "myResourceGroup" -Name "RecoveryVM" `
        -LocalPath "C:\Users\ops\Documents\myVMRecovery.rdp"
    
  2. O disco de dados deve ser detectado e anexado automaticamente. Veja a lista de volumes anexados para determinar a letra da unidade da seguinte forma:

    Get-Disk
    

    A saída de exemplo a seguir mostra o disco conectado a um disco 2. (Você também pode usarGet-Volume para visualizar a letra da unidade):

    Number   Friendly Name   Serial Number   HealthStatus   OperationalStatus   Total Size   Partition
                                                                                             Style
    ------   -------------   -------------   ------------   -----------------   ----------   ----------
    0        Virtual HD                                     Healthy             Online       127 GB MBR
    1        Virtual HD                                     Healthy             Online       50 GB MBR
    2        newOSDisk                                  Healthy             Online       127 GB MBR
    

Depois que a cópia do disco do sistema operacional original for montada, você poderá executar qualquer manutenção e etapas de solução de problemas conforme necessário. Depois de resolver os problemas, continue com as etapas a seguir.

Desmonte e desconecte o disco original do sistema operacional

Assim que seus erros forem resolvidos, desmonte e desconecte o disco existente de sua VM de recuperação. Você não pode usar seu disco com nenhuma outra VM até que a concessão anexando o disco à VM de recuperação seja liberada.

  1. De dentro de sua sessão RDP, desmonte o disco de dados em sua VM de recuperação. Você precisa do número do disco do cmdletGet-Disk anterior. Em seguida, useSet-Disk para definir o disco como offline:

    Set-Disk -Number 2 -IsOffline $True
    

    Confirme se o disco agora está definido como off-line usandoGet-Disk novamente. A saída de exemplo a seguir mostra que o disco agora está definido como off-line:

    Number   Friendly Name   Serial Number   HealthStatus   OperationalStatus   Total Size   Partition
                                                                                             Style
    ------   -------------   -------------   ------------   -----------------   ----------   ----------
    0        Virtual HD                                     Healthy             Online       127 GB MBR
    1        Virtual HD                                     Healthy             Online       50 GB MBR
    2        Msft Virtu...                                  Healthy             Offline      127 GB MBR
    
  2. Saia da sua sessão RDP. Na sessão do Azure PowerShell, remova o disco chamadonewOSDisk da VM chamada 'RecoveryVM'.

    $myVM = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "RecoveryVM"
    Remove-AzVMDataDisk -VM $myVM -Name "newOSDisk"
    Update-AzVM -ResourceGroup "myResourceGroup" -VM $myVM
    

Altere o disco do sistema operacional da VM afetada

Você pode usar o Azure PowerShell para trocar os discos do sistema operacional. Você não precisa excluir e recriar a VM.

Este exemplo interrompe a VM chamada myVM e atribui o disco chamado newOSDisk como o novo disco do SO.

# Get the VM 
$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM 

# Make sure the VM is stopped\deallocated
Stop-AzVM -ResourceGroupName myResourceGroup -Name $vm.Name -Force

# Get the new disk that you want to swap in
$disk = Get-AzDisk -ResourceGroupName myResourceGroup -Name newDisk

# Set the VM configuration to point to the new disk  
Set-AzVMOSDisk -VM $vm -ManagedDiskId $disk.Id -Name $disk.Name  -sto

# Update the VM with the new OS disk. Possible values of StorageAccountType include: 'Standard_LRS' and 'Premium_LRS'
Update-AzVM -ResourceGroupName myResourceGroup -VM $vm -StorageAccountType <Type of the storage account >

# Start the VM
Start-AzVM -Name $vm.Name -ResourceGroupName myResourceGroup

Verifique e habilite o diagnóstico de inicialização

O exemplo a seguir habilita a extensão de diagnóstico na VM chamada myVMDeployed no grupo de recursos chamado myResourceGroup:

$myVM = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myVMDeployed"
Set-AzVMBootDiagnostics -ResourceGroupName myResourceGroup -VM $myVM -enable
Update-AzVM -ResourceGroup "myResourceGroup" -VM $myVM

Próximas etapas

Se você estiver tendo problemas para se conectar à sua VM, consulte Solucionar problemas de conexões RDP para uma VM do Azure. Para problemas de acesso a aplicativos em execução em sua VM, consulte Solução de problemas de conectividade de aplicativos em uma VM do Windows.

Para obter mais informações sobre como usar o Resource Manager, consulte Visão geral do Azure Resource Manager.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.