Fehlerbehebung beim VM-Startvorgang

Dieses Dokument enthält Informationen zur Fehlerbehebung, wenn beim VM-Startvorgang Probleme aufgrund von Kontingentfehlern, Bootlaufwerken und Startskripts auftreten.

Kontingentfehler

Wenn beim Versuch, eine Instanz zu starten, ein Kontingentfehler angezeigt wird, müssen Sie ein zusätzliches CPU-Kontingent anfordern. Weitere Informationen finden Sie im Abschnitt VM-Instanzen des Dokuments Ressourcenkontingente.

Bootlaufwerke

Wenn die Instanz nicht gestartet wird und Sie weder eine Verbindung zu ihr herstellen noch sich über die interaktive serielle Konsole anmelden können, müssen Sie ermitteln, warum das Bootlaufwerk nicht gebootet und gestartet wird.

Ermitteln, warum das Bootlaufwerk nicht gebootet wird

  • Prüfen Sie, ob das Bootlaufwerk voll ist.

    Wenn das Bootlaufwerk voll ist und Ihr Betriebssystem die automatische Größenanpassung nicht unterstützt, können Sie keine Verbindung zur Instanz herstellen. Sie müssen eine neue Instanz erstellen und das Bootlaufwerk neu erstellen. Siehe Eine nicht zugängliche Instanz oder ein vollständiges Bootlaufwerk wiederherstellen.

  • Prüfen Sie die Ausgabe des seriellen Ports Ihrer VM-Instanz.

    Die Debug-Meldungen des BIOS, Bootloaders und Kernels einer Instanz werden an den seriellen Port der Instanz ausgegeben und stellen dort wichtige Informationen über etwaige Fehler oder Probleme der Instanz zur Verfügung. Wenn Sie das Logging für die Ausgabe des seriellen Ports in Cloud Logging aktivieren, können Sie auch dann auf diese Informationen zugreifen, wenn die Instanz nicht ausgeführt wird.

  • Aktivieren Sie den interaktiven Zugriff auf die serielle Konsole.

    Sie können den interaktiven Zugriff auf die serielle Konsole einer Instanz aktivieren, um sich anzumelden und Bootprobleme von der Instanz aus zu beheben, ohne dass die Instanz dafür vollständig gebootet sein muss. Weitere Informationen finden Sie unter Mit der seriellen Konsole interagieren.

  • Prüfen Sie, ob das Laufwerk über ein gültiges Dateisystem verfügt.

    Wenn das Dateisystem beschädigt oder ungültig ist, kann die Instanz nicht gestartet werden. Überprüfen Sie das Dateisystem des Laufwerks:

    1. Trennen Sie das betreffende Laufwerk gegebenenfalls von allen Instanzen:

      gcloud compute instances delete old-instance --keep-disks boot

    2. Starten Sie eine neue Instanz mit dem neuesten von Google bereitgestellten Image:

      gcloud compute instances create debug-instance

    3. Hängen Sie das Laufwerk als Nicht-Bootlaufwerk an, stellen Sie es aber nicht bereit. Ersetzen Sie DISK durch den Namen des Laufwerks ohne Bootfunktion. Notieren Sie sich den Gerätenamen, der das Laufwerk auf der Instanz identifiziert:

      gcloud compute instances attach-disk debug-instance 
      --disk DISK
      --device-name debug-disk

    4. Stellen Sie eine Verbindung zur Instanz her:

      gcloud compute ssh debug-instance

    5. Ermitteln Sie die Root-Partition des Laufwerks. Diese erkennen Sie an der part1-Notation. In diesem Fall befindet sich die Root-Partition des Laufwerks unter /dev/sdb1:

      ls -l /dev/disk/by-id
      total 0
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 google-debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 google-debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 google-persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 google-persistent-disk-0-part1 -> ../../sda1
      lrwxrwxrwx 1 root root  9 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk -> ../../sdb
      lrwxrwxrwx 1 root root 10 Jan 22 17:09 scsi-0Google_PersistentDisk_debug-disk-part1 -> ../../sdb1
      lrwxrwxrwx 1 root root  9 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0 -> ../../sda
      lrwxrwxrwx 1 root root 10 Jan 22 17:02 scsi-0Google_PersistentDisk_persistent-disk-0-part1 -> ../../sda1
      
    6. Führen Sie eine Dateisystemprüfung der Root-Partition aus:

      sudo fsck /dev/sdb1
      fsck from util-linux 2.20.1
      e2fsck 1.42.5 (29-Jul-2012)
      /dev/sdb1: clean, 19829/655360 files, 208111/2621184 blocks
      

    7. Stellen Sie das Dateisystem bereit:

       sudo mkdir /mydisk
      
       sudo mount /dev/sdb1 /mydisk
      
    8. Prüfen Sie, ob das Laufwerk über Kernel-Dateien verfügt:

       ls /mydisk/boot/vmlinuz-*
      /mydisk/boot/vmlinuz-3.2.0-4-amd64
      
  • Prüfen Sie, ob das Laufwerk über einen gültigen MBR (Master Boot Record) verfügt.

    Führen Sie den folgenden Befehl für die Debug-Instanz aus, an die das nichtflüchtige Bootlaufwerk angehängt ist, zum Beispiel /dev/sdb:

     sudo parted /dev/sdb print
    

    Wenn der MBR gültig ist, werden Informationen zum Dateisystem aufgeführt:

     Disk /dev/sdb: 10.7GB
     Sector size (logical/physical): 512B/4096B
     Partition Table: msdos
     Disk Flags:
     Number  Start   End     Size    Type     File system  Flags
      1      2097kB  10.7GB  10.7GB  primary  ext4         boot
     

