Gastumgebung installieren


Auf dieser Seite wird gezeigt, wie Sie manuell die Gastumgebung für VM-Instanzen installieren, die benutzerdefinierte Images in Compute Engine ausführen.

Wenn Sie VMs verwenden, die mit von Google bereitgestellten öffentlichen Images erstellt wurden, müssen Sie in den meisten Fällen keine Gastumgebung installieren. Informationen zur Verwendung der Gastumgebung finden Sie unter Zeitpunkt zur manuellen Installation oder Aktualisierung der Gastumgebung.

Prüfen Sie vor der manuellen Installation der Gastumgebung mithilfe des Verfahrens Gastumgebung validieren, ob die Gastumgebung auf der VM ausgeführt wird. Wenn die Gastumgebung auf der VM verfügbar, aber veraltet ist, aktualisieren Sie die Gastumgebung.

Hinweis

Installationsmethoden

Es gibt verschiedene Möglichkeiten zum Installieren der Gastumgebung. Wählen Sie eine der folgenden Optionen aus:

  • Importtool. Dies ist die empfohlene Option. Beachten Sie jedoch, dass das Importtool nicht nur die Gastumgebung, sondern auch andere Konfigurationsaktualisierungen auf dem Image installiert: Konfigurieren von Netzwerken, Konfigurieren des Bootloaders, Installieren des Google Cloud CLI usw. Eine Anleitung für das Importtool finden Sie unter Bootfähiges Image erstellen.

    Das Importtool unterstützt eine Vielzahl von Betriebssystemen und Versionen. Weitere Informationen finden Sie unter Details zu Betriebssystemen.

  • Manuelle Installation. Wählen Sie eine der folgenden Optionen aus:

    Die manuelle Installation der Gastumgebung ist für folgende Betriebssysteme verfügbar:

    • Ubuntu 16.04 oder höher
    • CentOS 7 oder höher
    • SUSE Linux Enterprise Server (SLES) 12 SP4 oder höher und 15 SP1 oder höher
    • Red Hat Enterprise Linux (RHEL) 7 oder höher
    • Debian 9 oder höher
    • Windows Server 2019
    • Windows Server 2016
    • Windows Server 2012 R2
    • SAC-Releases (Semi Annual Channel) für Windows Server
    • SQL Server auf Windows Server
    • Windows – Eigene Lizenz verwenden (Bring your own License, BYOL):
      • Windows 8
      • Windows 10

Beschränkungen

Sie können das Importtool nicht manuell installieren oder verwenden, um Gastumgebungen für Fedora CoreOS und containeroptimierte Betriebssysteme zu installieren. Wenn Sie eines dieser Betriebssysteme benötigen, empfehlen wir die Verwendung öffentlicher Images, da eine Gastumgebung Kernbestandteil aller öffentlichen Images ist.

Gastumgebung installieren

Gastumgebung installieren

Mit dieser Methode können Sie die Gastumgebung installieren, wenn sich mithilfe von SSH eine Verbindung zur Zielinstanz herstellen lässt. Wenn Sie keine Verbindung zur Instanz herstellen können, installieren Sie die Gastumgebung durch Klonen des Bootlaufwerks und mithilfe eines Startskripts.

Diese Vorgehensweise ist für importierte Images nützlich, wenn Sie mit der passwortbasierten SSH-Authentifizierung eine Verbindung herstellen können. Damit kann auch die Gastumgebung neu installiert werden. Voraussetzung ist mindestens ein Nutzerkonto mit funktionierender schlüsselbasierter SSH-Authentifizierung.

CentOS/RHEL

  1. Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
  2. Bestimmen Sie die Version von CentOS/RHEL und erstellen Sie die Quell-Repository-Datei /etc/yum.repos.d/google-cloud.repo:

    eval $(grep VERSION_ID /etc/os-release)
    sudo tee /etc/yum.repos.d/google-cloud.repo << EOM
    [google-compute-engine]
    name=Google Compute Engine
    baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${VERSION_ID/.*}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
          https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  3. Aktualisieren Sie die Paketlisten:

    sudo yum makecache
    sudo yum updateinfo
    
  4. Installieren Sie die Gastumgebungspakete:

    sudo yum install -y google-compute-engine google-osconfig-agent
    
  5. Starten Sie die Instanz neu und prüfen Sie das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.

  6. Überprüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.

