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

Se sua Windows virtual (VM) no Azure encontrar um erro de inicialização ou disco, talvez seja necessário executar 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 capaz de inicializar com êxito. Este artigo detalha como usar o Azure PowerShell para conectar o disco a outra Windows VM para corrigir erros e, em seguida, reparar sua VM original.

Importante

Os scripts neste artigo só se aplicam à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 sistema operacional 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 a partir do Disco do sistema operacional da VM.
  3. Crie um disco a partir do instantâneo de disco do sistema operacional.
  4. Anexe o disco como um disco de dados a uma VM de recuperação.
  5. Conexão para a VM de recuperação. Edite arquivos ou execute qualquer ferramenta para corrigir problemas no disco do sistema operacional copiado.
  6. Desmonte e descole o disco da VM de recuperação.
  7. Altere o disco do sistema operacional para a VM afetada.

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

Certifique-se de que você tenha o Azure PowerShell mais recente instalado e conectado à sua assinatura:

Connect-AzAccount

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

Determinar problemas de inicialização

Você pode exibir uma captura de tela da VM no Azure para ajudar a solucionar problemas de inicialização. Essa 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 Windows myVM nomeada no grupo de recursos chamado myResourceGroup :

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

Revise a captura de tela para determinar por que a VM está falhando na inicialização. Observe qualquer mensagem de erro ou códigos de erro específicos fornecidos.

Parar a VM

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

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

Aguarde até que a VM tenha concluído a exclusão antes de processar para a próxima etapa.

Criar um instantâneo a partir do disco do sistema operacional da VM

O exemplo a seguir cria um instantâneo com o mySnapshot nome do disco do sistema operacional 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. Ele não pode ser anexado a uma VM. Na próxima etapa, criaremos um disco a partir desse instantâneo.

Criar um disco a partir do instantâneo

Esse script cria um disco gerenciado com o newOSDisk nome 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 do sistema operacional original. Você pode montar esse disco em outro Windows VM para fins de solução de problemas.

Anexar o disco a outro Windows VM para solução de problemas

Agora anexamos a cópia do disco do sistema operacional original a uma VM como um disco de dados. Esse processo permite corrigir erros de configuração ou revisar arquivos de log de aplicativo ou sistema adicionais no disco. O exemplo a seguir anexa o disco newOSDisk nomeado à VM chamada RecoveryVM .

Observação

Para anexar o disco, a cópia do disco do sistema operacional original 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

Conexão para a VM de recuperação e corrigir 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 nomeada no grupo de recursos chamado , e RecoveryVM myResourceGroup o baixa para C:\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. Exibir 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 usar Get-Volume para exibir 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 etapa de manutenção e solução de problemas conforme necessário. Depois de resolver os problemas, continue com as etapas a seguir.

Desmonte e descole o disco do sistema operacional original

Depois que seus erros são resolvidos, você desmonta e desconecta o disco existente da VM de recuperação. Você não pode usar seu disco com qualquer outra VM até que a concessão anexar o disco à VM de recuperação seja liberada.

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

    Set-Disk -Number 2 -IsOffline $True
    

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

    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 sessão RDP. Na sessão Azure PowerShell, remova o disco nomeado newOSDisk da VM chamada 'RecoveryVM'.

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

Alterar o disco do sistema operacional para a VM afetada

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

Este exemplo interrompe a VM nomeada e atribui myVM o disco nomeado como o novo disco do sistema newOSDisk operacional.

# 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

Verificar e habilitar diagnósticos de inicialização

O exemplo a seguir habilita a extensão de diagnóstico na VM myVMDeployed nomeada 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 com problemas para se conectar à VM, consulte Solucionar problemas de conexões RDP com uma VM do Azure. Para problemas com o acesso a aplicativos em execução em sua VM, consulte Troubleshoot application connectivity issues on a Windows VM.

Para obter mais informações sobre como usar o Gerenciador de Recursos, consulte Visão geral do Gerenciador de Recursos do Azure.