Nicht zugängliche VM wiederherstellen

Wenn Ihre Linux-VM aus irgendeinem Grund nicht zugänglich ist, können Sie sie möglicherweise mit den folgenden Schritten wiederherstellen.

Informationen dazu, warum eine Compute-Instanz nicht gestartet werden kann, bevor Sie sie retten, finden Sie unter Fehlerbehebung bei Startproblemen von Linux-Compute Engine-Instanzen.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die benötigten Berechtigungen zum Wiederherstellen einer VM zu erhalten:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Wiederherstellen einer VM erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind für das Wiederherstellen einer VM erforderlich:

  • compute.instances.create für das Projekt
  • compute.disks.create für das Projekt
  • compute.instances.get für das Projekt
  • compute.disks.createSnapshot für Laufwerke
  • compute.instances.attachDisk auf der neuen VM
  • compute.disks.use auf dem Laufwerk
  • compute.instances.start auf der neuen und nicht zugänglichen VM
  • compute.instances.stop auf der neuen und nicht zugänglichen VM

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

VM wiederherstellen

Wenn Sie keine Verbindung zu Ihrer VM herstellen können oder Ihr Bootlaufwerk voll ist, müssen Sie eine temporäre VM erstellen, um die nicht zugängliche VM wiederherzustellen.

  1. (Optional) Beenden Sie die nicht zugängliche VM.
  2. Erstellen Sie einen Snapshot vom Bootlaufwerk der nicht zugänglichen VM. Wenn das Stammdateisystem auf mehrere Laufwerke aufgeteilt ist, müssen Sie für jedes Laufwerk einen Snapshot erstellen.
  3. Erstellen Sie eine temporäre VM mit einem öffentlichen Image, das dem Betriebssystem der nicht zugänglichen VM am ähnlichsten ist. In einigen Fällen kann eine Trusted Image-Richtlinie verhindern, dass Sie Bootlaufwerke aus öffentlichen Images erstellen. In solchen Fällen müssen Sie einen Administrator bitten, diese Einschränkung vorübergehend aufzuheben, bevor Sie eine Rettungs-VM erstellen können. Weitere Informationen finden Sie unter Einschränkungen für den Image-Zugriff festlegen.
  4. Erstellen Sie für jeden der zuvor erstellten Snapshots der Bootlaufwerke der nicht zugänglichen VM ein neues Laufwerk aus dem Snapshot und hängen Sie es an die Rettungs-VM an. Gehen Sie dazu so vor:

    1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf:

      Zur Seite „VM-Instanzen“

    2. Klicken Sie auf den Namen der temporären VM, die Sie erstellt haben.

    3. Klicken Sie auf  Bearbeiten.

    4. Klicken Sie unter Zusätzliche Laufwerke auf  Neues Laufwerk hinzufügen und gehen Sie dann so vor:

      1. Fügen Sie den Namen des Laufwerks hinzu, z. B. my-recovery-disk.
      2. Wählen Sie als Quelltyp den Tab Snapshot aus.
      3. Wählen Sie im Drop-down-Menü Quell-Snapshot den Snapshot der Quell-VM aus, die Sie zuvor erstellt haben.
      4. Klicken Sie auf Fertig.
    5. Klicken Sie auf Speichern.

  5. Stellen Sie eine SSH-Verbindung zur temporären VM her.

  6. Ermitteln Sie den Namen jedes Laufwerks, das Sie zuvor an die VM angehängt haben. Führen Sie dazu den folgenden Befehl aus:

    lsblk -d -o NAME,SERIAL

    Die Ausgabe sieht etwa so aus:

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

    In diesem Beispiel ist rescue-vm das Bootlaufwerk der Rettungs-VM und my-recovery-disk das Bootlaufwerk aus dem Snapshot der nicht zugänglichen VM. Notieren Sie sich den NAME der nicht zugänglichen VM, um ihn im nächsten Schritt zu verwenden.

  7. Führen Sie für jedes der Laufwerke, die Sie zuvor an die VM angehängt haben, die folgenden Schritte aus:

    1. Führen Sie den folgenden Befehl aus, um das Dateisystem jeder Partition zu ermitteln:

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

      Ersetzen Sie NAME durch den Namen des Bootlaufwerks der nicht zugänglichen VM aus dem vorherigen Schritt. In diesem Beispiel wäre der Name sdb.

      Die Ausgabe sieht etwa so aus:

      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
      

      In der Spalte Type wird das Dateisystem der einzelnen Partitionen aufgeführt. Wenn der Dateisystemtyp für eine Partition fehlt, führen Sie den folgenden Befehl aus:

      file -sL /dev/PARTITION_NAME
      

      Ersetzen Sie NAME durch den Namen der Partition.

      Die Ausgabe unterscheidet sich je nach Dateisystemtyp:

      • Kein Dateisystem: Wenn in der Ausgabe nur data angezeigt wird, enthält die Partition kein Dateisystem. Beispielausgabe:

        /dev/sdb1: data
        
      • EFI-Dateisystem: Wenn die Ausgabe einen DOS/MBR-Bootsektor beschreibt, hat die Partition ein EFI-Dateisystem. Beispielausgabe:

        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)
        
      • Linux-Dateisystem: Wenn die Ausgabe Dateisystemdaten beschreibt, ist die Partition ein Linux-Dateisystem. Beispielausgabe:

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

      Notieren Sie sich den Partitionsnamen des Linux-Dateisystems.

    2. Erstellen Sie einen Bereitstellungspunkt unter /rescue:

      sudo mkdir /rescue
    3. Stellen Sie die Linux-Dateisystempartition unter /rescue bereit:

      sudo mount PARTITION_NAME /rescue
      

      Ersetzen Sie PARTITION_NAME durch den Namen des Linux-Dateisystems, den Sie sich zuvor notiert haben.

      Wenn Ihr Laufwerk eine separate /boot-Partition oder eine EFI-Systempartition hat (z. B. /dev/sdb2 in der vorherigen Ausgabe), stellen Sie diese bereit, bevor Sie die chroot-Umgebung aufrufen. Dadurch werden die Bootloader- und Kernel-Dateien zugänglich:

      # Run only if your disk has a separate /boot partition:
      sudo mount /dev/BOOT_PARTITION_NAME /rescue/boot
      
      # Run only if your disk has an EFI System Partition (UEFI VMs):
      sudo mount /dev/EFI_PARTITION_NAME /rescue/boot/efi
      

      Ersetzen Sie Folgendes:

      • BOOT_PARTITION_NAME: der Partitionsname der separaten /boot-Partition, falls vorhanden (z. B. sdb1).
      • EFI_PARTITION_NAME: der Partitionsname der EFI-Systempartition auf UEFI-VMs (z. B. sdb2).
    4. Stellen Sie die virtuellen Dateisysteme und Geräte bereit, damit Sie das Stammverzeichnis des Dateisystems mit dem Befehl chroot ändern können:

      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
      
    5. Ändern Sie das Stammverzeichnis in das bereitgestellte Dateisystem:

      sudo chroot /rescue
      

    Das Dateisystem des nicht zugänglichen Bootlaufwerks wird jetzt unter /rescue bereitgestellt und Ihre Shell wird in einer chroot-Umgebung in diesem Dateisystem ausgeführt. Sie können durch das Dateisystem navigieren, Konfigurationsdateien ändern, Probleme beheben oder Daten abrufen.

    Wenn Ihre VM mit einem GRUB-module not found-Fehler nicht gestartet werden kann, reparieren Sie den GRUB-Bootloader in der chroot-Umgebung. Die Schritte hängen vom Firmwaretyp Ihrer VM ab:

    • Legacy-BIOS-VMs (i386-pc) (z. B. wenn die serielle Konsole file '/grub2/i386-pc/increment.mod' not found anzeigt):

      • RHEL, CentOS, Rocky Linux und SUSE:
      grub2-install --target=i386-pc /dev/NAME
      grub2-mkconfig -o /boot/grub2/grub.cfg
      
      • Debian und Ubuntu:
      grub-install --target=i386-pc /dev/NAME
      update-grub
      

      Ersetzen Sie NAME durch den Gerätenamen des zuvor angehängten Wiederherstellungslaufwerks (z. B. sdb, nicht durch eine Partitionsnummer wie sdb1).

    • UEFI- und Shielded VM-VMs (achten Sie darauf, dass /rescue/boot/efi zuerst bereitgestellt wird; führen Sie grub2-install nicht auf UEFI-RHEL-, CentOS- oder Rocky Linux-VMs aus, da dadurch der signierte Secure Boot-Shim überschrieben wird):

      • RHEL, CentOS und Rocky Linux (verwenden Sie yum anstelle von dnf unter CentOS 7 und RHEL 7):
      dnf reinstall -y shim-* grub2-efi-* grub2-common
      grub2-mkconfig -o /boot/grub2/grub.cfg
      
      • SUSE:
      shim-install --config-file=/boot/grub2/grub.cfg
      grub2-mkconfig -o /boot/grub2/grub.cfg
      
      • Debian und Ubuntu:
      grub-install --efi-directory=/boot/efi --no-nvram
      update-grub
      