Debian

  1. Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
  2. Installieren Sie den öffentlichen Repo-GPG-Schlüssel:

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. Bestimmen Sie den Namen der Debian-Distribution und erstellen Sie die Quelllistendatei /etc/apt/sources.list.d/google-cloud.list:

    eval $(grep VERSION_CODENAME /etc/os-release)
    sudo tee /etc/apt/sources.list.d/google-cloud.list << EOM
    deb http://packages.cloud.google.com/apt google-compute-engine-${VERSION_CODENAME}-stable main
    deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${VERSION_CODENAME} main
    EOM
    
  4. Aktualisieren Sie die Paketlisten:

    sudo apt update
  5. Installieren Sie die Gastumgebungspakete:

    sudo apt install -y google-cloud-packages-archive-keyring
    sudo apt install -y google-compute-engine google-osconfig-agent
    
  6. Starten Sie die Instanz neu und prüfen Sie das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.

  7. Überprüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.

Ubuntu

  1. Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.

  2. Aktivieren Sie zuerst das Universe-Repository. Canonical veröffentlicht Pakete für die zugehörige Gastumgebung im Universe-Repository.

    sudo apt-add-repository universe
  3. Aktualisieren Sie die Paketlisten:

    sudo apt update
  4. Installieren Sie die Gastumgebungspakete:

    sudo apt install -y google-compute-engine google-osconfig-agent
    
  5. Starten Sie die Instanz neu und prüfen Sie das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.

  6. Überprüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.

SLES

  1. Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.

  2. Aktivieren Sie das öffentliche Cloud-Modul.

    product=$(sudo SUSEConnect --list-extensions | grep -o "sle-module-public-cloud.*")
    [[ -n "$product" ]] && sudo SUSEConnect -p "$product"
    
  3. Aktualisieren Sie die Paketlisten:

    sudo zypper refresh
  4. Installieren Sie die Gastumgebungspakete:

    sudo zypper install -y google-guest-{agent,configs,oslogin} \
    google-osconfig-agent
    sudo systemctl enable /usr/lib/systemd/system/google-*
    
  5. Starten Sie die Instanz neu und prüfen Sie das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.

  6. Überprüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.

Windows

Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.

