Recupere uma VM inacessível


Se a sua VM Linux estiver inacessível por qualquer motivo, pode tentar resgatar a VM através dos seguintes passos.

Funções necessárias

Para receber as autorizações de que precisa para recuperar uma VM, peça ao seu administrador para lhe conceder as seguintes funções da IAM no projeto:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Estas funções predefinidas contêm as autorizações necessárias para recuperar uma VM. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações 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 na VM nova e inacessível
  • compute.instances.stop na VM nova e inacessível

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Recupere uma VM

Se não conseguir estabelecer ligação à sua VM ou o disco de arranque estiver cheio, tem de criar uma VM temporária para recuperar a VM inacessível.

  1. (Opcional) Pare a VM inacessível.
  2. Crie um instantâneo a partir do disco de arranque da VM inacessível. Se o sistema de ficheiros raiz estiver dividido em vários discos, tem de criar uma captura instantânea de cada disco.
  3. Crie uma VM temporária com uma imagem pública mais próxima do SO da VM inacessível. Em alguns casos, uma política de imagens fidedignas pode impedir a criação de discos de arranque a partir de imagens públicas. Nestes casos, tem de pedir a um administrador que levante temporariamente esta restrição antes de poder criar uma VM de recuperação. Consulte o artigo Defina restrições de acesso a imagens para mais informações.
  4. Para cada um dos instantâneos dos discos de arranque da VM inacessível que criou anteriormente, crie um novo disco a partir do instantâneo e anexe-o à VM de recuperação fazendo o seguinte:

    1. Na Google Cloud consola, aceda à página Instâncias de VM.

      Aceder às instâncias de VM

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

    3. Clique em Editar.

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

      1. Adicione o nome do disco, como my-recovery-disk
      2. Para Tipo de origem, selecione o separador Instantâneo.
      3. No menu pendente Instantâneo de origem, selecione o instantâneo da VM de origem que criou anteriormente nestes passos.
      4. Clique em Concluído.
    5. Clique em Guardar.

  5. Estabeleça ligação à VM temporária através de SSH.

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

    lsblk -d -o NAME,SERIAL

    O resultado é semelhante ao seguinte:

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

    Neste exemplo, rescue-vm é o disco de arranque da VM de resgate e my-recovery-disk é o disco de arranque do instantâneo da VM inacessível. Tome nota do NAME da VM inacessível para utilização no passo seguinte.

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

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

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

      Substitua NAME pelo nome do disco de arranque da VM inacessível do passo anterior. Neste exemplo, o nome seria sdb.

      O resultado é semelhante ao 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 indica o sistema de ficheiros de cada partição. Se o tipo de sistema de ficheiros estiver em falta para alguma partição, execute o seguinte comando:

      file -sL /dev/PARTITION_NAME
      

      Substitua NAME pelo nome da partição.

      A saída difere consoante o tipo de sistema de ficheiros:

      • Sem sistema de ficheiros: se o resultado apresentar apenas data, a partição não contém um sistema de ficheiros. Exemplo de saída:

        /dev/sdb1: data
        
      • Sistema de ficheiros EFI: se o resultado descrever um setor de arranque DOS/MBR, a partição tem um sistema de ficheiros 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 ficheiros Linux: se a saída descrever dados do sistema de ficheiros, a partição é um sistema de ficheiros Linux. Exemplo de saída:

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

      Tome nota do nome da partição do sistema de ficheiros Linux.

    2. Crie um ponto de montagem em /rescue:

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

      sudo mount PARTITION_NAME /rescue
      

      Substitua PARTITION_NAME pelo nome do sistema de ficheiros Linux que anotou anteriormente.

    4. Se quiser modificar o diretório raiz do sistema de ficheiros através do comando chroot, também tem de montar o sistema de ficheiros 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 ficheiros do disco de arranque inacessível está agora montado em /rescue. Pode navegar no sistema de ficheiros, alterar ficheiros de configuração, corrigir problemas ou obter os dados.

Reverta as alterações e reinicie a VM inacessível

Depois de corrigir o problema ou recuperar os dados, tem de repor a VM real. Siga estes passos para restaurar a VM original:

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

     cd ~
     sudo umount /rescue

  2. Na Google Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

    1. Selecione a VM temporária que criou.

    2. Clique em Editar.

    3. Em Discos adicionais, clique em para desanexar o disco criado nos passos anteriores da VM temporária.

    4. Clique em Guardar.

  3. Aceda à página Instâncias de VM na Google Cloud consola.

    Aceder às instâncias de VM

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

    2. Clique no nome da MV que acabou de parar e, de seguida, clique em Editar.

    3. Em Disco de arranque, clique em Desanexar disco de arranque para desanexar o disco de arranque existente da VM inacessível.

    4. Em seguida, clique em CONFIGURAR DISCO DE ARRANQUE para anexar o disco que criou e corrigiu anteriormente em Recuperar uma VM nesta página.

      1. Na secção Disco de arranque, clique no separador Discos existentes.
      2. Na lista pendente, selecione o disco que criou na secção anterior, por exemplo, my-recovery-disk.
      3. Clique em Selecionar e, de seguida, clique em Guardar.
    5. Inicie a VM.

  4. Agora, deve conseguir estabelecer ligação à VM através do SSH.