Resolver problemas de inicialização de instâncias do Linux no Compute Engine

Este documento ajuda você a descobrir por que sua instância do Linux Compute Engine não inicializa e a corrigir problemas comuns.

Uma instância de computação que não inicializa geralmente apresenta um ou mais destes sintomas:

  • A instância de computação está no estado RUNNING, mas não é possível se conectar a ela usando SSH.
  • A saída do console serial para no meio da sequência de inicialização ou termina em um prompt de emergência ou resgate.
  • A saída do console serial contém FAILED, error:, Kernel panic ou emergency mode.

Para resolver um problema de inicialização, primeiro identifique a causa e, em seguida, corrija-o na instância de computação, se ainda for possível se conectar, ou corrija-o off-line anexando o disco de inicialização a outra instância de computação.

Se a instância de computação terminar a inicialização, mas você não conseguir se conectar a ela, consulte Solução de problemas de erros de SSH.

Antes de começar

  • Verifique se a instância de computação grava a saída do console serial. A saída da porta serial fica disponível enquanto a instância de computação é executada. Para mantê-la depois que a instância de computação for interrompida, ative a geração de registros da porta serial para o Cloud Logging. Para mais informações, consulte Como visualizar a saída da porta serial.
  • Configure a autenticação, caso ainda não tenha feito isso. Com isso, você confirma sua identidade para acesso a serviços e APIs do Google Cloud . Para executar código ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:
    1. Instale a CLI do Google Cloud. Após a instalação, inicialize a Google Cloud CLI executando o seguinte comando:

      gcloud init

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

    2. Defina uma região e uma zona padrão.

Detectar a causa automaticamente

Antes de ler a saída do console serial manualmente, use uma das ferramentas a seguir. Cada um lê a saída da inicialização mais recente da instância de computação, informa a causa mais provável e vincula à seção correspondente neste documento.

Console

  1. No console do Google Cloud , acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Na linha da instância de computação, clique em SSH.

  3. Se a conexão falhar, clique em Resolver problemas na caixa de diálogo de conexão. A ferramenta de solução de problemas executa verificações de conectividade, incluindo uma verificação de inicialização que analisa a saída do console serial.

gcloud

Para verificar uma instância de computação a que não é possível se conectar usando SSH, execute o solucionador de problemas de SSH da CLI gcloud, que executa verificações de conectividade e de inicialização:

gcloud compute ssh INSTANCE_NAME --zone=ZONE --troubleshoot

Para verificar a sequência de inicialização diretamente, execute o comando de diagnóstico de inicialização:

Para usar esse comando, instale o componente de comandos alfa.

gcloud alpha compute diagnose boot INSTANCE_NAME --zone=ZONE

Substitua:

  • INSTANCE_NAME: o nome da instância de computação.
  • ZONE: a zona que contém a instância de computação.

Se um problema de inicialização for detectado, a saída vai nomear a causa e vincular à correção. Se nenhum problema for encontrado, siga as etapas manuais.

Ler a saída do console serial

Se as ferramentas não detectarem um problema ou se você quiser confirmar a causa, leia a saída do console serial:

Console

  1. No console do Google Cloud , acesse a página Instâncias de VM.

    Acessar a página "Instâncias de VM"

  2. Selecione a instância de computação para ver a saída da porta serial.

  3. Em Registros, clique em Porta serial 1 (console).

gcloud

gcloud compute instances get-serial-port-output INSTANCE_NAME --zone=ZONE

Substitua:

  • INSTANCE_NAME: o nome da instância de computação.
  • ZONE: a zona que contém a instância de computação.

Acesse a última inicialização. As linhas úteis geralmente estão imediatamente antes da primeira linha [FAILED], da linha Kernel panic ou do comando de emergência. Compare o que você encontrar com as assinaturas nas seções a seguir.

Problemas comuns de inicialização

As seções a seguir listam falhas comuns de inicialização em instâncias de computação do Linux, as assinaturas de saída do console serial e como resolvê-las. A maioria das resoluções exige que você anexe o disco de inicialização a uma VM de resgate, conforme descrito em Corrigir o disco off-line.

Não é possível montar a entrada de arquivo /etc/fstab

Sintoma:a saída do console serial contém linhas como as seguintes, seguidas por You are in emergency mode:

UUID=1234abcd-... does not exist
Timed out waiting for device /dev/sdb1
mount: special device /dev/sdb1 does not exist
[DEPEND] Dependency failed for /mnt/data.mount

