Rescatar una VM inaccesible


Si no se puede acceder a su máquina virtual Linux por algún motivo, puede intentar rescatarla siguiendo los siguientes pasos.

Roles requeridos

Para obtener los permisos que necesita para rescatar una VM, solicite a su administrador que le otorgue los siguientes roles de IAM en el proyecto:

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

Estos roles predefinidos contienen los permisos necesarios para rescatar una VM. Para ver los permisos exactos que se requieren, expanda la sección Permisos requeridos :

Permisos requeridos

Se requieren los siguientes permisos para rescatar 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 nueva máquina virtual
  • compute.disks.use en el disco
  • compute.instances.start en VM nueva e inaccesible
  • compute.instances.stop en VM nueva e inaccesible

Es posible que también pueda obtener estos permisos con roles personalizados u otros roles predefinidos .

Rescatar una máquina virtual

Si no puede conectarse a su VM o su disco de arranque está lleno, debe crear una VM temporal para rescatar la VM inaccesible.

  1. (Opcional) Detenga la máquina virtual inaccesible.
  2. Cree una instantánea desde el disco de arranque de la VM inaccesible. Si el sistema de archivos raíz está dividido en varios discos, debe tomar una instantánea de cada disco.
  3. Cree una máquina virtual temporal utilizando una imagen pública más cercana al sistema operativo de la máquina virtual inaccesible . En algunos casos, una política de imágenes confiables puede impedirle crear discos de arranque a partir de imágenes públicas. En tales casos, debe pedirle a un administrador que elimine temporalmente esta restricción antes de poder crear una máquina virtual de rescate. Consulte Establecer 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 creó anteriormente, cree un nuevo disco a partir de la instantánea y conéctelo a la VM de rescate haciendo lo siguiente:

    1. En la consola de Google Cloud, vaya a la página de instancias de VM .

      Ir a instancias de VM

    2. Haga clic en el nombre de la VM temporal que creó.

    3. Haga clic en Editar .

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

      1. Agregue el nombre del disco, como my-recovery-disk
      2. Para Tipo de fuente , seleccione la pestaña Instantánea .
      3. En el menú desplegable Instantánea de origen , seleccione la instantánea de la máquina virtual de origen que creó anteriormente en estos pasos.
      4. Haga clic en Listo .
    5. Haga clic en Guardar .

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

  6. Identifique el nombre de cada uno de los discos que conectó previamente a la VM ejecutando el siguiente comando:

    lsblk -d -o NAME,SERIAL

    El resultado es similar al siguiente:

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

    En este ejemplo, rescue-vm es el disco de inicio de la VM de rescate y my-recovery-disk es el disco de inicio de la instantánea de la VM inaccesible. Anote el NAME de la VM inaccesible para usarla en el siguiente paso.

  7. Para cada uno de los discos que conectó previamente a la VM, haga lo siguiente:

    1. Identifique el sistema de archivos de cada partición ejecutando el siguiente comando:

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

      Reemplace NAME con el nombre del disco de arranque de la VM inaccesible del paso anterior. En este ejemplo, el nombre sería sdb .

      El resultado es similar al siguiente:

      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
      

      La columna Type enumera el sistema de archivos de cada partición. Si falta el tipo de sistema de archivos para alguna partición, ejecute el siguiente comando:

      file -sL /dev/PARTITION_NAME
      

      Reemplace NAME con el nombre de la partición.

      La salida difiere según el tipo de sistema de archivos:

      • Sin sistema de archivos : si la salida 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 Linux : si la salida describe datos del sistema de archivos, la partición es un sistema de archivos Linux. Salida de ejemplo:

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

      Tenga en cuenta el nombre de la partición del sistema de archivos de Linux.

    2. Crea un punto de montaje en /rescue :

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

      sudo mount PARTITION_NAME /rescue
      

      Reemplace PARTITION_NAME con el nombre del sistema de archivos de Linux que anotó anteriormente.

    4. Si desea modificar el directorio raíz del sistema de archivos usando el comando chroot , además debe montar el sistema de archivos virtual y los dispositivos ejecutando 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 arranque inaccesible ahora está montado en /rescue . Puede navegar por el sistema de archivos, cambiar archivos de configuración, solucionar problemas o recuperar los datos.

Revierta los cambios y reinicie la VM inaccesible

Una vez que se solucione el problema o se recuperen los datos, deberá recuperar la máquina virtual real. Utilice los siguientes pasos para restaurar la VM original:

  1. Desmonte el disco adicional que está montado en /rescue en la VM temporal:

     cd ~
     sudo umount /rescue

  2. En la consola de Google Cloud, vaya a la página de instancias de VM .

    Ir a instancias de VM

    1. Seleccione la VM temporal que creó.

    2. Haga clic en Editar .

    3. En Discos adicionales , haga clic para el disco creado en pasos anteriores para desconectar el disco adicional de la máquina virtual temporal.

    4. Haga clic en Guardar .

  3. Vaya a la página de instancias de VM en la consola de Google Cloud.

    Ir a instancias de VM

    1. Si la VM inaccesible todavía se está ejecutando, deténgala .

    2. Haga clic en el nombre de la máquina virtual que acaba de detener y luego haga clic en Editar .

    3. En Disco de arranque , haga clic Separar disco del libro para desconectar el disco de arranque saliente de la máquina virtual inaccesible.

    4. A continuación, haga clic en CONFIGURAR DISCO DE ARRANQUE para adjuntar el disco que creó y arregló anteriormente en Rescatar una máquina virtual en esta página.

      1. En la sección Disco de arranque , haga clic en la pestaña Discos existentes .
      2. En la lista desplegable, seleccione el disco que creó en la sección anterior, por ejemplo my-recovery-disk .
      3. Haga clic en Seleccionar y luego haga clic en Guardar .
    5. Inicie la máquina virtual .

  4. Ahora debería poder conectarse a la máquina virtual mediante SSH.