Resgate uma VM inacessível


Se a VM Linux estiver inacessível por algum motivo, tente resgatá-la seguindo as etapas a seguir.

Funções exigidas

Para receber as permissões necessárias para resgatar uma VM, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esses papéis predefinidos contêm as permissões necessárias para resgatar uma VM. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As permissões a seguir são necessárias para resgatar uma VM:

  • compute.instances.create no projeto
  • compute.disks.create no projeto
  • compute.instances.get no projeto
  • compute.disks.createSnapshot nos discos
  • compute.instances.attachDisk em uma nova VM
  • compute.disks.use no disco
  • compute.instances.start em uma VM nova e inacessível
  • compute.instances.stop em uma VM nova e inacessível

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Resgatar uma VM

Se não for possível se conectar à VM ou se o disco de inicialização estiver cheio, crie uma VM temporária para localizar a VM inacessível.

  1. (Opcional) Interrompa a VM inacessível.
  2. Crie um snapshot no disco de inicialização da VM de origem. Se o sistema de arquivos raiz for dividido em vários discos, você precisará fazer um snapshot de cada disco.
  3. Crie uma VM temporária usando uma imagem pública mais próxima do SO da VM inacessível. Em alguns casos, uma política de imagem confiável pode restringir a criação de discos de inicialização a partir de imagens públicas. Nesses casos, é necessário pedir a um administrador para suspender temporariamente essa restrição antes de criar uma VM de resgate. Consulte Definir restrições de acesso a imagens para mais informações.
  4. Para cada um dos snapshots dos discos de inicialização da VM inacessível que você criou anteriormente, crie um novo disco com base no snapshot e conecte-o à VM de resgate fazendo o seguinte:

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

      Acessar instâncias de VM

    2. Clique no nome da VM temporária que você criou.

    3. Clique em Editar.

    4. Em Discos adicionais, clique em Adicionar novo disco e faça o seguinte:

      1. Adicione o nome do disco, como my-recovery-disk
      2. Em Tipo de origem, selecione a guia Snapshot.
      3. No menu suspenso Snapshot de origem, selecione o snapshot da VM de origem criada anteriormente nestas etapas.
      4. Clique em Concluído.
    5. Clique em Salvar.

  5. Conecte-se à VM temporária usando SSH.

  6. Identifique o nome de cada um dos discos que você anexou anteriormente à VM executando o seguinte comando:

    lsblk -d -o NAME,SERIAL

    O resultado será assim:

     NAME SERIAL
     sda  rescue-vm
     sdb  my-recovery-disk
     

    Neste exemplo, rescue-vm é o disco de inicialização da VM de resgate e my-recovery-disk é o disco de inicialização do snapshot da VM inacessível. Anote o NAME da VM inacessível para uso na próxima etapa.

  7. Para cada um dos discos que você anexou anteriormente à VM, faça o seguinte:

    1. Identifique o sistema de arquivos de cada partição executando o seguinte comando:

      fdisk -l /dev/NAME -o Device,Size,Type
      

      Substitua NAME pelo nome do disco de inicialização da VM inacessível da etapa anterior. Neste exemplo, o nome seria sdb.

      O resultado será assim:

      Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
      Disk model: PersistentDisk
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 4096 bytes
      I/O size (minimum/optimal): 4096 bytes / 4096 bytes
      Disklabel type: gpt
      Disk identifier: B31430F1-F041-4555-96B9-B2F43DC057AD
      
      Device     Size Type
      /dev/sdb1    2M BIOS boot
      /dev/sdb2   20M EFI System
      /dev/sdb3   10G Linux filesystem
      

      A coluna Type lista o sistema de arquivos de cada partição. Se o tipo de sistema de arquivos estiver ausente em qualquer partição, execute o seguinte comando:

      file -sL /dev/PARTITION_NAME
      

      Substitua NAME pelo nome da partição.

      A saída varia de acordo com o tipo de sistema de arquivos:

      • Nenhum sistema de arquivos: se a saída mostrar apenas data, a partição não contém um sistema de arquivos. Exemplo de saída:

        /dev/sdb1: data
        
      • Sistema de arquivos EFI: se a saída descrever um setor de inicialização DOS/MBR, a partição terá um sistema de arquivos EFI. Exemplo de saída:

        dev/sdb2: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 4, reserved sectors
        4, root entries 512, sectors 40960 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 40, sectors/
        track 32, heads 64, serial number 0xf2af2664, label: "EFI        ", FAT (16 bit)
        
      • Sistema de arquivos do Linux: se a saída descrever dados do sistema de arquivos, a partição será um sistema de arquivos do Linux. Exemplo de saída:

        /dev/sdb3: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
        

      Anote o nome da partição do sistema de arquivos Linux.

    2. Crie um ponto de montagem em /rescue:

      sudo mkdir /rescue
    3. Monte a partição do sistema de arquivos do Linux em /rescue:

      sudo mount PARTITION_NAME /rescue
      

      Substitua PARTITION_NAME pelo nome do sistema de arquivos Linux que você anotou anteriormente.

    4. Se você quiser modificar o diretório raiz do sistema de arquivos usando o comando chroot, também será necessário montar o sistema de arquivos virtual e os dispositivos executando os seguintes comandos:

      sudo mount -t proc /proc /rescue/proc
      sudo mount -t sysfs /sys /rescue/sys
      sudo mount -o bind /dev /rescue/dev
      sudo mount -o bind /dev/pts /rescue/dev/pts
      sudo mount -o bind /run /rescue/run
      

    Agora, o sistema de arquivos do disco de inicialização inacessível está ativado em /rescue. É possível navegar pelo sistema de arquivos, alterar arquivos de configuração, corrigir problemas ou extrair os dados.

Reverter as alterações e inicializar a VM inacessível novamente

Depois que o problema for corrigido ou os dados forem recuperados, você precisará recuperar a VM real. Siga as etapas abaixo para restaurar a VM original:

  1. Desmonte o disco adicional ativado em /rescue na VM temporária:

     cd ~
     sudo umount /rescue

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

    Acessar instâncias de VM

    1. Selecione a VM temporária que você criou.

    2. Clique em Editar.

    3. Em Discos adicionais, clique em do disco criado nas etapas anteriores para removê-lo da VM temporária.

    4. Clique em Salvar.

  3. Acesse a página Instâncias de VMs no Console do Google Cloud.

    Acessar instâncias de VM

    1. Se a VM inacessível ainda estiver em execução, interrompa a VM.

    2. Clique no nome da VM que você acabou de interromper e clique em Editar.

    3. Em Disco de inicialização, clique em Remover disco de inicialização para remover o disco de inicialização da VM inacessível.

    4. Em seguida, clique em CONFIGURAR DISCO DE INICIALIZAÇÃO para anexar o disco que você criou e corrigiu anteriormente em Resgatar uma VM nesta página.

      1. Na seção Disco de inicialização, clique na guia Discos existentes.
      2. Na lista suspensa, selecione o disco que você criou na seção anterior, por exemplo, my-recovery-disk.
      3. Clique em Selecionar e em Salvar.
    5. Iniciar a VM.

  4. Agora você poderá conectar-se à VM usando SSH.