Führen Sie zur Installation der Windows-Gastumgebung die folgenden Befehle in PowerShell ab Version 3.0 mit erweiterten Rechten aus. Für den Befehl Invoke-WebRequest unten in der Anleitung ist eine PowerShell-Version höher als 3.0 erforderlich.

  1. Laden Sie GooGet herunter und installieren Sie es.

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
    Invoke-WebRequest https://github.com/google/googet/releases/download/v2.13.0/googet.exe -OutFile $env:temp\googet.exe;
    & "$env:temp\googet.exe" -root C:\ProgramData\GooGet -noconfirm install -sources `
    https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable googet;
    Remove-Item "$env:temp\googet.exe"
    

    Während der Installation fügt GooGet der Systemumgebung Inhalte hinzu. Starten Sie nach Abschluss der Installation eine neue PowerShell-Konsole oder geben Sie den vollständigen Pfad zur Datei googet.exe (C:\ProgramData\GooGet\googet.exe) an.

  2. Öffnen Sie eine neue Konsole und fügen Sie das Repository google-compute-engine-stable hinzu.

    googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
  3. Installieren Sie die zentralen Windows-Gastumgebungspakete.

    googet -noconfirm install google-compute-engine-windows `
    google-compute-engine-sysprep google-compute-engine-metadata-scripts `
    google-compute-engine-vss google-osconfig-agent
    
  4. Installieren Sie das optionale Windows-Gastumgebungspaket.

    googet -noconfirm install google-compute-engine-auto-updater

    Verwendung des googet-Befehls.

    Führen Sie den Befehl googet available aus, um die verfügbaren Pakete abzurufen.

    Führen Sie den Befehl googet installed aus, um die installierten Pakete abzurufen.

    Führen Sie den Befehl googet update aus, um eine Aktualisierung auf die neueste Paketversion vorzunehmen.

    Führen Sie googet help aus, um sich weitere Befehle anzusehen.

Bootlaufwerk klonen und Startskript verwenden

Wenn Sie zu einer Instanz keine Verbindung herstellen können, um die Gastumgebung manuell zu installieren, installieren Sie sie mithilfe der folgenden Vorgehensweise entweder über die GCP Console oder Cloud Shell.

Die aufgeführte Methode gilt nur für Linux-Distributionen. Für Windows verwenden Sie eine der beiden anderen Installationsmethoden.

Verwenden Sie die Cloud Shell, um dieses Verfahren durchzuführen:

CentOS/RHEL

  1. Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.

  2. Erstellen Sie eine neue Instanz als Rettungsinstanz. Geben Sie dieser Instanz den Namen rescue. Diese Rettungsinstanz muss nicht das gleiche Linux-Betriebssystem wie die problematische Instanz ausführen. In diesem Beispiel wird für die Rettungsinstanz "rescue" Debian 9 verwendet.

  3. Beenden Sie die problematische Instanz und erstellen Sie eine Kopie des Bootlaufwerks.

    1. Legen Sie einen Variablennamen für die problematische Instanz fest. Dies vereinfacht das Referenzieren der Instanz in späteren Schritten.

      export PROB_INSTANCE_NAME=VM_NAME

      Ersetzen Sie VM_NAME durch den Namen der problematischen Instanz.

    2. Beenden Sie die problematische Instanz.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Rufen Sie den Namen des Bootlaufwerks für die problematische Instanz ab.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Erstellen Sie einen Snapshot des Bootlaufwerks.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Erstellen Sie ein neues Laufwerk anhand dieses Snapshots.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Löschen Sie den Snapshot:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Fügen Sie das neue Laufwerk der Rettungsinstanz hinzu und stellen Sie das Root-Volume für die Rettungsinstanz bereit. Da bei dieser Vorgehensweise nur ein zusätzliches Laufwerk hinzugefügt wird, lautet die Gerätekennzeichnung des neuen Laufwerks /dev/sdb. CentOS/RHEL verwendet standardmäßig das erste Volume auf dem Laufwerk als Root-Volume. Daher sollte die Volume-Kennzeichnung /dev/sdb1 lauten. Verwenden Sie für benutzerdefinierte Fälle lsblk, um die Volume-Kennzeichnung zu ermitteln.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Stellen Sie mit SSH eine Verbindung zur Instanz her:

    gcloud compute ssh rescue
  6. Führen Sie die folgenden Schritte für die Rettungsinstanz aus:

    1. Hängen Sie das Root-Volume auf dem neuen Laufwerk ein.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount -o nouuid "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. Erstellen Sie das Skript rc.local.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing Google guest environment for CentOS/RHEL =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL version..."
      eval $(grep VERSION_ID /etc/os-release)
      if [[ -z $VERSION_ID ]]; then
        echo "ERROR: Could not determine version of CentOS/RHEL."
        exit 1
      fi
      echo "Updating repo file..."
      tee "/etc/yum.repos.d/google-cloud.repo" << EOM
      [google-compute-engine]
      name=Google Compute Engine
      baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${VERSION_ID/.*}-x86_64-stable
      enabled=1
      gpgcheck=1
      repo_gpgcheck=0
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
      https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      EOM
      echo "Running yum makecache..."
      yum makecache
      echo "Running yum updateinfo..."
      yum updateinfo
      echo "Running yum install google-compute-engine..."
      yum install -y google-compute-engine
      rpm -q google-compute-engine
      if [[ $? -ne 0 ]]; then
        echo "ERROR: Failed to install ${pkg}."
      fi
      echo "Removing this rc.local script."
      rm /etc/rc.d/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
        echo "Restoring a previous rc.local script."
        mv "/etc/moved-rc.local" "/etc/rc.d/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Verschieben Sie das Skript rc.local in das Root-Volume des neuen Laufwerks und legen Sie die Berechtigungen fest. Schieben Sie alle vorhandenen rc.local-Skripts beiseite. Das Skript wird durch das temporäre Skript ersetzt, wenn dieses ausgeführt wurde.

      if [ -f "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local" ]; then
        sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local" \
        "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.d/rc.local"
      
    4. Heben Sie die Bereitstellung des Root-Volumes auf dem neuen Laufwerk auf.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \
      "$NEW_DISK_MOUNT_POINT"
    5. Beenden Sie die SSH-Sitzung auf der Rettungsinstanz.

  7. Trennen Sie das neue Laufwerk von der Rettungsinstanz.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Erstellen Sie eine Instanz, die als Ersatz dient. Beim Erstellen der Ersatzinstanz geben Sie das neue Laufwerk als Bootlaufwerk an. Sie können die Ersatzinstanz mit der Google Cloud Console erstellen:

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

      Zu „VM-Instanzen“

    2. Klicken Sie auf die problematische Instanz und dann auf Ähnliche erstellen.

    3. Geben Sie einen Namen für die Ersatzinstanz ein. Klicken Sie im Abschnitt Bootlaufwerk auf Ändern und dann auf Vorhandene Laufwerke. Wählen Sie das neue Laufwerk aus.

    4. Klicken Sie auf Erstellen. Die Ersatzinstanz wird nach der Erstellung automatisch gestartet.

    Beim Start der Ersatzinstanz wird das temporäre rc.local-Skript ausgeführt und die Gastumgebung installiert. Den Fortschritt dieses Skripts können Sie in den Konsolenlogs anhand der vom temporären Skript rc.local ausgegebene Zeilen prüfen. Zur Anzeige von Logs führen Sie folgenden Befehl aus:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Ersetzen Sie REPLACEMENT_VM_NAME durch den Namen, den Sie der Ersatzinstanz zugewiesen haben.

    Die Ersatzinstanz wird auch automatisch neu gestartet, wenn das temporäre Skript rc.local ausgeführt wurde. Beim zweiten Neustart können Sie anhand des zugehörigen Konsolenlogs feststellen, ob die Gastumgebung geladen wird.

  9. Prüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.

    Wenn Sie sich sicher sind, dass die Ersatzinstanz funktionsfähig ist, können Sie die fehlerhafte Instanz beenden oder löschen.

Debian

  1. Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.

  2. Erstellen Sie eine neue Instanz als Rettungsinstanz. Geben Sie dieser Instanz den Namen rescue. Diese Rettungsinstanz muss nicht das gleiche Linux-Betriebssystem wie die problematische Instanz ausführen. In diesem Beispiel wird für die Rettungsinstanz "rescue" Debian 9 verwendet.

  3. Beenden Sie die problematische Instanz und erstellen Sie eine Kopie des Bootlaufwerks.

    1. Legen Sie einen Variablennamen für die problematische Instanz fest. Dies vereinfacht das Referenzieren der Instanz in späteren Schritten.

      export PROB_INSTANCE_NAME=VM_NAME

      Ersetzen Sie VM_NAME durch den Namen der problematischen Instanz.

    2. Beenden Sie die problematische Instanz.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Rufen Sie den Namen des Bootlaufwerks für die problematische Instanz ab.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Erstellen Sie einen Snapshot des Bootlaufwerks.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Erstellen Sie ein neues Laufwerk anhand dieses Snapshots.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Löschen Sie den Snapshot:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Fügen Sie das neue Laufwerk der Rettungsinstanz hinzu und stellen Sie das Root-Volume für die Rettungsinstanz bereit. Da bei dieser Vorgehensweise nur ein zusätzliches Laufwerk hinzugefügt wird, lautet die Gerätekennzeichnung des neuen Laufwerks /dev/sdb. Debian verwendet standardmäßig das erste Volume auf dem Laufwerk als Root-Volume. Daher sollte die Volume-Kennzeichnung /dev/sdb1 lauten. Verwenden Sie für benutzerdefinierte Fälle lsblk, um die Volume-Kennzeichnung zu ermitteln.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Stellen Sie mit SSH eine Verbindung zur Instanz her:

    gcloud compute ssh rescue
  6. Führen Sie die folgenden Schritte für die Rettungsinstanz aus:

    1. Hängen Sie das Root-Volume auf dem neuen Laufwerk ein.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. Erstellen Sie das Skript rc.local.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing Google guest environment for Debian =="
      export DEBIAN_FRONTEND=noninteractive
      sleep 30 # Wait for network.
      echo "Determining Debian version..."
      eval $(grep VERSION_CODENAME /etc/os-release)
      if [[ -z $VERSION_CODENAME ]]; then
       echo "ERROR: Could not determine Debian version."
       exit 1
      fi
      echo "Adding GPG key for Google cloud repo."
      curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
      echo "Updating repo file..."
      tee "/etc/apt/sources.list.d/google-cloud.list" << EOM
      deb http://packages.cloud.google.com/apt google-compute-engine-${VERSION_CODENAME}-stable main
      deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${VERSION_CODENAME} main
      EOM
      echo "Running apt update..."
      apt update
      echo "Installing packages..."
      for pkg in google-cloud-packages-archive-keyring google-compute-engine; do
       echo "Running apt install ${pkg}..."
       apt install -y ${pkg}
       if [[ $? -ne 0 ]]; then
          echo "ERROR: Failed to install ${pkg}."
       fi
      done
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
       echo "Restoring a previous rc.local script."
       mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Verschieben Sie das Skript rc.local in das Root-Volume des neuen Laufwerks und legen Sie die Berechtigungen fest. Schieben Sie alle vorhandenen rc.local-Skripts beiseite. Das Skript wird durch das temporäre Skript ersetzt, wenn dieses ausgeführt wurde.

      if [[ -f "$NEW_DISK_MOUNT_POINT/etc/rc.local" ]]; then
         sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.local" \
         "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      
    4. Heben Sie die Bereitstellung des Root-Volumes auf dem neuen Laufwerk auf.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Beenden Sie die SSH-Sitzung auf der Rettungsinstanz.

  7. Trennen Sie das neue Laufwerk von der Rettungsinstanz:

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Erstellen Sie eine neue Instanz als Ersatzinstanz. Beim Erstellen der Ersatzinstanz geben Sie das neue Laufwerk als Bootlaufwerk an. Sie können die Ersatzinstanz mit der Google Cloud Console erstellen:

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

      Zu „VM-Instanzen“

    2. Klicken Sie auf die problematische Instanz und dann auf Ähnliche erstellen.

    3. Geben Sie einen Namen für die Ersatzinstanz ein. Klicken Sie im Abschnitt Bootlaufwerk auf Ändern und dann auf Vorhandene Laufwerke. Wählen Sie das neue Laufwerk aus.

    4. Klicken Sie auf Erstellen. Die Ersatzinstanz wird nach der Erstellung automatisch gestartet.

    Beim Start der Ersatzinstanz wird das temporäre rc.local-Skript ausgeführt und die Gastumgebung installiert. Den Fortschritt dieses Skripts können Sie in den Konsolenlogs anhand der vom temporären Skript rc.local ausgegebene Zeilen prüfen. Zur Anzeige von Logs führen Sie folgenden Befehl aus:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Ersetzen Sie REPLACEMENT_VM_NAME durch den Namen, den Sie der Ersatzinstanz zugewiesen haben.

    Die Ersatzinstanz wird auch automatisch neu gestartet, wenn das temporäre Skript rc.local ausgeführt wurde. Beim zweiten Neustart können Sie anhand des zugehörigen Konsolenlogs feststellen, ob die Gastumgebung geladen wird.

  9. Prüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.

    Wenn Sie sich sicher sind, dass die Ersatzinstanz funktionsfähig ist, können Sie die fehlerhafte Instanz beenden oder löschen.

Ubuntu

  1. Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.

  2. Erstellen Sie eine neue Instanz als Rettungsinstanz. Geben Sie dieser Instanz den Namen rescue. Diese Rettungsinstanz muss nicht das gleiche Linux-Betriebssystem wie die problematische Instanz ausführen. In diesem Beispiel wird für die Rettungsinstanz "rescue" Debian 9 verwendet.

  3. Beenden Sie die problematische Instanz und erstellen Sie eine Kopie des Bootlaufwerks.

    1. Legen Sie einen Variablennamen für die problematische Instanz fest. Dies vereinfacht das Referenzieren der Instanz in späteren Schritten.

      export PROB_INSTANCE_NAME=VM_NAME

      Ersetzen Sie VM_NAME durch den Namen der problematischen Instanz.

    2. Beenden Sie die problematische Instanz.

      gcloud compute instances stop "$PROB_INSTANCE_NAME"
    3. Rufen Sie den Namen des Bootlaufwerks für die problematische Instanz ab.

      export PROB_INSTANCE_DISK="$(gcloud compute instances describe \
      "$PROB_INSTANCE_NAME" --format='json' |  jq -r \
      '.disks[] | select(.boot == true) | .source')"
      
    4. Erstellen Sie einen Snapshot des Bootlaufwerks.

      export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot"
      
      gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \
         --snapshot-names "$DISK_SNAPSHOT"
      
    5. Erstellen Sie ein neues Laufwerk anhand dieses Snapshots.

      export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk"
      
      gcloud compute disks create "$NEW_DISK" \
         --source-snapshot="$DISK_SNAPSHOT"
      
    6. Löschen Sie den Snapshot:

      gcloud compute snapshots delete "$DISK_SNAPSHOT"
  4. Fügen Sie das neue Laufwerk der Rettungsinstanz hinzu und stellen Sie das Root-Volume für die Rettungsinstanz bereit. Da bei dieser Vorgehensweise nur ein zusätzliches Laufwerk hinzugefügt wird, lautet die Gerätekennzeichnung des neuen Laufwerks /dev/sdb. Ubuntu kennzeichnet standardmäßig das Root-Volume mit 1. Aus diesem Grund sollte die Volume-Kennzeichnung /dev/sdb1 lauten. Verwenden Sie für benutzerdefinierte Fälle lsblk, um die Volume-Kennzeichnung zu ermitteln.

    gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
  5. Stellen Sie mit SSH eine Verbindung zur Instanz her:

    gcloud compute ssh rescue
  6. Führen Sie die folgenden Schritte für die Rettungsinstanz aus:

    1. Hängen Sie das Root-Volume auf dem neuen Laufwerk ein.

      export NEW_DISK_MOUNT_POINT="/tmp/sdb-root-vol"
      DEV="/dev/sdb1"
      sudo mkdir "$NEW_DISK_MOUNT_POINT"
      sudo mount "$DEV" "$NEW_DISK_MOUNT_POINT"
      
    2. Erstellen Sie das Skript rc.local.

      cat <<'EOF' >/tmp/rc.local
      #!/bin/bash
      echo "== Installing a Linux guest environment for Ubuntu =="
      sleep 30 # Wait for network.
      echo "Running apt update..."
      apt update
      echo "Installing packages..."
      echo "Running apt install google-compute-engine..."
      apt install -y google-compute-engine
      if [[ $? -ne 0 ]]; then
       echo "ERROR: Failed to install ${pkg}."
      fi
      echo "Removing this rc.local script."
      rm /etc/rc.local
      # Move back any previous rc.local:
      if [[ -f "/etc/moved-rc.local" ]]; then
       echo "Restoring a previous rc.local script."
       mv "/etc/moved-rc.local" "/etc/rc.local"
      fi
      echo "Restarting the instance..."
      reboot
      EOF
      
    3. Verschieben Sie das Skript rc.local in das Root-Volume des neuen Laufwerks und legen Sie die Berechtigungen fest. Schieben Sie alle vorhandenen rc.local-Skripts beiseite. Das Skript wird durch das temporäre Skript ersetzt, wenn dieses ausgeführt wurde.

      if [[ -f "$NEW_DISK_MOUNT_POINT/etc/rc.local" ]]; then
         sudo mv "$NEW_DISK_MOUNT_POINT/etc/rc.local" \
         "$NEW_DISK_MOUNT_POINT/etc/moved-rc.local"
      fi
      sudo mv /tmp/rc.local "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chmod 0755 "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      sudo chown root:root "$NEW_DISK_MOUNT_POINT/etc/rc.local"
      
    4. Heben Sie die Bereitstellung des Root-Volumes auf dem neuen Laufwerk auf.

      sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
    5. Beenden Sie die SSH-Sitzung auf der Rettungsinstanz.

  7. Trennen Sie das neue Laufwerk von der Rettungsinstanz:

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  8. Erstellen Sie eine neue Instanz als Ersatzinstanz. Beim Erstellen der Ersatzinstanz geben Sie das neue Laufwerk als Bootlaufwerk an. Sie können die Ersatzinstanz mit der Google Cloud Console erstellen:

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

      Zu „VM-Instanzen“

    2. Klicken Sie auf die problematische Instanz und dann auf Ähnliche erstellen.

    3. Geben Sie einen Namen für die Ersatzinstanz ein. Klicken Sie im Abschnitt Bootlaufwerk auf Ändern und dann auf Vorhandene Laufwerke. Wählen Sie das neue Laufwerk aus.

    4. Klicken Sie auf Erstellen. Die Ersatzinstanz wird nach der Erstellung automatisch gestartet.

    Beim Start der Ersatzinstanz wird das temporäre rc.local-Skript ausgeführt und die Gastumgebung installiert. Den Fortschritt dieses Skripts können Sie in den Konsolenlogs anhand der vom temporären Skript rc.local ausgegebene Zeilen prüfen. Zur Anzeige von Logs führen Sie folgenden Befehl aus:

    gcloud compute instances get-serial-port-output REPLACEMENT_VM_NAME

    Ersetzen Sie REPLACEMENT_VM_NAME durch den Namen, den Sie der Ersatzinstanz zugewiesen haben.

    Die Ersatzinstanz wird auch automatisch neu gestartet, wenn das temporäre Skript rc.local ausgeführt wurde. Beim zweiten Neustart können Sie anhand des zugehörigen Konsolenlogs feststellen, ob die Gastumgebung geladen wird.

  9. Überprüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.

    Wenn Sie sich sicher sind, dass die Ersatzinstanz funktionsfähig ist, können Sie die fehlerhafte Instanz beenden oder löschen.

Gastumgebung aktualisieren

Wenn Sie eine Meldung erhalten, dass die Gastumgebung veraltet ist, aktualisieren Sie die Pakete für Ihr Betriebssystem.

CentOS/RHEL

Führen Sie die folgenden Befehle aus, um CentOS- und RHEL-Betriebssysteme zu aktualisieren:

sudo yum makecache
sudo yum install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

Debian

Führen Sie die folgenden Befehle aus, um Debian-Betriebssysteme zu aktualisieren:

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

Ubuntu

Führen Sie die folgenden Befehle aus, um Ubuntu-Betriebssysteme zu aktualisieren:

sudo apt update
sudo apt install google-compute-engine google-compute-engine-oslogin \
google-guest-agent google-osconfig-agent

SLES

Führen Sie die folgenden Befehle aus, um SLES-Betriebssysteme zu aktualisieren:

sudo zypper refresh
sudo zypper install google-guest-{agent,configs,oslogin} \
google-osconfig-agent

Windows

Führen Sie den folgenden Befehl aus, um Windows-Betriebssysteme zu aktualisieren:

googet update

Gastumgebung validieren

Das Vorhandensein einer Gastumgebung kann entweder durch Überprüfen der Systemlogs, die während des Startvorgangs einer Instanz an die Konsole ausgegeben werden, oder durch Auflistung der installierten Pakete bei einer Verbindung mit der Instanz ermittelt werden.

Erwartete Konsolenlogs für die Gastumgebung

Die folgende Tabelle enthält eine Übersicht über die erwartete Ausgabe für Konsolenlogs, die von Instanzen mit aktiven Gastumgebungen beim Start erstellt werden.

Betriebssystem Dienstverwaltung Erwartete Ausgabe
CentOS/RHEL
Debian
Ubuntu
SLES
Container-Optimized OS 89 und höher
systemd

GCEGuestAgent Info: GCE Agent Started (version YYYYMMDD.NN)
GCEMetadataScripts: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)
Container-Optimized OS 85 und niedriger systemd

Started Google Compute Engine Accounts Daemon
Started Google Compute Engine Network Daemon
Started Google Compute Engine Clock Skew Daemon
Started Google Compute Engine Instance Setup
Started Google Compute Engine Startup Scripts
Started Google Compute Engine Shutdown Scripts
Windows

GCEGuestAgent: GCE Agent Started (version YYYYMMDD.NN)
GCEMetadataScripts: Starting startup scripts (version YYYYMMDD.NN)
OSConfigAgent Info: OSConfig Agent (version YYYYMMDD.NN)

Mit den im Folgenden aufgeführten Schritten können Sie Konsolenlogs für eine Instanz aufrufen.

Console

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

    Zu „VM-Instanzen“

    1. Klicken Sie auf die Instanz, die Sie untersuchen möchten.
    2. Führen Sie einen Neustart oder eine Zurücksetzung der Instanz aus.
    3. Klicken Sie unter Logs auf Serieller Port 1 (Konsole).
    4. Suchen Sie nach der erwarteten Ausgabe gemäß der obigen Tabelle.

gcloud

  1. Führen Sie einen Neustart oder eine Zurücksetzung der Instanz aus.
  2. Verwenden Sie den Unterbefehl gcloud compute instances get-serial-port-output, um eine Verbindung über das Google Cloud CLI herzustellen. Beispiel:

    gcloud compute instances get-serial-port-output VM_NAME

    Ersetzen Sie VM_NAME durch den Namen der Instanz, die Sie untersuchen möchten.

  3. Suchen Sie nach der erwarteten Ausgabe gemäß der obigen Tabelle.

Geladene Dienste für die Gastumgebung

Die folgende Tabelle enthält eine Übersicht über die Dienste, die auf Instanzen mit aktiven Gastumgebungen geladen sein sollten. Der Befehl zur Auflistung von Diensten muss nach der Herstellung einer Verbindung zur Instanz ausgeführt werden. Daher kann diese Überprüfung nur durchgeführt werden, wenn Sie einen entsprechenden Zugriff haben.

Betriebssystem Befehl zum Auflisten von Diensten Erwartete Ausgabe
CentOS/RHEL
Debian

sudo systemctl list-unit-files \
| grep google | grep enabled

google-disk-expand.service             enabled
google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Ubuntu

sudo systemctl list-unit-files \
| grep google | grep enabled

google-guest-agent.service             enabled
google-osconfig-agent.service          enabled
google-shutdown-scripts.service        enabled
google-startup-scripts.service         enabled
google-oslogin-cache.timer             enabled
Container-Optimized OS

sudo systemctl list-unit-files \
| grep google

var-lib-google.mount                   disabled
google-guest-agent.service             disabled
google-osconfig-agent.service          disabled
google-osconfig-init.service           disabled
google-oslogin-cache.service           static
google-shutdown-scripts.service        disabled
google-startup-scripts.service         disabled
var-lib-google-remount.service         static
google-oslogin-cache.timer             disabled 
SLES 12+

sudo systemctl list-unit-files \
| grep google | grep enabled

google-guest-agent.service              enabled
google-osconfig-agent.service           enabled
google-shutdown-scripts.service         enabled
google-startup-scripts.service          enabled
google-oslogin-cache.timer              enabled 
Windows

Get-Service GCEAgent
Get-ScheduledTask GCEStartup

Running    GCEAgent   GCEAgent
\          GCEStartup Ready

Installierte Pakete für die Gastumgebung

Die folgende Tabelle enthält eine Übersicht über die Pakete, die auf Instanzen mit aktiven Gastumgebungen installiert sein sollten. Der Befehl zur Auflistung von Paketen muss nach der Herstellung einer Verbindung zur Instanz ausgeführt werden. Daher kann diese Überprüfung nur durchgeführt werden, wenn Sie einen entsprechenden Zugriff haben.

Betriebssystem Befehl zum Auflisten von Paketen Erwartete Ausgabe
CentOS/RHEL

rpm -qa --queryformat '%{NAME}\n' \
|grep -iE google\|gce | grep -iE \
'google|gce'

google-osconfig-agent
google-compute-engine-oslogin
google-guest-agent
gce-disk-expand
google-cloud-sdk
google-compute-engine
Debian

apt list --installed \
| grep -iE 'google'

gce-disk-expand
google-cloud-packages-archive-keyring
google-cloud-sdk
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
Ubuntu

apt list --installed \
| grep -iE "google"

google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
SUSE (SLES)

rpm -qa --queryformat '%{NAME}\n' \
|grep -iE google

google-guest-configs
google-osconfig-agent
google-guest-oslogin
google-guest-agent
Windows

googet installed

certgen
googet
google-compute-engine-auto-updater
google-compute-engine-driver-gga
google-compute-engine-driver-netkvm
google-compute-engine-driver-pvpanic
google-compute-engine-driver-vioscsi
google-compute-engine-metadata-scripts
google-compute-engine-powershell
google-compute-engine-sysprep
google-compute-engine-vss
google-compute-engine-windows
google-osconfig-agent

Weitere Informationen