Bootproblem beheben

Nachdem Sie die Ursache für den Fehler beim Booten und Starten ermittelt haben, können Sie das Problem mit einer der folgenden Aktionen beheben:

Eigenständiges Bootlaufwerk erstellen

Stellen Sie das importierte Image auf einem zweiten Laufwerk bereit, das einer temporären VM-Instanz hinzugefügt wurde. Verwenden Sie die Cloud Console oder das gcloud-Tool, um ein eigenständiges Laufwerk aus dem hochgeladenen Image sowie eine temporäre VM zu erstellen, an die das eigenständige Laufwerk angehängt ist. Sie können mit dieser Instanz Dateien auf dem eigenständigen Laufwerk ändern und Probleme beheben, die den Start des Images verhindern.

Console

Erstellen Sie aus dem importierten Bootlaufwerk-Image ein eigenständiges Laufwerk. Alternativ können Sie ein Bootlaufwerk von einer Instanz trennen und die Instanz mit dem frei gewordenen Bootlaufwerk erstellen.

  1. Rufen Sie in der Cloud Console die Seite Laufwerke auf.

    Zur Seite „Laufwerke“

  2. Klicken Sie auf Laufwerk erstellen.
  3. Legen Sie auf der Seite Laufwerk erstellen die folgenden Attribute fest:
    • Zone: Select a zone near you. You must use this same zone when you create your temporary instance.
    • Laufwerkstyptyp: Image
    • Quell-Image: Specify the name of the boot disk image that you imported.
  4. Klicken Sie auf Erstellen, um das Laufwerk anzulegen.

Erstellen Sie eine temporäre Instanz, der Sie das eigenständige Laufwerk hinzufügen können, und konfigurieren Sie den Bootloader so, dass er in der Umgebung der Cloud Console verwendet werden kann.

  1. Öffnen Sie in der Google Cloud Console die Seite VM-Instanzen.

    Zur Seite „VM-Instanzen“

  2. Klicken Sie auf Instanz erstellen.

  3. Geben Sie auf der Seite Neue Instanz erstellen einen Instanznamen und eine Zone an, in der die Instanz gespeichert wird. Die Zone muss mit der Zone identisch sein, in der Sie das eigenständige Laufwerk erstellt haben.

  4. Erweitern Sie den Abschnitt Verwaltung, Sicherheit, Laufwerke, Netzwerke, einzelne Mandanten.

  5. Klicken Sie unter dem Tab Laufwerke im Abschnitt Zusätzliche Laufwerke auf Vorhandenes Laufwerk hinzufügen. Ein neuer Abschnitt wird angezeigt.

  6. Wählen Sie im Bereich Laufwerk das eigenständige Laufwerk aus, das Sie im Drop-down-Menü erstellt haben. Dadurch wird der Instanz das eigenständige Laufwerk hinzugefügt, sodass Sie es bereitstellen und den Inhalt des Laufwerks später ändern können.

  7. Klicken Sie auf Fertig, um das Hinzufügen des Laufwerks abzuschließen.

  8. Klicken Sie auf Erstellen, um die Instanz zu erstellen.

