Share via


Solucionar problemas de uma VM do Linux anexando o disco do sistema operacional a uma VM de recuperação com a CLI do Azure

Se sua máquina virtual (VM) Linux encontrar um erro de inicialização ou disco, talvez seja necessário executar as etapas de solução de problemas no próprio disco rígido virtual. Um exemplo comum seria uma entrada inválida em /etc/fstab que impede a inicialização bem-sucedida da VM. Este artigo detalha como usar a CLI do Azure para conectar seu disco rígido virtual a outra VM do Linux para corrigir quaisquer erros e, em seguida, recriar sua VM original.

Visão geral do processo de recuperação

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

  1. Pare a VM afetada.
  2. Tire 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 e monte o novo disco do sistema operacional em outra VM do Linux para fins de solução de problemas.
  5. Conecte-se à VM de solução de problemas. Edite arquivos ou execute qualquer ferramenta para corrigir problemas no novo disco do sistema operacional.
  6. Desmonte e desconecte o novo disco do sistema operacional da VM de solução de problemas.
  7. Altere o disco do sistema operacional da VM afetada.

Para executar essas etapas de solução de problemas, você precisa da Azure CLI mais recente instalada e conectada a uma conta do Azure usando az login.

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 Linux usando os comandos de reparo da Máquina Virtual do Azure.

Importante

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

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

Determinar problemas de inicialização

Examine a saída serial para determinar por que sua VM não consegue inicializar corretamente. Um exemplo comum é uma entrada inválida em /etc/fstab ou o disco rígido virtual subjacente sendo excluído ou movido.

Obtenha os logs de inicialização com az vm boot-diagnostics get-boot-log. O exemplo a seguir obtém a saída serial da VM chamada myVM no grupo de recursos chamado myResourceGroup:

az vm boot-diagnostics get-boot-log --resource-group myResourceGroup --name myVM

Revise a saída serial para determinar por que a VM está falhando ao inicializar. Se a saída serial não estiver fornecendo nenhuma indicação, talvez seja necessário revisar os arquivos de log em /var/log depois de conectar o disco rígido virtual a uma VM de solução de problemas.

Pare a VM

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

az vm stop --resource-group MyResourceGroup --name MyVm

Tire um instantâneo do disco do sistema operacional da VM afetada

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. O exemplo a seguir cria um instantâneo com o nome mySnapshot do disco do SO da VM chamada "myVM".

#Get the OS disk Id 
$osdiskid=(az vm show -g myResourceGroup -n myVM --query "storageProfile.osDisk.managedDisk.id" -o tsv)

#creates a snapshot of the disk
az snapshot create --resource-group myResourceGroupDisk --source "$osdiskid" --name mySnapshot

Crie um disco a partir do instantâneo

Este script cria um disco gerenciado com o nome myOSDisk do instantâneo chamado mySnapshot.

#Provide the name of your resource group
$resourceGroup="myResourceGroup"

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

#Provide the name of the Managed Disk
$osDisk="myNewOSDisk"

#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="Premium_LRS"

#Provide the OS type
$osType="linux"

#Get the snapshot Id 
$snapshotId=(az snapshot show --name $snapshot --resource-group $resourceGroup --query id -o tsv)

# Create a new Managed Disks using the snapshot Id.

az disk create --resource-group $resourceGroup --name $osDisk --sku $storageType --size-gb $diskSize --source $snapshotId

Se o grupo de recursos e o instantâneo de origem não estiverem na mesma região, você verá o erro "Recurso não encontrado" ao executar az disk create. Nesse caso, você deve especificar --location <region> para criar o disco na mesma região do instantâneo de origem.

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

Anexe o novo disco rígido virtual a outra VM

Nas próximas etapas, você usará outra VM para fins de solução de problemas. Você anexa o disco a esta VM de solução de problemas para navegar e editar o conteúdo do disco. Este processo permite que você corrija quaisquer erros de configuração ou revise aplicativos adicionais ou arquivos de log do sistema.

Este script anexa o disco myNewOSDisk à VM MyTroubleshootVM:

# Get ID of the OS disk that you just created.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)

