Solução de problemas geral

Nesta página, descrevemos etapas de solução de problemas que podem ser úteis se você encontrar algum problema na utilização de instâncias do Google Compute Engine.

Solução de problemas gerais com instâncias

Se a instância não iniciar

Veja aqui algumas dicas para ajudá-lo a resolver o problema no disco permanente caso a inicialização não ocorra.

  • Examine a saída da porta serial da instância de máquina virtual.

    Mensagens de depuração de BIOS, carregador de inicialização e kernel da instância são impressas na saída da porta serial da instância, fornecendo informações úteis sobre erros ou problemas. Se você ativar a geração de registros de saída da porta serial para o Stackdriver, poderá acessar essas informações mesmo quando a instância não estiver em execução. Consulte Como visualizar a saída da porta serial.

  • Ative o acesso interativo ao console serial.

    Ative o acesso interativo ao console serial de uma instância para fazer login e depurar problemas de inicialização a partir da instância sem precisar que a inicialização seja concluída. Para mais informações, leia Como interagir com o console serial.

  • Verifique se o disco tem um sistema de arquivos válido.

    Quando o sistema de arquivos está corrompido ou inválido, não é possível iniciar a instância. Valide o sistema de arquivos do disco:

    1. Se aplicável, separe esse disco de qualquer instância a que ele esteja anexado:

      gcloud compute instances delete old-instance --keep-disks boot
      
    2. Inicie uma nova instância com a imagem mais recente fornecida pelo Google:

      gcloud compute instances create debug-instance
      
    3. Anexe o disco como não inicializável, mas não o ative. Substitua DISK pelo nome do disco que não será inicializado. Observe que também incluímos um nome de dispositivo para que ele seja facilmente identificável na instância:

      gcloud compute instances attach-disk debug-instance --disk DISK --device-name debug-disk
      
    4. Conecte-se à instância:

      gcloud compute ssh debug-instance
      
    5. Encontre a partição raiz do disco, identificada pela notação part1. Neste caso, a partição está em /dev/sdb1:

      user@debug-instance:~$ ls -l /dev/disk/by-id
      total 0
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 google-debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 google-debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 google-persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 google-persistent-disk-0-part1 -> ../../sda1
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0-part1 -> ../../sda1
      
    6. Execute uma verificação de sistema de arquivos na partição raiz:

      user@debug-instance:~$ sudo fsck /dev/sdb1
      fsck from util-linux 2.20.1
      e2fsck 1.42.5 (29-Jul-2012)
      /dev/sdb1: clean, 19829/655360 files, 208111/2621184 blocks
      
    7. Ative seu sistema de arquivos:

      user@debug-instance:~$ sudo mkdir /mydisk
      
      user@debug-instance:~$ sudo mount /dev/sdb1 /mydisk
      
    8. Verifique se o disco tem arquivos de kernel:

      user@debug-instance~:$ ls /mydisk/boot/vmlinuz-*
      /mydisk/boot/vmlinuz-3.2.0-4-amd64
      
  • Verifique se o disco tem um registro mestre de inicialização (MBR, na sigla em inglês) válido.

    Execute o comando a seguir na instância de depuração que tem o disco permanente de inicialização, como /dev/sdb:

    $ sudo parted /dev/sdb print
    

    Se o MBR é válido, as informações sobre o sistema de arquivos são listadas:

    Disk /dev/sdb: 10.7GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: msdos
    Disk Flags:
    
    Number  Start   End     Size    Type     File system  Flags
     1      2097kB  10.7GB  10.7GB  primary  ext4         boot
    

Se a instância não for criada

Veja algumas dicas para ajudar na solução de problemas, caso sua instância não seja criada.

  • Repita a operação de criação.

    Operações simultâneas de mutação ou criação de recursos podem causar um erro. Por exemplo, se você estiver modificando intervalos secundários em uma sub-rede e criando uma VM ao mesmo tempo, poderá ver o erro a seguir. A solução é tentar novamente a operação com falha.

    The resource 'projects/[PROJECT]/regions/[REGION]/subnetworks/default' is not ready

Se o tráfego de rede de/para a instância está caindo

No Google Compute Engine, o tráfego de rede só ocorre quando o acesso à instância é possibilitado pelas regras de firewall do projeto. Por padrão, todos os projetos têm uma rede padrão que possibilita determinados tipos de conexões. Quando você nega qualquer tráfego por padrão, também nega as conexões do SSH e do tráfego interno. Para mais informações, consulte a página Regras do Firewall.

Além disso, talvez seja necessário ajustar as configurações de keep-alive do TCP para trabalhar com o tempo limite padrão de inatividade de 10 minutos. Para mais informações, consulte Comunicação entre as suas instâncias e a Internet.

Solução de problemas relacionados a regras de firewall ou rotas em uma instância

O console do GCP fornece detalhes de rede para cada uma das interfaces de rede de uma instância. É possível visualizar todas as regras de firewall ou rotas que se aplicam a uma interface ou apenas as regras e rotas usadas pela interface. As duas visualizações podem ajudá-lo a solucionar problemas relacionados a quais regras de firewall e rotas se aplicam à instância e quais estão sendo de fato usadas (nos casos em que a prioridade e a ordem de processamento substituem outras regras ou rotas).

Para mais informações, consulte a solução de problemas na documentação da nuvem privada virtual:

Solução de problemas com o SSH