gcloud

Erstellen Sie aus dem importierten Bootlaufwerk-Image ein eigenständiges Laufwerk. Alternativ können Sie ein Bootlaufwerk von einer Instanz trennen und die Instanz mit dem frei gewordenen Bootlaufwerk erstellen.

 gcloud compute disks create DISK_NAME 
--zone ZONE
--image IMAGE_NAME

Dabei gilt:

  • DISK_NAME ist der Name des neuen eigenständigen Laufwerks.
  • ZONE ist eine Zone in Ihrer Nähe. Wenn Sie die temporäre Instanz erstellen, müssen Sie dieselbe Zone verwenden.
  • IMAGE_NAME ist der Name des importierten Bootlaufwerk-Images.

Erstellen Sie eine temporäre Instanz, der Sie das eigenständige Laufwerk hinzufügen können, und konfigurieren Sie den Bootloader so, dass er in der Umgebung der Cloud Console verwendet werden kann.

gcloud compute instances create INSTANCE_NAME --zone ZONE --disk name=DISK_NAME

Dabei gilt:

  • INSTANCE_NAME ist ein eindeutiger Name für Ihre Instanz.
  • ZONE ist die Zone, in der Sie das eigenständige Laufwerk erstellt haben.
  • DISK_NAME ist der Name des eigenständigen Laufwerks, das Sie aus dem importierten Bootlaufwerk-Image erstellt haben.

Nachdem Sie die Instanz mit dem hinzugefügten eigenständigen Laufwerk erstellt haben, ist eine virtuelle Umgebung vorhanden, in der Sie den Bootloader auf dem ursprünglichen Bootlaufwerk-Image ändern können.

Bootlaufwerk konfigurieren

Stellen Sie die Verbindung zur Instanz her, stellen Sie das eigenständige Laufwerk bereit und konfigurieren Sie den Bootloader so, dass er in Compute Engine ordnungsgemäß gebootet wird.

  1. Stellen Sie eine Verbindung zur temporären Instanz her. Verwenden Sie dazu SSH über den Browser oder den Befehl gcloud compute ssh.
  2. Identifizieren das zu ändernde Laufwerk sowie die bereitzustellenden Partitionen über den Befehl blkid. In diesem Beispiel ist /dev/sdb das Laufwerk, das Sie importiert haben.

    lsblk
    
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   10G  0 disk
    └─sda1   8:1    0   10G  0 part /
    sdb      8:16   0  100G  0 disk
    ├─sdb1   8:17   0   96G  0 part
    ├─sdb2   8:18   0    1K  0 part
    └─sdb5   8:21   0    4G  0 part
    
  3. Stellen Sie die Root-Partition über das eigenständige Laufwerk im Verzeichnis /tmp bereit. In diesem Beispiel ist /dev/sdb1 die Root-Partition. Die anderen Partitionen müssen nicht geändert werden. Für Ihr Partitionsschema müssen Sie möglicherweise mehrere Partitionen bereitstellen, bevor Sie auf alle Dateien zugreifen können, die Sie ändern müssen.

    sudo mount /dev/sdb1 /tmp
    
  4. Bearbeiten Sie Dateien, die verhindern können, dass das Laufwerk gestartet wird. Weitere Informationen finden Sie in der Anleitung zur Bootloader-Konfiguration.

  5. Heben Sie die Bereitstellung des Bootlaufwerks über die temporäre Instanz auf.

    sudo umount /tmp
    

Bootlaufwerk verwenden

Wenn Sie mit der Konfiguration dieses Laufwerks fertig sind, trennen Sie es und verwenden Sie es als Bootlaufwerk für die neue Instanz.

Console

