Recupera una VM inaccesible


Si, por algún motivo, no se puede acceder a la VM de Linux, puedes intentar recuperarla mediante los siguientes pasos.

Roles obligatorios

Para obtener los permisos que necesitas a fin de recuperar una VM, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para recuperar una VM. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para recuperar una VM:

  • compute.instances.create en el proyecto
  • compute.disks.create en el proyecto
  • compute.instances.get en el proyecto
  • compute.disks.createSnapshot en discos
  • compute.instances.attachDisk en una VM nueva
  • compute.disks.use en el disco
  • compute.instances.start en una VM nueva e inaccesible
  • compute.instances.stop en una VM nueva e inaccesible

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Recupera una VM

Si no puedes conectarte a la VM o el disco de arranque está lleno, debes crear una VM temporal para recuperar la VM inaccesible.

  1. Detén la VM inaccesible (opcional).
  2. Crea una instantánea desde el disco de arranque de la VM inaccesible. Si el sistema de archivos raíz se divide en varios discos, debes crear una instantánea de cada uno.
  3. Crea una VM temporal con una imagen pública más cercana al SO de la VM inaccesible. En algunos casos, una política de imágenes confiables puede restringir la creación de discos de arranque a partir de imágenes públicas. En esos casos, debes pedirle a un administrador que quite temporalmente esta restricción para que puedas crear una VM de recuperación. Consulta Configura restricciones de acceso a imágenes para obtener más información.
  4. Para cada una de las instantáneas de los discos de arranque de la VM inaccesible que creaste anteriormente, crea un disco nuevo a partir de la instantánea y conéctalo a la VM de recuperación. Para ello, haz lo siguiente:

    1. En la consola de Google Cloud, ve a la página Instancias de VM.

      Ir a Instancias de VM

    2. Haz clic en el nombre de la VM temporal que creaste.

    3. Haz clic en  Editar.

    4. En Discos adicionales, haz clic en Agregar disco nuevo y, luego, haz lo siguiente:

      1. Agrega el nombre del disco, como my-recovery-disk
      2. En Tipo de fuente, selecciona la pestaña Instantánea.
      3. En el menú desplegable Instantánea de origen, selecciona la instantánea de la VM de origen que creaste antes en estos pasos.
      4. Haz clic en Listo.
    5. Haz clic en Guardar.

  5. Conéctate a la VM temporal mediante SSH.

  6. Ejecuta el siguiente comando para identificar el nombre de cada uno de los discos que conectaste anteriormente a la VM:

    lsblk -d -o NAME,SERIAL

    El resultado es similar a este:

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

    En este ejemplo, rescue-vm es el disco de arranque de la VM de recuperación y my-recovery-disk es el disco de arranque de la instantánea de la VM inaccesible. Anota el NAME de la VM inaccesible para usarlo en el siguiente paso.

  7. Para cada uno de los discos que conectaste anteriormente a la VM, haz lo siguiente:

    1. Ejecuta el siguiente comando para identificar el sistema de archivos de cada partición:

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

      Reemplaza NAME por el nombre del disco de inicio de la VM inaccesible del paso anterior. En este ejemplo, el nombre sería sdb.

      El resultado es similar a este:

      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
      

      En la columna Type, se muestra el sistema de archivos de cada partición. Si falta el tipo de sistema de archivos de alguna partición, ejecuta el siguiente comando:

      file -sL /dev/PARTITION_NAME
      

      Reemplaza NAME por el nombre de la partición.

      El resultado difiere según el tipo de sistema de archivos:

      • Sin sistema de archivos: Si el resultado solo muestra data, la partición no contiene un sistema de archivos. Salida de ejemplo:

        /dev/sdb1: data
        
      • Sistema de archivos EFI: Si el resultado describe un sector de arranque DOS/MBR, la partición tiene un sistema de archivos EFI. Salida de ejemplo:

        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 archivos de Linux: Si el resultado describe datos del sistema de archivos, la partición es un sistema de archivos de Linux. Salida de ejemplo:

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

      Anota el nombre de la partición del sistema de archivos de Linux.

    2. Crea un punto de activación en /rescue:

      sudo mkdir /rescue
    3. Activa la partición del sistema de archivos de Linux en /rescue:

      sudo mount PARTITION_NAME /rescue
      

      Reemplaza PARTITION_NAME por el nombre del sistema de archivos de Linux que anotaste antes.

    4. Si deseas modificar el directorio raíz del sistema de archivos con el comando chroot, además, debes activar el sistema de archivos y los dispositivos virtuales. Para ello, ejecuta los siguientes 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
      

    El sistema de archivos del disco de inicio inaccesible ahora está activado en /rescue. Puedes navegar por el sistema de archivos, cambiar los archivos de configuración, solucionar problemas o recuperar datos.

Revierte los cambios y, luego, inicia la VM inaccesible

Una vez que se soluciona el problema o se recuperan los datos, debes recuperar la VM real. Sigue estos pasos para restablecer la VM original:

  1. Desactiva el disco adicional que está activado en /rescue en la VM temporal:

     cd ~
     sudo umount /rescue

  2. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

    1. Selecciona la VM temporal que creaste.

    2. Haz clic en Editar.

    3. En Discos adicionales, haz clic en en el disco que creaste en pasos anteriores para desconectar el disco adicional de la VM temporal.

    4. Haz clic en Guardar.

  3. Ve a la página Instancias de VM en la consola de Google Cloud.

    Ir a Instancias de VM

    1. Si la VM inaccesible aún se está ejecutando, detenla.

    2. Haz clic en el nombre de la VM que acabas de detener y, luego, en Editar.

    3. En Disco de arranque, haz clic en Desconectar disco de libro para desconectar el disco de arranque saliente de la VM inaccesible.

    4. A continuación, haz clic en CONFIGURAR DISK BOOT para conectar el disco que creaste y corregiste antes en Recupera una VM en esta página.

      1. En la sección Disco de arranque, haz clic en la pestaña Discos existentes.
      2. En la lista desplegable, selecciona el disco que creaste en la sección anterior, por ejemplo, my-recovery-disk.
      3. Haz clic en Seleccionar y, luego, en Guardar.
    5. Inicia la VM.

  4. Ahora deberías poder conectarte a la VM con SSH.