Änderungen rückgängig machen und die nicht zugängliche VM neu starten

Nachdem Sie das Problem behoben oder Ihre Daten abgerufen haben, führen Sie die folgenden Schritte aus, um die ursprüngliche VM wiederherzustellen:

  1. Beenden Sie nach der Fehlerbehebung die chroot-Umgebung:

     exit
     

  2. Heben Sie die Bereitstellung der virtuellen Dateisysteme, Geräte und des Dateisystems der nicht zugänglichen VM von der temporären VM auf:

    Wenn Sie eine EFI- oder eine separate /boot-Partition bereitgestellt haben, heben Sie die Bereitstellung von /rescue/boot/efi und dann von /rescue/boot auf, bevor Sie die Bereitstellung des Root-Dateisystems (sudo umount /rescue) aufheben.

     cd /
     sudo umount /rescue/run
     sudo umount /rescue/dev/pts
     sudo umount /rescue/dev
     sudo umount /rescue/sys
     sudo umount /rescue/proc
     sudo umount /rescue
     

  3. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf:

    Zur Seite „VM-Instanzen“

    1. Wählen Sie die temporäre VM aus, die Sie erstellt haben.

    2. Klicken Sie auf Bearbeiten.

    3. Klicken Sie unter Zusätzliche Laufwerke für das in den vorherigen Schritten erstellte Laufwerk auf , um das zusätzliche Laufwerk von der temporären VM zu trennen.

    4. Klicken Sie auf Speichern.

  4. Rufen Sie in der Google Cloud -Console die Seite VM-Instanzen auf.

    Zur Seite „VM-Instanzen“

    1. Wenn die nicht zugängliche VM noch ausgeführt wird, beenden Sie die VM.

    2. Klicken Sie auf den Namen der VM, die Sie gerade beendet haben, und dann auf  Bearbeiten.

    3. Klicken Sie unter Bootlaufwerk auf Bootlaufwerk trennen, um das vorhandene Bootlaufwerk von der nicht zugänglichen VM zu trennen.

    4. Klicken Sie als Nächstes auf BOOTLAUFWERK KONFIGURIEREN, um das Laufwerk anzuhängen, das Sie zuvor auf dieser Seite unter VM wiederherstellen erstellt und repariert haben.

      1. Klicken Sie im Abschnitt Bootlaufwerk auf den Tab Vorhandene Laufwerke.
      2. Wählen Sie in der Drop-down-Liste das Laufwerk aus, das Sie im vorherigen Abschnitt erstellt haben, z. B. my-recovery-disk.
      3. Klicken Sie auf Auswählen und anschließend auf Speichern.
    5. Starten Sie die VM.

  5. Nun sollten Sie eine Verbindung zur VM über SSH herstellen können.