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:
- Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1) -
VMs, die ein Dienstkonto verwenden: Kontonutzer (
roles/iam.serviceAccountUser)
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.createfür das Projektcompute.disks.createfür das Projektcompute.instances.getfür das Projektcompute.disks.createSnapshotfür Laufwerkecompute.instances.attachDiskauf der neuen VMcompute.disks.useauf dem Laufwerkcompute.instances.startauf der neuen und nicht zugänglichen VMcompute.instances.stopauf 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.
- (Optional) Beenden Sie die nicht zugängliche VM.
- 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.
- 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.
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:
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf:
Klicken Sie auf den Namen der temporären VM, die Sie erstellt haben.
Klicken Sie auf Bearbeiten.
Klicken Sie unter Zusätzliche Laufwerke auf Neues Laufwerk hinzufügen und gehen Sie dann so vor:
- Fügen Sie den Namen des Laufwerks hinzu, z. B. my-recovery-disk.
- Wählen Sie als Quelltyp den Tab Snapshot aus.
- Wählen Sie im Drop-down-Menü Quell-Snapshot den Snapshot der Quell-VM aus, die Sie zuvor erstellt haben.
- Klicken Sie auf Fertig.
Klicken Sie auf Speichern.
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-vmdas Bootlaufwerk der Rettungs-VM undmy-recovery-diskdas Bootlaufwerk aus dem Snapshot der nicht zugänglichen VM. Notieren Sie sich denNAMEder nicht zugänglichen VM, um ihn im nächsten Schritt zu verwenden.Führen Sie für jedes der Laufwerke, die Sie zuvor an die VM angehängt haben, die folgenden Schritte aus:
Führen Sie den folgenden Befehl aus, um das Dateisystem jeder Partition zu ermitteln:
fdisk -l /dev/NAME -o Device,Size,Type
Ersetzen Sie
NAMEdurch den Namen des Bootlaufwerks der nicht zugänglichen VM aus dem vorherigen Schritt. In diesem Beispiel wäre der Namesdb.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
Typewird 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
NAMEdurch den Namen der Partition.Die Ausgabe unterscheidet sich je nach Dateisystemtyp:
Kein Dateisystem: Wenn in der Ausgabe nur
dataangezeigt 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.
Erstellen Sie einen Bereitstellungspunkt unter
/rescue:sudo mkdir /rescue
Stellen Sie die Linux-Dateisystempartition unter
/rescuebereit: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/sdb2in der vorherigen Ausgabe), stellen Sie diese bereit, bevor Sie diechroot-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).
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
Ändern Sie das Stammverzeichnis in das bereitgestellte Dateisystem:
sudo chroot /rescue
Das Dateisystem des nicht zugänglichen Bootlaufwerks wird jetzt unter
/rescuebereitgestellt und Ihre Shell wird in einerchroot-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 derchroot-Umgebung. Die Schritte hängen vom Firmwaretyp Ihrer VM ab:Legacy-BIOS-VMs (
i386-pc) (z. B. wenn die serielle Konsolefile '/grub2/i386-pc/increment.mod' not foundanzeigt):- 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
NAMEdurch den Gerätenamen des zuvor angehängten Wiederherstellungslaufwerks (z. B.sdb, nicht durch eine Partitionsnummer wiesdb1).UEFI- und Shielded VM-VMs (achten Sie darauf, dass
/rescue/boot/efizuerst bereitgestellt wird; führen Siegrub2-installnicht 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
yumanstelle vondnfunter 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
- RHEL, CentOS und Rocky Linux (verwenden Sie
Ä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:
Beenden Sie nach der Fehlerbehebung die
chroot-Umgebung:exit
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/efiund dann von/rescue/bootauf, 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
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf:
Wählen Sie die temporäre VM aus, die Sie erstellt haben.
Klicken Sie auf Bearbeiten.
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.
Klicken Sie auf Speichern.
Rufen Sie in der Google Cloud -Console die Seite VM-Instanzen auf.
Wenn die nicht zugängliche VM noch ausgeführt wird, beenden Sie die VM.
Klicken Sie auf den Namen der VM, die Sie gerade beendet haben, und dann auf Bearbeiten.
Klicken Sie unter Bootlaufwerk auf Bootlaufwerk trennen, um das vorhandene Bootlaufwerk von der nicht zugänglichen VM zu trennen.
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.
- Klicken Sie im Abschnitt Bootlaufwerk auf den Tab Vorhandene Laufwerke.
- Wählen Sie in der Drop-down-Liste das Laufwerk aus, das Sie im vorherigen Abschnitt erstellt haben, z. B.
my-recovery-disk. - Klicken Sie auf Auswählen und anschließend auf Speichern.
Nun sollten Sie eine Verbindung zur VM über SSH herstellen können.