Causa:uma entrada em /etc/fstab se refere a um dispositivo ou UUID que não está conectado à instância de computação, ou o sistema de arquivos não pode ser montado. O serviço systemd interrompe a inicialização e entra no modo de emergência.

Resolução:na VM de resgate, corrija ou remova a entrada em /etc/fstab no disco montado. Para o procedimento, consulte Resolver problemas de inicialização da VM do Linux causados por erros fstab. Para a opção de montagem que impede que um dispositivo ausente bloqueie a inicialização, consulte Montar o disco.

O GRUB não consegue carregar a configuração ou o kernel

Sintoma:a inicialização é interrompida em um prompt do GRUB, e a saída do console serial contém linhas como as seguintes:

error: file '/boot/grub/grub.cfg' not found
error: file '/vmlinuz-6.1.0-18-amd64' not found
error: no such partition
error: no such device
error: unknown filesystem
error: you need to load the kernel first
grub rescue>
Minimal BASH-like line editing is supported

Causa:o carregador de inicialização GRUB não consegue encontrar o arquivo de configuração, os módulos ou o kernel e o disco RAM inicial a que a configuração se refere. Esse problema ocorre após uma falha no upgrade do pacote, uma mudança no layout da partição, uma partição /boot reformatada ou corrompida ou um disco clonado cujos UUIDs do sistema de arquivos foram alterados.

Resolução:na VM de resgate, monte o disco de inicialização e entre em um ambiente chroot, conforme descrito em Resgatar uma VM. Em seguida, gere novamente o arquivo de configuração do GRUB, conforme descrito em Configurar o carregador de inicialização. Se não for possível corrigir o carregador de inicialização, restaure o disco de um snapshot.

O disco RAM inicial não pode montar o sistema de arquivos raiz

Sintoma:a saída do console serial contém linhas como as seguintes:

dracut-initqueue[452]: Warning: dracut-initqueue timeout - starting timeout scripts
dracut: FATAL: ...
Failed to mount /sysroot
ALERT! UUID=1234abcd-... does not exist. Dropping to a shell!
Gave up waiting for root file system device
VFS: Unable to mount root fs on unknown-block(0,0)

Causa:o disco RAM inicial (initramfs) foi iniciado, mas não foi possível encontrar ou montar o sistema de arquivos raiz. As causas comuns são um parâmetro de kernel root= ou UUID que não corresponde mais ao disco, uma imagem initramfs sem o driver do disco ou uma imagem initramfs corrompida. Em séries de máquinas que usam a interface de disco NVMe, uma configuração de inicialização que nomeia o disco por um caminho de dispositivo, como /dev/sda, não corresponde mais. Use o UUID.

Resolução:confirme se o sistema de arquivos raiz que o disco RAM inicial está procurando existe no disco montado e recrie o disco RAM inicial para seu sistema operacional. Para ver o procedimento, consulte Resolver problemas de inicialização da VM do Linux devido ao kernel panic e Corrigir o disco off-line.

Corrupção do sistema de arquivos

Sintoma:a saída do console serial contém linhas como as seguintes:

Bad magic number in super-block
EXT4-fs error (device sda1): ...
XFS (sda1): Metadata corruption detected
XFS (sda1): log mount/recovery failed
BTRFS error (device sda1): ...
UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.

Causa:o sistema de arquivos no disco de inicialização está danificado, geralmente após um desligamento incorreto, um disco cheio ou um erro de E/S.

Resolução:crie um snapshot do disco. Em seguida, na VM de resgate, verifique e repare o sistema de arquivos no disco desmontado, conforme descrito em Identificar o motivo pelo qual o disco de inicialização não está sendo inicializado. Se a verificação não conseguir reparar o sistema de arquivos, restaure o disco de um snapshot.

Kernel panic

Sintoma:a saída do console serial contém Kernel panic - not syncing: seguido pelo motivo, por exemplo, Attempted to kill init!, Fatal exception, hung_task: blocked tasks, Out of memory, Fatal Machine check ou NMI: Not continuing. Uma imagem de kernel corrompida para antes com -- System halted.

Causa:o kernel encontrou um erro irrecuperável. O motivo após os dois-pontos identifica a categoria: um init falho, uma verificação de máquina de hardware, um pânico de esgotamento de memória ou uma imagem de kernel corrompida.

Resolução:redefina a instância de computação. Se o pânico se repetir, consulte Resolver problemas de inicialização da VM do Linux devido ao kernel panic.

Falha ao carregar a política do SELinux

Sintoma:a saída do console serial contém um dos seguintes itens e a inicialização é interrompida:

Failed to load SELinux policy
Unable to load SELinux policy

Você também pode ver Warning -- SELinux targeted policy relabel is required, que não é um erro: a instância de computação reclassifica o sistema de arquivos e depois reinicializa sozinha.

Causa:o repositório de políticas do SELinux no disco está ausente ou corrompido, ou os rótulos de arquivo estão inconsistentes após uma restauração ou uma mudança off-line.

Resolução:na VM de resgate, marque o disco montado para uma nova rotulagem completa do SELinux na próxima inicialização ou reinstale os pacotes de política do SELinux para seu sistema operacional se o repositório de políticas estiver danificado. Em imagens do SO baseadas no RHEL, é possível deixar a instância de computação inicializar enquanto você corrige a política definindo o SELinux no modo permissivo, conforme descrito em Mudar o SELinux para o modo permissivo.

O sistema não pode iniciar o processo init

Sintoma:a saída do console serial contém linhas como as seguintes:

Failed to switch root
Target filesystem doesn't have requested /sbin/init
No working init found
run-init: /sbin/init: No such file or directory
/sbin/init: error while loading shared libraries: ...

Causa:o sistema de arquivos raiz foi montado, mas o programa init, como systemd, está ausente, não é executável ou depende de uma biblioteca compartilhada que está ausente. Esse problema geralmente ocorre após um upgrade de pacote interrompido ou uma restauração incompleta.

Resolução:na VM de resgate, insira um ambiente chroot conforme descrito em Resgatar uma VM. Verifique se o programa init existe e se as bibliotecas estão intactas. Se não estiverem, reinstale o pacote do sistema init usando o gerenciador de pacotes da sua distribuição.

Modo de emergência e conta raiz bloqueada

Sintoma:a saída do console serial termina com uma das seguintes opções:

You are in emergency mode. After logging in, type "journalctl -xb" to view system logs
Give root password for maintenance (or press Control-D to continue):
Cannot open access to console, the root account is locked.

Causa:uma unidade falhou durante a inicialização e o systemd parou no destino de emergência. Nas imagens do SO fornecidas pelo Google, a conta raiz não tem senha. Portanto, o shell de emergência não pode ser usado no console serial.

Resolução:as linhas que precedem o nome do aviso de emergência indicam a unidade com falha. A falha geralmente é causada por um dos seguintes problemas:

Corrija a causa off-line, conforme descrito em Corrigir o disco off-line. Não tente usar o shell de emergência.

O firmware não consegue encontrar um disco inicializável

Sintoma:a saída do console serial contém uma das seguintes mensagens antes de qualquer mensagem do kernel:

No bootable device.
BdsDxe: failed to load Boot0001
Invalid partition table!
Verification failed: (0x1A) Security Violation

Causa:o disco de inicialização não está anexado como o dispositivo de inicialização, a tabela de partição ou o registro de inicialização está danificado ou, em uma instância de VM protegida com inicialização segura, o carregador de inicialização ou o kernel não está assinado corretamente.

Resolução:confirme se o disco está anexado como o disco de inicialização da instância de computação. Consulte Como remover e anexar discos. Se a tabela de partição ou o registro de inicialização estiverem danificados, repare o carregador de inicialização conforme descrito em O GRUB não consegue carregar a configuração ou o kernel. Não é possível corrigir uma violação da Inicialização segura editando o disco. Restaure um kernel e um carregador de inicialização assinados ou desative a Inicialização segura na instância de computação, conforme descrito em Como modificar opções de VM protegida em uma instância de VM.

Corrigir o disco off-line

A maioria dos problemas de inicialização não pode ser corrigida de dentro da instância de computação, porque ela nunca chega a um prompt de login. Em vez disso, anexe o disco de inicialização a uma VM de resgate temporária, monte-o, faça a alteração e mova o disco de volta. Para o procedimento, consulte Resgatar uma VM inacessível.

As resoluções neste documento pressupõem que o disco de inicialização original esteja anexado e montado em uma VM de resgate. Antes de mudar o disco, crie um snapshot para restaurá-lo se o reparo falhar. Para ver o procedimento, consulte Criar snapshots de arquivo e de disco padrão.

Restaurar a instância de computação se o disco não puder ser reparado

Se nenhuma das resoluções funcionar ou se o sistema de arquivos não puder ser reparado, restaure o disco de inicialização de um snapshot ou crie uma nova instância de computação de um snapshot ou uma imagem personalizada do SO e mova seus dados para ela.

A seguir