Como solucionar problemas de inicialização da VM


Este documento inclui informações sobre solução de problemas de inicialização de VMs devido a erros de cota e discos de inicialização.

Erros de cota

Se você receber um erro de cota ao tentar iniciar uma instância, será necessário solicitar mais cota de CPU. Para mais informações, consulte a seção Instâncias de VM na documentação sobre Cotas de recursos.

Discos de inicialização

Caso a instância não seja iniciada e você não consiga se conectar nem fazer login nela por meio do console serial interativo, identifique o motivo pelo qual o disco de inicialização não está concluindo o processo.

Identifique o motivo para o disco de inicialização não estar sendo iniciado

  • Verifique se o disco de inicialização não está cheio.

    Se o disco de inicialização estiver completamente cheio e o sistema operacional não for compatível com o redimensionamento automático, não será possível se conectar à instância. Crie uma nova instância e recrie o disco de inicialização. Para mais informações, consulte Como recuperar VMs ou discos de inicialização completos.

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

    As mensagens de depuração do BIOS, do carregador de inicialização e do kernel de uma instância são exibidas 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 da saída de porta serial para o Cloud Logging, será possível acessar essas informações mesmo quando a instância não estiver em execução.

  • 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, consulte Solução de problemas usando o console serial.

  • Verificar se a clonagem do disco de inicialização não está em andamento

    Se a clonagem do disco de inicialização estiver em andamento, não será possível iniciar a VM e você verá um erro semelhante ao seguinte.

    Failed to start example-vm: The instance resource 'projects/example-project/zones/us-central1-b/instances/example-vm' is already being used by 'projects/example-project/zones/us-central1-b/disks/clone'
    

    Aguarde a conclusão do clone e inicie a VM.

  • Verificar se o snapshot do disco de inicialização não está em andamento

    Se um snapshot do disco de inicialização estiver em andamento, não será possível iniciar a VM, e você verá um erro semelhante ao seguinte:

    The instance resource 'projects/example-project/zones/asia-east1-b/instances/example-vm' is already being used by 'projects/example-project/global/snapshots/example-vm-prod-asia-east1-b-abc'
    

    Aguarde a conclusão do snapshot e inicie a VM.

  • 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 monte. Substitua DISK pelo nome do disco que não será inicializado. Veja o nome do dispositivo que identifica o disco 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. Nesse caso, a partição raiz do disco está em /dev/sdb1:

      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:

      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. Monte seu sistema de arquivos:

       sudo mkdir /mydisk
      
       sudo mount /dev/sdb1 /mydisk
      
    8. Verifique se o disco tem arquivos de kernel:

       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 com o disco de inicialização permanente anexado, 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
    

Corrigir o problema de inicialização

Depois de identificar em que parte está ocorrendo a falha na inicialização, corrija o problema realizando uma das ações a seguir:

Como criar um disco de inicialização independente

Ative sua imagem importada em um disco secundário anexado a uma instância de VM temporária. Use o console do Google Cloud ou a CLI gcloud para criar um disco independente usando a imagem que você fez upload e crie uma VM temporária com o disco independente anexado. É possível usar essa instância para modificar arquivos no disco independente e corrigir erros que impedem a inicialização da imagem.

Console

Crie um disco independente a partir da imagem do disco de inicialização que você importou. Desanexe um disco de inicialização de uma instância e crie a instância usando esse disco.

  1. In the Google Cloud console, go to the Disks page.

    Go to Disks

  2. Click Create disk.
  3. On the Create a disk page, specify the following attributes:
    • Zone: Select a zone near you. You must use this same zone when you create your temporary instance.
    • Disk source type: Image
    • Source image: Specify the name of the boot disk image that you imported.
  4. To create the disk, click Create.

Crie uma instância temporária em que é possível anexar o disco independente e configurar o carregador de inicialização para funcionar em um ambiente do console do Google Cloud.

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

    Acesse "Instâncias"

  2. Clique no botão Criar instância.

  3. Na página Criar uma instância, especifique um nome de instância e uma zona para localizar a instância. A zona precisa ser a mesma em que você criou o disco independente.

  4. Expanda a seção Gerenciamento, segurança, discos, rede, locatário único.

  5. Na guia Discos da seção Discos adicionais, clique em Anexar disco atual. Uma nova seção será exibida.

  6. Na seção Disco, selecione o disco independente que foi criado na lista suspensa. Isso anexa o disco independente à instância para que seja possível ativá-lo e, posteriormente, modificar o respectivo conteúdo.

  7. Clique em Concluído para terminar de anexar o disco.

  8. Clique no botão Criar para criar a instância.

