Solucionar problemas de inicialização da VM do Linux devido a erros fstab

Observação

O CentOS referenciado neste artigo é uma distribuição do Linux e chegará ao EOL (End Of Life). Considere seu uso e planeje de acordo. Para obter mais informações, confira Diretrizes de Fim de Vida do CentOS.

A tabela do sistema de arquivos do Linux, fstab, é uma tabela de configuração projetada para configurar regras em que sistemas de arquivos específicos são detectados e montados de maneira ordenada durante o processo de inicialização do sistema. Este artigo discute várias condições em que uma configuração errada do fstab pode levar a um problema de inicialização e fornece orientação para solução de problemas.

Alguns motivos comuns que podem levar a problemas de inicialização da máquina virtual devido à configuração incorreta do fstab estão listados abaixo:

  • O nome do sistema de arquivos tradicional é usado em vez do identificador exclusivo universal (UUID) do sistema de arquivos.
  • Um UUID incorreto é usado.
  • Existe uma entrada para um dispositivo não conectado sem a opção nofail na configuração do fstab.
  • Entrada incorreta na configuração do fstab.

Identificar problemas do fstab

Verifique o estado de inicialização atual da VM no log serial na folha [diagnóstico de inicialização] (/azure/virtual-machines/boot-diagnostics#boot-diagnostics-view) no portal do Azure. A VM estará em um modo de emergência. Você vê entradas de log semelhantes ao exemplo a seguir, levando ao estado do Modo de emergência:

[K[[1;31m TIME [0m] Timed out waiting for device dev-incorrect.device.
[[1;33mDEPEND[0m] Dependency failed for /data.
[[1;33mDEPEND[0m] Dependency failed for Local File Systems.
…
Welcome to emergency mode! After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again to boot into default mode.
Give root password for maintenance
(or type Control-D to continue)

Observação

"/data" é um exemplo de ponto de montagem usado. A falha de dependência para o ponto de montagem do sistema de arquivos será diferente com base nos nomes usados.

Solução

Existem 2 maneiras de resolver o problema:

Repare a VM on-line

Usar o console serial

  1. Conecte-se ao console serial da VM do portal do Azure.
  2. O acesso manual ao modo de usuário único é necessário para reconfigurar o fstab. As etapas podem variar com base no tipo de sistema operacional Linux em uso e no acesso à conta raiz. Siga a documentação do modo de usuário único para acessar o modo de usuário único para cada imagem de parceiro Linux compatível.
Etapas de solução de problemas do fstab
  1. Depois que a vm inicializar no modo de usuário único. Use seu editor de texto favorito para abrir o arquivo fstab.

    vi /etc/fstab
    
  2. Revisar os sistemas de arquivos listados em /etc/fstab. Cada linha no arquivo fstab indica um sistema de arquivos que é montado quando a VM é iniciada. Para obter mais informações sobre a sintaxe do arquivo fstab, execute o comando man fstab. Para solucionar uma falha de inicialização, revise a entrada do sistema de arquivos que falhou ao montar. É uma boa prática revisar cada linha para garantir que esteja correta tanto na estrutura quanto no conteúdo. Alguns pontos a serem considerados para administrar corretamente um arquivo fstab são os seguintes:

    • Os campos em cada linha são separados por tabulações ou espaços. As linhas em branco são ignoradas. As linhas que têm um sinal de número (#) como primeiro caractere são comentários. As linhas comentadas podem permanecer no arquivo fstab, mas não serão processadas. Recomendamos que você comente as linhas fstab sobre as quais não tem certeza, em vez de remover as linhas.

    • Monte os discos de dados em VMs do Azure usando o UUID da partição do sistema de arquivos. Para determinar o UUID do sistema de arquivos, execute o comando blkid. Para obter mais informações sobre a sintaxe, execute o comando man blkid. Exemplo de entrada UUID no arquivo fstab:

      UUID=<UUID number here>  /data      xfs    defaults,nofail 0  0
      
    • Use a opção nofail nas entradas do sistema de arquivos (discos de dados) para permitir que a inicialização continue mesmo após a ocorrência de erros nas partições para as entradas correspondentes. A opção nofail ajuda a garantir que a VM seja iniciada mesmo se o sistema de arquivos estiver corrompido ou se não existir na inicialização.

  3. Salve as alterações no arquivo fstab.

  4. Use mount -a como prática recomendada após fazer alterações nas entradas do fstab. Isso executará novamente a configuração do fstab e notificará os usuários sobre qualquer sintaxe existente ou erros de entrada.

  5. Depois que a sintaxe e as entradas forem verificadas, reinicie a VM usando o comando abaixo.

    reboot -f
    
  6. Se o comentário ou correção das entradas for bem-sucedido, o sistema deverá acessar um prompt bash no portal. Verifique se você pode se conectar à VM.

Observação

Você também pode usar o comando "ctrl x", que também reinicializaria a vm.

Repare a VM off-line

Se o acesso ao console serial da VM não estiver disponível, uma solução alternativa é reparar a VM offline. Há duas maneiras de adotar uma abordagem off-line:

Use o Reparo Automático do Azure Linux (ALAR)

Os scripts Azure Linux Auto Repair (ALAR) fazem parte da extensão de reparo da VM descrita em Reparar uma VM Linux usando os comandos de reparo da Máquina Virtual do Azure. O ALAR abrange a automação de vários cenários de reparo, incluindo problemas /etc/fstab.

Os scripts ALAR usam o comando reaprar extensão run e sua opção --run-id. O script-id para a recuperação automática é: linux-alar2. Implemente as seguintes etapas para automatizar erros fstab por meio da abordagem ALAR offline:

az vm repair create --verbose -g centos7 -n cent7 --repair-username rescue --repair-password 'password!234' --copy-disk-name  repairdiskcopy
az vm repair run --verbose -g centos7 -n cent7 --run-id linux-alar2 --parameters fstab --run-on-repair
az vm repair restore --verbose -g centos7 -n cent7

Observação

O nome do grupo de recursos "centos7, vm name "cent7" e --copy-disk-name "repairdiskcopy" são exemplos e os valores precisam ser alterados de acordo.

O script de reparo fstab fará um backup do arquivo original e retirará todas as linhas no arquivo /etc/fstab que não são necessárias para inicializar um sistema. Após o início bem-sucedido do sistema operacional, edite o fstab novamente e corrija os erros que não permitiram a reinicialização do sistema antes.

Como alternativa, depois que uma VM de reparo é criada, as alterações também podem ser implementadas fazendo login manualmente na VM de reparo, montando a cópia anexada do disco do sistema operacional e fazendo alterações em seu arquivo fstab. Siga as etapas em aqui:

  • Crie uma VM de reparo usando o comando az vm repair create.
  • Para montar e fazer chroot nos sistemas de arquivos do disco do sistema operacional anexado em uma VM de resgate, siga as instruções de chroot detalhadas.
  • Em seguida, siga as mesmas etapas de solução de problemas do fstab acima.
  • Depois que as alterações são aplicadas, o comando az vm repair restore pode ser usado para executar a troca automática de disco do sistema operacional com a VM original.

Usar método manual

Se o console serial e a abordagem ALAR não forem possíveis ou falharem, o reparo deverá ser executado manualmente. Siga as etapas aqui para anexar manualmente o disco do SO a uma VM de recuperação e troque o disco do SO de volta para a VM original:

Assim que o disco do SO for anexado com sucesso à VM de recuperação, siga as instruções chroot detalhadas para montar e fazer chroot nos sistemas de arquivos do disco do SO anexado. Em seguida, implemente as etapas de solução de problemas do fstab para fazer as alterações apropriadas no arquivo fstab do disco do sistema operacional problemático.

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.