# Attach the disk to the troubleshooting VM
az vm disk attach --disk $myNewOSDiskid --resource-group $resourceGroup --size-gb $diskSize --sku $storageType --vm-name MyTroubleshootVM

Monte o disco de dados anexado

Observação

Os exemplos a seguir detalham as etapas necessárias em uma VM do Ubuntu. Se você estiver usando uma distribuição Linux diferente, como Red Hat Enterprise Linux ou SUSE, os locais dos arquivos de log e os comandos mount podem ser um pouco diferentes. Consulte a documentação da sua distribuição específica para obter as alterações apropriadas nos comandos.

  1. SSH para sua VM de solução de problemas usando as credenciais apropriadas. Se este disco for o primeiro disco de dados anexado à sua VM de solução de problemas, o disco provavelmente está conectado a /dev/sdc. Use dmesg para visualizar os discos conectados:

    dmesg | grep SCSI
    

    A saída é semelhante ao seguinte exemplo:

    [    0.294784] SCSI subsystem initialized
    [    0.573458] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
    [    7.110271] sd 2:0:0:0: [sda] Attached SCSI disk
    [    8.079653] sd 3:0:1:0: [sdb] Attached SCSI disk
    [ 1828.162306] sd 5:0:0:0: [sdc] Attached SCSI disk
    

    No exemplo anterior, o disco do SO está em /dev/sda e o disco temporário fornecido para cada VM está em /dev/sdb. Se você tiver vários discos de dados, eles devem estar em /dev/sdd, /dev/sde e assim por diante.

  2. Crie um diretório para montar seu disco rígido virtual existente. O exemplo a seguir cria um diretório chamado troubleshootingdisk:

    sudo mkdir /mnt/troubleshootingdisk
    
  3. Se você tiver várias partições em seu disco rígido virtual existente, monte a partição necessária. O exemplo a seguir monta a primeira partição primária em /dev/sdc1:

    sudo mount /dev/sdc1 /mnt/troubleshootingdisk
    

    Observação

    A prática recomendada é montar discos de dados em VMs no Azure usando o identificador exclusivo universal (UUID) do disco rígido virtual. Para este breve cenário de solução de problemas, não é necessário montar o disco rígido virtual usando o UUID. No entanto, em uso normal, editar /etc/fstab para montar discos rígidos virtuais usando o nome do dispositivo em vez de UUID pode causar falha na inicialização da VM.

Corrija problemas no novo disco do sistema operacional

Com o disco rígido virtual existente montado, agora você pode realizar quaisquer etapas de manutenção e solução de problemas conforme necessário. Depois de resolver os problemas, continue com as etapas a seguir.

Desmonte e desconecte o novo disco do sistema operacional

Depois que seus erros forem resolvidos, você desmonta e desconecta o disco rígido virtual existente de sua VM de solução de problemas. Você não pode usar seu disco rígido virtual com qualquer outra VM até que a concessão anexando o disco rígido virtual à VM de solução de problemas seja liberada.

  1. Da sessão SSH para sua VM de solução de problemas, desmonte o disco rígido virtual existente. Altere primeiro o diretório pai do seu ponto de montagem:

    cd /
    

    Agora desmonte o disco rígido virtual existente. O exemplo a seguir desmonta o dispositivo em /dev/sdc1:

    sudo umount /dev/sdc1
    
  2. Agora desconecte o disco rígido virtual da VM. Saia da sessão SSH para sua VM de solução de problemas:

    az vm disk detach -g MyResourceGroup --vm-name MyTroubleShootVm --name myNewOSDisk
    

Altere o disco do sistema operacional da VM afetada

Você pode usar a CLI do Azure 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 myNewOSDisk como o novo disco do SO.

# Stop the affected VM
az vm stop -n myVM -g myResourceGroup

# Get ID of the OS disk that is repaired.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)

# Change the OS disk of the affected VM to "myNewOSDisk"
az vm update -g myResourceGroup -n myVM --os-disk $myNewOSDiskid

# Start the VM
az vm start -n myVM -g myResourceGroup

Próximas etapas

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

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.