Em determinadas condições, é possível que uma instância do Linux não aceite mais conexões SSH. Há vários motivos para isso ocorrer, desde um disco cheio até uma configuração incorreta de sshd. Nesta seção, há algumas dicas e abordagens para resolver problemas comuns do SSH.

Verificar as regras de firewall

Cada projeto do Google Compute Engine é provisionado com um conjunto padrão de regras de firewall que permite o tráfego do SSH. Se por algum motivo essas regras forem removidas, não será possível acessar a instância. Veja a lista de firewalls com a ferramenta de linha de comando gcloud compute e verifique se a regra default-allow-ssh existe.

gcloud compute firewall-rules list

Se você não encontrar essa regra, adicione-a novamente:

gcloud compute firewall-rules create default-allow-ssh --allow tcp:22

Depurar o problema no console serial

Ative o acesso de leitura e gravação para um console serial da instância para fazer login nele e resolver problemas com ela. Isso é especialmente útil quando você não consegue fazer login com o SSH ou se a instância não tem conexão com a rede. O console serial permanece acessível nessas duas condições.

Para aprender a ativar o acesso interativo e conectar-se a um console serial de instância, leia Interagir com o console serial.

Testar a rede

Use a ferramenta netcat para se conectar à instância pela porta 22 e confira se a conexão de rede está funcionando. Quando você se conecta, se um banner do ssh é exibido (por exemplo, SSH-2.0-OpenSSH_6.0p1 Debian-4), a conexão de rede está funcionando e é possível descartar a possibilidade de problemas no firewall. Primeiro, use a ferramenta gcloud para ver o natIP externo da sua instância:

gcloud compute instances describe example-instance --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
198.51.100.8

Use o comando nc para se conectar à instância:

# Check for SSH banner
user@local:~$ nc [EXTERNAL_IP] 22
SSH-2.0-OpenSSH_6.0p1 Debian-4

Tentar um novo usuário

Talvez o problema que impeça você de fazer login esteja limitado à sua conta, por exemplo: se as permissões no arquivo ~/.ssh/authorized_keys da instância foram definidas incorretamente.

Tente fazer login como um novo usuário com a ferramenta gcloud, especificando outro nome de usuário na solicitação SSH. A ferramenta gcloud atualizará os metadados do projeto para adicionar o novo usuário e permitir o acesso SSH.

user@local:~$ gcloud compute ssh [USER]@example-instance

onde [USER] é um novo nome de usuário para fazer login.

Usar seu disco em uma nova instância

Se a série de etapas acima não funciona e a instância que você precisa é inicializada a partir de um disco permanente, separe e anexe esse disco para usá-lo em uma nova instância. Substitua DISK pelo nome do seu disco no seguinte exemplo:

gcloud compute instances delete old-instance --keep-disks=boot
gcloud compute instances create new-instance --disk name=DISK boot=yes auto-delete=no
gcloud compute ssh new-instance

Inspecionar uma instância sem desligá-la

Talvez você não consiga se conectar a uma instância que continua atendendo ao tráfego de produção. Nesse caso, inspecione o disco sem interromper a capacidade da instância de atender aos usuários. Primeiro, faça um instantâneo do disco de inicialização da instância. Depois, crie um novo disco a partir desse instantâneo. Crie uma instância temporária e, por fim, anexe e ative o novo disco permanente nessa instância para resolver o problema no disco.

  1. Crie uma nova rede VPC para hospedar a instância clonada:

    gcloud compute networks create debug-network
    
  2. Adicione uma regra de firewall para possibilitar conexões do SSH à rede:

    gcloud compute firewall-rules create debug-network-allow-ssh --allow tcp:22
    
  3. Crie um instantâneo do disco analisado, substituindo DISK pelo nome do disco:

    gcloud compute disks snapshot DISK --snapshot-name debug-disk-snapshot
    
  4. Crie um novo disco com esse instantâneo:

    gcloud compute disks create example-disk-debugging --source-snapshot debug-disk-snapshot
    
  5. Crie uma instância de depuração sem um endereço IP externo:

    gcloud compute instances create debugger --network debug-network --no-address
    
  6. Anexe o disco de depuração à instância:

    gcloud compute instances attach-disk debugger --disk example-disk-debugging
    
  7. Siga as instruções para conectar-se a uma instância sem um endereço IP externo.

  8. Após fazer login na instância de depuração, resolva o problema da instância. Por exemplo, procure nos registros da instância:

    $ sudo su -
    
    $ mkdir /mnt/myinstance
    
    $ mount /dev/disk/by-id/scsi-0Google_PersistentDisk_example-disk-debugging /mnt/myinstance
    
    $ cd /mnt/myinstance/var/log
    
    # Identify the issue preventing ssh from working
    $ ls
    

Usar um script de inicialização

Se nada disso ajudou, você pode criar um script de inicialização para coletar informações logo após a inicialização da instância. Siga as instruções para executar um script de inicialização.

Em seguida, também será necessário redefinir a instância com gcloud compute instances reset para que os metadados entrem em vigor. Como alternativa, recrie a instância com um script de inicialização de diagnóstico:

  1. Execute gcloud compute instances delete com a sinalização --keep-disks.

    gcloud compute instances delete INSTANCE --keep-disks boot
    
  2. Adicione uma nova instância com o mesmo disco e especifique o script de inicialização.

    gcloud compute instances create example-instance --disk name=DISK,boot=yes --startup-script-url URL
    

Como ponto de partida, use o script compute-ssh-diagnostic (em inglês) para coletar informações de diagnóstico dos problemas mais comuns.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine