Partilhar via


Solucionar problemas de inicialização e de rede em máquina virtual Linux devido a erros associados ao driver Hyper-V.

Aplica-se a: ✔️ VMs Linux

Resumo

Azure é executado no hipervisor Hyper-V e os sistemas Linux exigem que determinados módulos de kernel Hyper-V sejam executados no Azure. Esses módulos de kernel são agrupados nos drivers LIS (Linux Integration Services) para Hyper-V e Azure. Microsoft contribui diretamente para o kernel upstream do Linux.

Este artigo discute várias condições em que um ou mais drivers de Hyper-V desabilitados podem levar a problemas de inicialização e rede da VM (máquina virtual) do Linux.

Pré-requisitos

Verifique se o console serial está habilitado e funcional na VM do Linux.

Como identificar o problema da falta de driver do Hyper-V

Para identificar se a sua VM falha na inicialização devido à ausência de drivers Hyper-V, use o CLI do Azure ou o portal Azure para visualizar o log do console serial da VM no painel de diagnóstico de inicialização ou no painel do console serial. Exemplos de saídas de falhas são exibidos nas seções correspondentes abaixo.

Antes de solucionar problemas

Para solucionar problemas nos Cenários 1 e 2: O driver de rede Hyper-V está desabilitado e O endereço de controle de acesso à mídia (MAC) do controlador de interface de rede (NIC) foi alterado ou não corresponde, você precisa de acesso à console serial para sua VM Linux.

Se você não tiver acesso ao console serial, siga a abordagem offline para acessar o conteúdo do disco do sistema operacional problemático a partir de uma máquina virtual de resgate. O acesso a CLI do Azure ou Azure Cloud Shell é necessário para a abordagem offline.

Para solucionar problemas Scenario 3: outros drivers de Hyper-V estão desabilitados, a abordagem offline é a única opção para resolver o problema.

Cenário 1: o driver de Hyper-V de rede está desabilitado

Como os serviços de rede não estão disponíveis, não é possível proteger o Protocolo Shell (SSH) em uma máquina virtual, mas você ainda pode entrar por meio do console serial do portal Azure. Você verá os seguintes tipos de erros no console serial ou no log serial mais recente no painel Boot Diagnostics no portal Azure:

 cloud-init[807]: Cloud-init v. 19.4 running 'init-local' at Tue, xx Aug 20XX 20:41:53 +0000. Up 5.83 seconds.
 cloud-init[807]: 20XX-08-XX 20:41:54,231 - stages.py[WARNING]: Failed to rename devices: [nic not present] Cannot rename mac=xx:xx:xx:xx:xx:xx to eth0, not available.
[  OK  ] Started Initial cloud-init job (pre-networking).
----
[FAILED] Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' for details.

Ou

 cloud-init[799]: 2022-XX-XX 19:04:06,267 - azure.py[WARNING]: Interface not found for DHCP
 cloud-init[799]: 2022-XX-XX 19:04:07,269 - azure.py[WARNING]: Interface not found for DHCP
 cloud-init[799]: 2022-XX-XX 19:04:10,274 - azure.py[WARNING]: Interface not found for DHCP
 cloud-init[799]: 2022-XX-2XX 19:04:10,277 - azure.py[WARNING]: IMDS network metadata has incomplete configuration: None

Solução 1: habilitar Hyper-V driver de rede usando o console serial

  1. Acesse o console serial da VM. A rede está inativa, mas o prompt de login ainda está disponível.

  2. Entre na VM com as credenciais corretas.

  3. Mude para a conta root ou para uma conta com acesso ao sudo.

  4. Vá para o diretório /etc/modprobe.d e procure por qualquer linha que desative o driver hv_netvsc.

    1. Identifique o arquivo que desabilita o driver hv_netvsc e os números de linha correspondentes executando o seguinte comando:

      sudo grep -nr "hv_netvsc" /etc/modprobe.d/
      
    2. Modifique o arquivo correspondente e comente ou exclua as entradas hv_netvsc:

      Captura de tela que mostra o possível conteúdo do arquivo de configuração usado para desabilitar os drivers de rede.

      sudo vi /etc/modprobe.d/disable.conf
      

      Observação

      • As entradas que desabilitam drivers são definidas pelo Sistema Operacional Linux, não por Microsoft.
      • Substitua disable.conf pelo nome do arquivo correspondente em que o driver hv_netvsc está desabilitado.
  5. Reconstrua a imagem inicial do RAMdisk para o kernel carregado no momento:

    • Para imagens baseadas em RHEL/SLES

      sudo dracut -f -v
      
    • Para imagens baseadas no Ubuntu/Debian

      sudo mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  6. Reinicialize a VM.

Sempre faça um backup da imagem inicial original do RAMdisk para facilitar a reversão quando necessário.

  • Para imagens baseadas em RHEL:

    sudo cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bak
    
  • Para imagens baseadas em SLES:

    sudo cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bak
    
  • Para imagens baseadas no Ubuntu/Debian:

    sudo cp /boot/initrd.img-<kernelVersion> /boot/initrd.img-<kernelVersion>.bak
    

Solução 2: habilitar o driver de rede Hyper-V offline

  1. Use az vm repair para acessar o conteúdo do disco do sistema operacional afetado de uma VM de resgate.

  2. Monte e faça chroot nos sistemas de arquivos do disco do sistema operacional anexado na VM de resgate seguindo as instruções do chroot.

  3. Depois que o conteúdo do disco do sistema operacional afetado for acessado, siga as etapas 4 e 5 em Solução 1: Habilitar o Driver de Rede Hyper-V Usando o Console Serial para reabilitar os drivers e reconstruir a imagem inicial do RAMdisk.

    Antes que a imagem inicial do RAMdisk seja reconstruída, mude para o ambiente chroot. O caminho completo da imagem deve ser fornecido.

  4. Depois que as alterações forem aplicadas, execute uma troca automática de disco do sistema operacional com a VM original e reinicialize o sistema usando o az vm repair restore comando.

Cenário 2: O endereço MAC (controle de acesso à mídia NIC) foi alterado ou não corresponde

Se o endereço MAC da placa de interface de rede for alterado ou não corresponder à configuração do sistema operacional, você não poderá usar SSH para a VM porque os serviços de rede não estão disponíveis. Você ainda pode fazer login por meio do console serial no portal do Azure. Erros semelhantes aos de Scenario 1: o driver de Hyper-V de rede está desabilitado são exibidos.

Se o problema continuar mesmo que o driver de rede Hyper-V esteja habilitado, use uma das soluções a seguir para validar a configuração da NIC do sistema operacional e resolver o problema.

Solução 1: Corrigir a incompatibilidade de endereço MAC da NIC usando o console serial

  1. Acesse o console serial da VM. A rede está inativa, mas o prompt de login ainda está disponível.

  2. Entre na VM com as credenciais corretas.

  3. Mude para a conta root ou para uma conta com acesso ao sudo.

  4. Vá para o diretório /etc/cloud/cloud.cfg.d .

  5. Considerando que as imagens de parceiros do Linux são usadas, abra e edite os seguintes arquivos:

    • 91-azure_datasource.cfg para distribuição baseada em RHEL.
    • 90_dpkg.cfg para distribuição baseada em Debian e Ubuntu.
  6. Se o apply_network_config parâmetro estiver definido como false, defina-o como true. Se nada for especificado, o valor padrão será definido como true. Essa configuração garantirá que o novo endereço MAC seja aplicado à configuração de rede na próxima reinicialização.

  7. Geralmente, um endereço MAC da NIC só seria alterado se uma NIC fosse excluída ou adicionada pelo administrador ou uma NIC fosse atualizada no back-end. Se a configuração de rede via cloud-init não for desejada e o apply_network_config parâmetro precisar ser definido como false, exclua o arquivo /var/lib/cloud/instance/obj.pkl e reinicialize o sistema.

    sudo rm /var/lib/cloud/instance/obj.pkl
    
  8. Depois que as alterações forem aplicadas, reinicie o sistema.

Solução 2: Corrigir a incompatibilidade de endereço MAC da NIC offline

  1. Use o comando az vm repair para acessar o conteúdo do disco do sistema operacional afetado de uma máquina virtual de resgate.
  2. Monte e faça chroot nos sistemas de arquivos do disco do sistema operacional anexado em uma VM de resgate corretamente seguindo as instruções do chroot.
  3. Depois que o conteúdo da cópia do disco do sistema operacional afetado for acessado, siga as etapas 4 a 7 na Solução 1: Corrigir a incompatibilidade de endereço MAC da NIC usando o Console Serial para fazer alterações de rede ou limpar o arquivo obj.pkl .
  4. Depois que as alterações forem aplicadas, use o az vm repair restore comando para executar uma troca automática de disco do sistema operacional com a VM original e reinicializar o sistema.

Cenário 3: Outros drivers de Hyper-V estão desabilitados

Se você tiver problemas de inicialização com outros drivers de Hyper-V, provavelmente não será possível usar o SSH para uma VM porque os serviços de rede não estão disponíveis. Você caiu em uma concha dracut. Esse problema pode ser visualizado por meio do console serial no Portal do Azure. Você pode ver os seguintes erros no console serial ou no log serial mais recente no painel Boot Diagnostics no portal Azure:

 dracut-initqueue[455]: Warning: dracut-initqueue timeout - starting timeout scripts
 dracut-initqueue[455]: Warning: Could not boot.
         Starting Setup Virtual Console...
[  OK  ] Started Setup Virtual Console.
         Starting Dracut Emergency Shell...
Warning: /dev/mapper/rootvg-rootlv does not exist
Generating "/run/initramfs/rdsosreport.txt"
 
Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report.
dracut:/#

Ou

Gave up waiting for root file system device.  Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT!  UUID=143c811b-9b9c-48f3-b0c8-040f6e65f50aa does not exist.  Dropping to a shell!


BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.4) built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs)

Solução: habilitar drivers de Hyper-V

Se uma VM estiver inacessível porque outros drivers do Hyper-V foram desabilitados, use uma abordagem offline para habilitar novamente os drivers, pois o initramfs não pode ser carregado.

  1. Use o comando az vm repair para acessar o conteúdo do disco do sistema operacional problemático de uma máquina virtual de resgate.

  2. Monte e faça chroot nos sistemas de arquivos do disco do sistema operacional anexado em uma VM de recuperação seguindo corretamente as instruções do chroot.

  3. Uma vez no ambiente chroot, vá para o diretório /etc/modprobe.d e procure por qualquer linha que possa desabilitar o driver hv_utils, hv_vmbus, hv_storvsc ou hv_netvsc.

    1. Execute o comando a seguir para identificar o arquivo que desabilita o driver hv_utils, hv_vmbus, hv_storvsc ou hv_netvsc e o número de linha correspondente.

      sudo egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
      
    2. Modifique o arquivo correspondente e comente ou exclua as entradas hv_utils, hv_vmbus, hv_storvsc ou hv_netvsc. As entradas serão mais comumente qualquer uma das seguintes (ou ambas):

      Captura de tela que mostra o possível conteúdo do arquivo de configuração usado para desabilitar módulos/drivers do kernel usando a opção de instalação.

      Captura de tela que mostra o possível conteúdo do arquivo de configuração usado para desabilitar módulos/drivers do kernel.

      sudo vi /etc/modprobe.d/disable.conf
      

    Importante

    • As entradas que desabilitam drivers são definidas pelo Sistema Operacional Linux, não por Microsoft.
    • Substitua disable.conf pelo nome de arquivo correspondente em que os drivers de Hyper-V estão desabilitados.
  4. Reconstrua a imagem inicial do RAMdisk para o kernel carregado no momento:

    • Para imagens baseadas em RHEL/SLES

      sudo dracut -f -v
      
    • Para imagens baseadas no Ubuntu/Debian

      sudo mkinitramfs -k -o /boot/initrd.img-$(uname -r)
      
  5. Depois que as alterações forem aplicadas, use o az vm repair restore comando para executar uma troca automática de disco do sistema operacional com a VM original e reinicializar o sistema.

Sempre faça um backup da imagem original do disco RAM para facilitar a reversão, caso seja necessário.

Se o problema ainda não for resolvido, consulte A máquina virtual Linux do Azure falha ao inicializar e entra no shell de emergência do dracut para investigar problemas de dracut.

Próximas etapas

Caso o erro de inicialização específico não seja um problema do Hyper-V, consulte Solucionar problemas de erros de inicialização das máquinas virtuais Linux do Azure para obter mais opções de solução de problemas.