Heben Sie die Bereitstellung des eigenständigen Laufwerks über die temporäre Instanz auf.

  1. Öffnen Sie in der Google Cloud Console die Seite VM-Instanzen.

    Zur Seite „VM-Instanzen“

  2. Klicken Sie in der Liste der Instanzen auf den Namen der temporären Instanz, in der Sie das eigenständige Bootlaufwerk geändert haben. Die Seite mit den Instanzdetails wird geöffnet.

  3. Klicken Sie oben auf der Seite mit den Instanzdetails auf Bearbeiten.

  4. Klicken Sie unter Zusätzliche Laufwerke neben dem eigenständigen Laufwerk auf das X, um anzugeben, dass Sie es von der temporären Instanz trennen möchten.

  5. Klicken Sie auf Speichern, um die Änderungen zu speichern.

Verwenden Sie das getrennte eigenständige Laufwerk, um eine Instanz zu erstellen.

  1. Öffnen Sie in der Google Cloud Console die Seite VM-Instanzen.

    Zur Seite „VM-Instanzen“

  2. Klicken Sie auf Instanz erstellen.

  3. Geben Sie auf der Seite Neue Instanz erstellen einen Instanznamen und eine Zone an, in der die Instanz gespeichert wird. Die Zone muss mit der Zone identisch sein, in der Sie das eigenständige Laufwerk erstellt haben.

  4. Klicken Sie unter Bootlaufwerk auf Ändern, um mit der Konfiguration Ihres Bootlaufwerks zu beginnen.

  5. Wählen Sie auf dem Tab Vorhandene Laufwerke das eigenständige Bootlaufwerk aus, um es als Bootlaufwerk für diese neue Instanz zu verwenden.

  6. Klicken Sie auf Erstellen, um die Instanz zu erstellen.

gcloud

Heben Sie die Bereitstellung des eigenständigen Laufwerks über die temporäre Instanz auf.

gcloud compute instances detach-disk INSTANCE_NAME --disk DISK_NAME

Dabei gilt:

  • INSTANCE_NAME ist ein eindeutiger Name für Ihre Instanz.
  • DISK_NAME ist der Name des neuen eigenständigen Laufwerks.

Verwenden Sie das getrennte eigenständige Laufwerk, um eine Instanz zu erstellen.

gcloud compute instances create INSTANCE_NAME --zone ZONE --disk name=DISK_NAME,boot=yes

Dabei gilt:

  • INSTANCE_NAME ist ein eindeutiger Name für Ihre Instanz.
  • ZONE ist die Zone, in der sich das eigenständige Laufwerk befindet.
  • DISK_NAME ist der Name des eigenständigen Laufwerks, das Sie aus dem importierten Bootlaufwerk-Image erstellt haben.

Testen Sie die erstellte Instanz mit dem geänderten Bootlaufwerk. Wenn Sie immer noch keine Verbindung zur Instanz herstellen können, prüfen Sie in der Ausgabe der seriellen Konsole, wo der Bootvorgang fehlschlägt. Wiederholen Sie die Fehlerbehebung, bis die Probleme mit dem Bootlaufwerk-Image behoben sind.

Startskripts

Probleme mit Startskripts können mit der Netzwerkverbindung zum Metadatenserver zusammenhängen:

  • Insbesondere bei Linux-VMs wartet Compute Engine auf eine Verbindung zum Metadatenserver, bevor versucht wird, Informationen wie ein benutzerdefiniertes Start- oder Shutdown-Skript vom Metadatenserver abzurufen. Wenn der Metadatenserver nicht antwortet oder das Netzwerk noch nicht konfiguriert ist, wird der Startvorgang der VM nicht abgeschlossen.

  • Insbesondere bei Linux-VMs mit Images vor Version 20160606 zeigt die Ausgabe des seriellen Ports "Waiting for metadata server, attempt N", wobei N die Anzahl der erfolgten Versuche ist.

    Dieses Problem kann bis zu sieben Minuten andauern, da ein vorübergehendes Netzwerkproblem von selbst behoben wird. Wenn das Problem nach sieben Minuten nicht behoben wird, erstellen Sie die VM-Instanz neu.