Compartilhar via


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

Aplica-se a: ✔️ VMs linux

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

Este artigo discute várias condições em que um ou mais drivers 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 do driver Hyper-V ausente

Para identificar se sua VM falha ao inicializar devido a drivers Hyper-V ausentes, use a CLI do Azure ou o portal do Azure para exibir o log do console serial da VM no painel de diagnóstico de inicialização ou no painel de console serial. As saídas de exemplo de falhas são exibidas nas seções correspondentes abaixo.

Antes de solucionar problemas

Para solucionar problemas do Cenário 1: o driver do Hyper-V de rede está desabilitado e o Cenário 2: o endereço mac da NIC é alterado ou não corresponde, você precisa de acesso ao console serial para sua VM do 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 de uma máquina virtual de resgate. O acesso à CLI do Azure ou ao Azure Cloud Shell é necessário para a abordagem offline.

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

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

Como os serviços de rede não estão disponíveis, você não pode proteger o SSH (Secure Shell Protocol) em uma máquina virtual, mas ainda pode entrar por meio do console serial do portal do Azure. Você vê os seguintes tipos de erros no console serial ou no log serial mais recente no painel Diagnóstico de Inicialização no portal do 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: Habilite o driver de rede Hyper-V 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 conta de usuário com acesso 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:

      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.

      vi /etc/modprobe.d/disable.conf
      

      Observação

      • As entradas que desabilitam drivers são definidas pelo sistema operacional Linux, não pela 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

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

      # 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:

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

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

    # 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 na 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 da NIC é 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 entrar por meio do console serial no portal do Azure. Erros semelhantes aos do Cenário 1: O driver Hyper-V de rede está desabilitado são exibidos.

Se o problema persistir mesmo que o driver de rede do 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 conta de usuário com acesso 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.

    # 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 do Hyper-V estão desabilitados

Se você tiver problemas de inicialização com outros drivers do Hyper-V, provavelmente não conseguirá usar 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 exibido por meio do console serial do portal do Azure. Você pode ver os seguintes erros no console serial ou no log serial mais recente no painel Diagnóstico de Inicialização no portal do 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 do Hyper-V

Se a VM estiver inacessível devido à desabilitação de outros drivers do Hyper-V, use uma abordagem offline para reabilitar 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.

      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.

      vi /etc/modprobe.d/disable.conf
      

    Importante

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

    • Para imagens baseadas em RHEL/SLES

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

      # 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 RAMdisk inicial para facilitar a reversão, se necessário.

Se o problema ainda não for resolvido, consulte Falha na inicialização da máquina virtual Linux do Azure e entra no shell de emergência 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 de Máquinas Virtuais Linux do Azure para obter mais opções de solução de problemas.

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.