gcloud

Crie um disco independente a partir da imagem do disco de inicialização que você importou. Desanexe um disco de inicialização de uma instância e crie a instância usando esse disco.

gcloud compute disks create DISK_NAME \
    --zone=ZONE \
    --image=IMAGE_NAME

Substitua:

  • DISK_NAME: o nome do novo disco independente.

  • ZONE: uma zona perto de você. Use esta mesma zona quando criar a instância temporária.

  • IMAGE_NAME: o nome da imagem do disco de inicialização importada.

Crie uma instância temporária em que é possível anexar o disco independente e configurar o carregador de inicialização para funcionar em um ambiente do console do Google Cloud.

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --disk name=DISK_NAME

Substitua:

  • INSTANCE_NAME: um nome exclusivo para a instância;

  • ZONE: a zona em que você criou o disco independente;

  • DISK_NAME: o nome do disco independente criado a partir da imagem do disco de inicialização importada.

Depois de criar a instância com o disco independente anexado, você tem um ambiente virtual onde pode modificar o carregador de inicialização a partir da sua imagem de disco de inicialização original.

Como configurar o disco de inicialização

Conecte-se à instância, ative o disco independente e configure o carregador de inicialização para que ele seja executado no Compute Engine.

  1. Conectar à instância temporária usando o SSH no navegador ou o comando gcloud compute ssh.
  2. Use o comando blkid para identificar o disco que quer modificar e as partições que precisa ativar. Nesse exemplo, /dev/sdb é o disco que você importou.

    lsblk
    
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   10G  0 disk
    └─sda1   8:1    0   10G  0 part /
    sdb      8:16   0  100G  0 disk
    ├─sdb1   8:17   0   96G  0 part
    ├─sdb2   8:18   0    1K  0 part
    └─sdb5   8:21   0    4G  0 part
    
  3. Ative a partição raiz a partir do disco independente no diretório /tmp. Nesse exemplo, /dev/sdb1 é a partição raiz, e as outras partições não exigem modificações. O esquema de partição pode exigir a ativação de várias partições para acessar todos os arquivos que você precisa mudar.

    sudo mount /dev/sdb1 /tmp
    
  4. Edite os arquivos que possam provocar falha do disco no processo de inicialização. Para mais informações, consulte as instruções de configuração do carregador de inicialização.

  5. Desmonte o disco de inicialização da instância temporária.

    sudo umount /tmp
    

Como usar o disco de inicialização

Quando terminar a configuração do disco, desanexe-o e use-o como disco de inicialização da nova instância.

Console

Desanexe o disco independente da instância temporária.

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

    Acesse "Instâncias"

  2. Na lista de instâncias, clique no nome da instância temporária em que você modificou o disco de inicialização independente. A página de detalhes da instância é aberta.

  3. No início da página, clique em Editar.

  4. Em Discos adicionais, clique no X ao lado do disco independente para indicar que você quer desanexá-lo da instância temporária.

  5. Clique em Salvar.

Use o disco independente desanexado para criar uma instância.

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

    Acesse "Instâncias"

  2. Clique no botão Criar instância.

  3. Na página Criar uma instância, especifique um nome de instância e uma zona para localizar a instância. A zona precisa ser a mesma em que você criou o disco independente.

  4. Em Disco de inicialização, clique em Alterar para começar a configurar o disco de inicialização.

  5. Na guia Discos atuais, selecione o disco de inicialização independente para usá-lo na inicialização da nova instância.

  6. Clique no botão Criar para criar a instância.

gcloud

Desanexe o disco independente da instância temporária.

gcloud compute instances detach-disk INSTANCE_NAME \
    --disk name=DISK_NAME

Substitua:

  • INSTANCE_NAME: um nome exclusivo para a instância;
  • DISK_NAME: o nome do novo disco independente.

Use o disco independente desanexado para criar uma instância.

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --disk name=DISK_NAME,boot=yes

Substitua:

  • INSTANCE_NAME: um nome exclusivo para a instância;
  • ZONE: a zona em que o disco independente está localizado;
  • DISK_NAME: o nome do disco independente criado a partir da imagem do disco de inicialização importada.

Teste a instância criada usando o disco de inicialização modificado. Se ainda não conseguir se conectar à instância, veja a saída da porta serial novamente para identificar onde o processo de inicialização está falhando. Repita o processo de solução de problemas até corrigir as erros na imagem do disco de inicialização.