Compartilhar via


A máquina virtual Linux do Azure falha ao inicializar e entra no shell de emergência dracut

Aplica-se a: ✔️ VMs do Linux

Observação

O CentOS mencionado neste artigo é uma distribuição Linux e chegará ao fim da vida útil (EOL). Considere seu uso e planeje adequadamente. Para obter mais informações, consulte Diretrizes de fim da vida útil do CentOS.

Este artigo fornece soluções para um problema em que uma VM (máquina virtual) Linux do Azure não pode ser inicializada porque o sistema de arquivos do sistema operacional (SO) não pode ser acessado do RAMdisk. A VM pousa no shell de emergência dracut.

Pré-requisitos

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

Como identificar o problema de inicialização dracut

Para identificar um problema de inicialização dracut, use o portal do Azure para exibir a saída de log do console serial da VM no painel de diagnóstico de inicialização, no painel de console serial ou use a CLI AZ.

Todas as VMs com o problema de inicialização chegarão ao shell de emergência dracut ou initramfs e aparecerão no final do log do console serial:

  • RHEL/CentOS/SLES/Oracle Linux:

    [  201.935612] dracut-initqueue[455]: Warning: dracut-initqueue timeout - starting timeout scripts
    [  201.941153] dracut-initqueue[455]: Warning: Could not boot.
             Starting Setup Virtual Console...
    [[0;32m  OK  [0m] 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:/# 
    
  • Ubuntu:

    mdadm: No arrays found in config file or automatically
    done.
    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!  /dev/mapper/osencrypt 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 de problemas on-line

Dica

Se você tiver um backup recente da VM, restaure a VM do backup para corrigir o problema de inicialização.

O console serial é o método mais rápido para resolver problemas. Ele permite que você corrija o problema diretamente sem precisar apresentar o disco do sistema a uma VM de recuperação. Certifique-se de atender aos pré-requisitos necessários para sua distribuição. Para obter mais informações, consulte Console serial da máquina virtual para Linux.

  1. Identifique se sua VM chega ao shell de emergência dracut.

  2. Tente solucionar o problema usando o console serial do Azure.

    Observação

    Nem todos os problemas podem ser resolvidos usando o console serial do Azure.

    1. Dispare a reinicialização da VM (Hard) no console serial.
    2. Interrompa sua VM no menu GRUB com a tecla ESC .
    3. Selecione E para modificar a primeira entrada do kernel no menu GRUB.
    4. Vá para a linha e valide e corrija a configuração incorreta do linux16 GRUB da seguinte maneira:
  3. Depois de modificar manualmente as configurações do GRUB, selecione Ctrl+X para inicializar a VM.

    Qualquer modificação feita neste estágio é uma modificação não persistente. Se a VM puder inicializar, resolva esse problema no arquivo de configuração do GRUB ou ele ocorrerá novamente.

  4. Depois que a VM estiver on-line novamente, corrija os problemas de configuração no /etc/default/grub arquivo de configuração e atualize a configuração do GRUB. Para fazer isso, consulte Reinstalar o GRUB e regenerar o arquivo de configuração do GRUB.

  5. Reinicialize a VM para garantir que ela possa ser inicializada sem qualquer intervenção manual.

Solução de problemas off-line

Dica

Se você tiver um backup recente da VM, restaure a VM do backup para corrigir o problema de inicialização.

  1. Caso o console serial do Azure não funcione na VM específica ou não seja uma opção em sua assinatura, solucione esse problema usando uma VM de resgate/reparo. Use comandos de reparo vm para criar uma VM de reparo que tenha uma cópia anexada do disco do sistema operacional da VM afetada. Monte a cópia dos sistemas de arquivos do sistema operacional na VM de reparo usando chroot.

    Observação

    Como alternativa, você pode criar uma VM de resgate manualmente usando o portal do Azure. Para obter mais informações, confira Solucionar problemas de uma VM do Linux anexando o disco do sistema operacional a uma VM de recuperação usando o portal do Azure.

  2. Vá para as seções a seguir para resolver problemas específicos:

  3. Depois que o problema de inicialização relacionado ao dracut/initramfs for resolvido, execute as seguintes ações:

    1. Saia do chroot.
    2. Desmonte a cópia dos sistemas de arquivos da VM de resgate/reparo.
    3. Execute o comando az vm repair restore para trocar o disco reparado do sistema operacional pelo disco original do sistema operacional da VM. Para obter mais informações, consulte a Etapa 5 em Reparar uma VM do Linux usando os comandos de reparo da Máquina Virtual do Azure.
    4. Valide se a VM pode inicializar examinando o console serial do Azure ou tentando se conectar à VM.

A VM criptografada do ADE falha ao inicializar porque o VFAT está desabilitado

Para obter mais informações, consulte Falha na inicialização de VMs criptografadas do ADE.

Os drivers do Hyper-V estão ausentes

Se os drivers Hyper-V incluídos no kernel Linux de todas as distribuições Linux modernas estiverem desabilitados, reative-os e gere novamente a imagem initramfs/initrd. Para obter mais informações, consulte Cenário 3: outros drivers do Hyper-V estão desabilitados.

Se a VM for Red Hat e for migrada do local, habilite os drivers Hyper-V necessários na imagem initramfs. Para obter mais informações, consulte O driver do Hyper-V não pôde ser incluído no disco RAM inicial ao usar um hipervisor não Hyper-V.

Configuração incorreta do GRUB

O rd.break parâmetro força a VM a inicializar no shell de emergência dracut. Verifique se esse parâmetro não está codificado no arquivo de configuração do GRUB.

Caminho do dispositivo raiz incorreto no arquivo de configuração do GRUB

Valide se o caminho root=/dev/*** raiz no arquivo de configuração do GRUB está correto. Certifique-se de que o caminho adequado do dispositivo seja usado.

  • Se você estiver dentro do chroot em uma VM de reparo/resgate:

    1. Siga a etapa 1 em Solução de problemas offline.
    2. Valide o /etc/default/grub arquivo, a GRUB_CMDLINE_LINUX entrada e procure o root= parâmetro caso ele esteja codificado no arquivo de configuração.
    3. Reinstale o GRUB e gere novamente o arquivo de configuração do GRUB.
  • Se você estiver no console serial do Azure:

    1. Siga a etapa 3 em Solução de problemas online.
    2. Valide a linux16 linha e, em seguida, procure o root= parâmetro e corrija-o.
    3. Selecione Ctrl+X para inicializar a VM.
    4. Depois que a VM for inicializada com êxito, modifique o /etc/default/grub arquivo, corrija o root parâmetro e atualize o arquivo de configuração do GRUB, conforme instruído em Reinstalar o GRUB e regenerar o arquivo de configuração do GRUB.

Durante essa validação, certifique-se do seguinte:

  • Em VMs do Ubuntu com criptografia do sistema operacional, verifique se o nome do dispositivo é /dev/mapper/osencrypt.
  • Em VMs com LVM (Gerenciador de Volume Lógico) no disco do sistema operacional, o volume raiz é /dev/mapper/rootvg-rootlv. O mesmo caminho é usado em VMs RHEL com disco do sistema operacional ADE criptografado.
  • Certifique-se de que nenhum nome de dispositivo na forma de /dev/sdX seja usado, pois eles mudarão nas reinicializações e não são persistentes no Linux. Para obter mais informações, consulte Solucionar problemas de alterações de nome de dispositivo de VM do Linux.
  • Se forem usados UUIDs, certifique-se de que o UUID do sistema de arquivos raiz adequado seja usado e que a sintaxe seja root=UUID=xxx-yyy-zzz.

Caminho do dispositivo de troca incorreto no arquivo de configuração do GRUB

Nesse cenário, uma VM não consegue concluir o processo de inicialização e entra no shell de emergência dracut com um erro semelhante ao seguinte:

[  188.000765] dracut-initqueue[324]: Warning: /dev/VG/SwapVol does not exist
         Starting Dracut Emergency Shell...
Warning: /dev/VG/SwapVol does not exist

O arquivo de configuração do GRUB neste exemplo é definido para carregar um Volume Lógico (LV) como swap com o parâmetro rd.lvm.lv=VG/SwapVol. No entanto, a VM não consegue localizar esse LV durante o processo de inicialização.

É importante observar que não é recomendável usar um dispositivo de permuta dessa maneira em VMs Linux do Azure. Para obter mais informações, consulte Criar um arquivo SWAP para uma VM Linux do Azure.

Para resolver esse problema, localize o caminho rd.lvm.lv=VG/SwapVol de permuta no arquivo de configuração do GRUB (/etc/default/grub) e remova-o. Para fazer isso, utilize um dos métodos seguintes:

  • Se você estiver dentro do chroot em uma VM de reparo/resgate:

    1. Siga a etapa 1 em Solução de problemas offline.
    2. Edite o /etc/default/grub arquivo, vá para a GRUB_CMDLINE_LINUX entrada, localize o rd.lvm.lv=VG/SwapVol parâmetro e remova-o da configuração.
    3. Reinstale o GRUB e gere novamente o arquivo de configuração do GRUB.
  • Se você estiver no console serial do Azure:

    1. Siga a etapa 3 em Solução de problemas online.
    2. Vá para a linha que começa com linux, localize o rd.lvm.lv=VG/SwapVol parâmetro e remova-o.
    3. Selecione Ctrl+X para inicializar a VM.
    4. Depois que a VM for inicializada com êxito, modifique o /etc/default/grub arquivo, remova o rd.lvm.lv=VG/SwapVol parâmetro e atualize o arquivo de configuração do GRUB, conforme instruído na seção Reinstalar o GRUB e regenerar o arquivo de configuração do GRUB.

Parâmetros duplicados no arquivo de configuração do GRUB

Valide se há parâmetros duplicados no arquivo de configuração do GRUB:

  • Se você estiver dentro do chroot em uma VM de reparo/resgate:

    1. Siga a etapa 1 em Solução de problemas offline.
    2. Valide o /etc/default/grub arquivo e a GRUB_CMDLINE_LINUX entrada.
    3. Procure parâmetros duplicados e remova-os.
    4. Atualize o arquivo de configuração do GRUB. Para obter mais informações, consulte Reinstalar o GRUB e regenerar o arquivo de configuração do GRUB.
  • Se você estiver no console serial do Azure:

    1. Siga a etapa 3 em Solução de problemas online.
    2. Valide a linux16 linha, procure parâmetros duplicados e remova-os.
    3. Selecione Ctrl+X para inicializar a VM.
    4. Depois que a VM for inicializada com êxito, modifique o /etc/default/grub arquivo adequadamente, corrija os problemas de configuração identificados anteriormente e atualize o arquivo de configuração do GRUB, conforme instruído em Reinstalar o GRUB e regenerar o arquivo de configuração do GRUB.

Corrupção do sistema de arquivos raiz

Quando o sistema de arquivos raiz está corrompido, ele não pode ser montado a partir da imagem initrd/initramfs.

Para corrigir a corrupção do sistema de arquivos raiz, siga as instruções em Solucionar problemas de inicialização da máquina virtual Linux devido a erros do sistema de arquivos - Executar reparo do sistema de arquivos.

Problemas com a ativação do LVM

Alguns problemas podem ocorrer quando você acessa o volume físico (PV), o grupo de volumes (VG) e/ou o volume lógico (LV) do LVM. Eles não podem ser resolvidos no console serial do Azure. Para resolvê-los, use uma VM de reparo/resgate.

  1. Siga a etapa 1 em Solução de problemas offline.

  2. Para identificar os problemas, execute os comandos a seguir e dê uma olhada nas saídas do comando.

    1. Identifique qual dispositivo corresponde ao disco do sistema operacional e verifique se ele é detectado como um PV:

      lsblk
      pvs
      
    2. Valide se o rootvg VG for detectado:

      vgs
      
    3. Valide se o VE for detectado:

      lvs
      
  3. Solucione os seguintes erros comuns de LVM que causam problemas com o acesso ao volume raiz:

    • PV desconhecido quando o VG rootvg tem apenas um único PV (essa é a configuração padrão do Azure)

      A partição que contém o PV é excluída, redimensionada ou criada incorretamente. Para resolver esse problema, consulte A partição raiz está ausente.

    • PV desconhecido quando o rootvg VG é modificado e dividido em mais de um disco

      Ter 2 PVs no VG rootvg não é uma configuração recomendada. Nesse cenário, o disco de dados pode ser desanexado da máquina virtual e os volumes lógicos rootvg não estão mais acessíveis. Para resolver esse problema, reconecte o disco original à VM e reinicie-o.

  4. Se o PV for irrecuperável, execute uma restauração do backup.

A partição raiz está ausente

O sistema de arquivos raiz pode estar inacessível devido a alguns problemas que ocorrem no nível da partição durante as operações de redimensionamento de partição ou outros.

Nesse cenário, se você documentou o layout da tabela de partição original, com os setores inicial e final exatos para cada uma das partições originais (e nenhuma modificação adicional é feita no sistema, como a criação de novos sistemas de arquivos), recrie as partições usando o mesmo layout original. Você pode fazer isso com ferramentas como fdisk (para tabelas de partição MBR) ou gdisk (para tabelas de partição GPT) para obter acesso ao sistema de arquivos inacessível. Siga esta operação de recuperação de uma VM de reparo/resgate. Para obter mais informações, consulte a seção Solução de problemas offline.

Se essa abordagem não funcionar, recomendamos executar uma restauração do backup.

Corrupção Initrd ou initramfs

A imagem initrd/initramfs tem algum nível de corrupção que faz com que a montagem do volume raiz e o início do processo de inicialização do sistema operacional falhem.

Para resolver esse problema, siga estas etapas de dentro do chroot em uma VM de reparo/resgate:

  1. Siga a etapa 1 em Solução de problemas offline.
  2. Regenere initramfs ausentes manualmente.
  3. Reinicie a VM para confirmar se ela pode inicializar.

Próximas etapas

Caso o erro de inicialização específico não seja um problema dracut ou initramfs, 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.