Resgatar uma VM inacessível


Se sua VM Linux estiver inacessível por algum motivo, você pode tentar resgatar a VM usando as etapas a seguir.

Funções obrigatórias

Para obter as permissões necessárias para resgatar uma VM, peça ao administrador para conceder a você as seguintes funções do IAM no projeto:

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

Estas funções predefinidas contêm as permissões necessárias para resgatar uma VM. Para ver as permissões exatas necessárias, expanda a seção Permissões necessárias :

Permissões necessárias

As seguintes permissões 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 em discos
  • compute.instances.attachDisk na nova VM
  • compute.disks.use no disco
  • compute.instances.start em VM nova e inacessível
  • compute.instances.stop em VM nova e inacessível

Você também poderá obter essas permissões com funções personalizadas ou outras funções predefinidas .

Resgatar uma VM

Se não conseguir se conectar à VM ou se o disco de inicialização estiver cheio, você deverá criar uma VM temporária para resgatar a VM inacessível.

  1. (Opcional) Pare a VM inacessível.
  2. Crie um instantâneo do disco de inicialização da VM inacessível. Se o sistema de arquivos raiz estiver dividido em vários discos, você deverá criar um instantâneo de cada disco.
  3. Crie uma VM temporária usando uma imagem pública mais próxima do sistema operacional da VM inacessível . Em alguns casos, uma política de imagem confiável pode impedir a criação de discos de inicialização a partir de imagens públicas. Nesses casos, você deverá solicitar a um administrador que suspenda temporariamente essa restrição antes de poder criar uma VM de resgate. Consulte Definir restrições de acesso à imagem para obter mais informações.
  4. Para cada um dos instantâneos dos discos de inicialização da VM inacessível que você criou anteriormente, crie um novo disco a partir do instantâneo e anexe-o à VM de resgate fazendo o seguinte:

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

      Acesse as 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. Para Tipo de origem , selecione a guia Instantâneo .
      3. No menu suspenso Instantâneo de origem , selecione o instantâneo da VM de origem que você criou 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

    A saída é semelhante à seguinte:

     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 instantâneo da VM inacessível. Anote o NAME da VM inacessível para uso na próxima etapa.

  7. Para cada um dos discos anexados 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 .

      A saída é semelhante à seguinte:

      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 faltando em alguma partição, execute o seguinte comando:

      file -sL /dev/PARTITION_NAME
      

      Substitua NAME pelo nome da partição.

      A saída difere dependendo do tipo de sistema de arquivos:

      • Nenhum sistema de arquivos : se a saída exibir 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 possui 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 Linux : se a saída descreve dados do sistema de arquivos, a partição é um sistema de arquivos Linux. Exemplo de saída:

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

      Observe 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 Linux em /rescue :

      sudo mount PARTITION_NAME /rescue
      

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

    4. Se desejar modificar o diretório raiz do sistema de arquivos usando o comando chroot , você deverá montar adicionalmente 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
      

    O sistema de arquivos do disco de inicialização inacessível agora está montado em /rescue . Você pode navegar no sistema de arquivos, alterar arquivos de configuração, corrigir problemas ou recuperar os dados.

Reverta as alterações e inicialize a VM inacessível de volta

Depois que o problema for corrigido ou os dados forem recuperados, você precisará trazer de volta a VM real. Use as etapas a seguir para restaurar a VM original:

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

     cd ~
     sudo umount /rescue

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

    Acesse as instâncias de VM

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

    2. Clique em Editar .

    3. Em Discos adicionais , clique em no disco criado nas etapas anteriores para desanexar o disco adicional da VM temporária.

    4. Clique em Salvar .

  3. Acesse a página de instâncias de VM no console do Google Cloud.

    Acesse as instâncias de VM

    1. Se a VM inacessível ainda estiver em execução, pare 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 Detach book disk para desconectar o disco de inicialização existente da VM inacessível.

    4. Em seguida, clique em CONFIGURE BOOT DISK para anexar o disco que você criou e corrigiu anteriormente em Rescue a 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. Inicie a VM .

  4. Agora você deve conseguir se conectar à VM usando SSH.