Gastumgebung installieren


Auf dieser Seite wird beschrieben, wie Sie die Gastumgebung manuell auf VM-Instanzen installieren. Die Gastumgebung besteht aus einer Reihe von Skripts, Daemons und Binärdateien, die für die Ausführung von Instanzen in Compute Engine erforderlich sind. Weitere Informationen finden Sie unter Gastumgebung.

Wenn Sie öffentliche Betriebssystem-Images von Google verwenden, ist die Gastumgebung in den meisten Fällen automatisch enthalten. Eine vollständige Liste der Betriebssystem-Images, die automatisch die Gastumgebung enthalten, finden Sie unter Details zu Betriebssystemen.

Wenn die Gastumgebung nicht installiert oder veraltet ist, installieren oder aktualisieren Sie sie. Informationen dazu, wann Sie die Gastumgebung installieren oder aktualisieren müssen, finden Sie unter Zeitpunkt zur manuellen Installation oder Aktualisierung der Gastumgebung.

Hinweise

  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud -Dienste und APIs überprüft. Zum Ausführen von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Installieren Sie die Google Cloud CLI. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:

      gcloud init

      Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

    2. Set a default region and zone.

Zeitpunkt zur Installation oder Aktualisierung der Gastumgebung

In den meisten Fällen müssen Sie die Gastumgebung nicht manuell installieren oder aktualisieren. In den folgenden Abschnitten erfahren Sie, wann Sie die Gastumgebung manuell installieren oder aktualisieren müssen.

Installationsanforderungen prüfen

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

Möglicherweise müssen Sie die Gastumgebung in den folgenden Situationen installieren:

  • Auf dem von Google bereitgestellten Betriebssystem-Image, das Sie benötigen, ist die Gastumgebung nicht installiert.

  • Sie importieren ein benutzerdefiniertes Image oder ein virtuelles Laufwerk in Compute Engine und verhindern die automatische Installation der Gastumgebung.

    Wenn Sie virtuelle Laufwerke oder benutzerdefinierte Images importieren, können Sie Compute Engine veranlassen, die Gastumgebung für Sie zu installieren. Wenn Sie die Gastumgebung jedoch nicht während des Importvorgangs installieren möchten, müssen Sie die Gastumgebung manuell installieren.

  • Sie migrieren VMs mit Migrate to Virtual Machines zu Compute Engine.

Informationen zum Installieren der Gastumgebung finden Sie unter Installationsmethoden.

Anforderungen für Updates prüfen

Möglicherweise müssen Sie die Gastumgebung in den folgenden Situationen aktualisieren:

Informationen zum Aktualisieren der Gastumgebung finden Sie unter Gastumgebung aktualisieren.

Installationsmethoden

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

Unterstützte Betriebssysteme

Sie können die Gastumgebung auf VMs installieren oder aktualisieren, die OS-Image-Versionen im Lebenszyklus der allgemeinen Verfügbarkeit (GA) oder im erweiterten Supportlebenszyklus verwenden.

Eine Liste der Betriebssystem-Image-Versionen und ihrer Lebenszyklusphase in Compute Engine finden Sie unter Details zu Betriebssystemen.

Beschränkungen

Sie können das Importtool nicht manuell installieren oder verwenden, um Gastumgebungen für Fedora CoreOS und Container-Optimized OS (COS) zu installieren. Für COS empfiehlt Google die Verwendung der von Google bereitgestellten öffentlichen Images, die die Gastumgebung als Kernkomponente enthalten.

Gastumgebung installieren

Wählen Sie eine der folgenden Methoden aus, um die Gastumgebung manuell zu installieren. Die Auswahl hängt davon ab, ob Sie eine Verbindung zur Instanz herstellen können:

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, um die Gastumgebung zu installieren, installieren Sie die Gastumgebung stattdessen 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/Rocky

  1. Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
  2. Bestimmen Sie die Version von CentOS/RHEL/Rocky Linux. Erstellen Sie dann 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. Prüfen Sie dann das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.

  6. Stellen Sie über SSH eine Verbindung zur Instanz her, um die Verbindung zu überprüfen. Eine detaillierte Anleitung finden Sie unter Mit SSH eine Verbindung zur Instanz herstellen.

Debian

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

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. Ermitteln Sie den Namen der Debian-Distribution. Erstellen Sie dann 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. Prüfen Sie dann das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.

  7. Stellen Sie über SSH eine Verbindung zur Instanz her, um die Verbindung zu überprüfen. Eine detaillierte Anleitung finden Sie unter Mit SSH eine Verbindung zur Instanz herstellen.

Ubuntu

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

  2. Aktivieren Sie 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. Prüfen Sie dann das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.

  6. Stellen Sie über SSH eine Verbindung zur Instanz her, um die Verbindung zu überprüfen. Eine detaillierte Anleitung finden Sie unter Mit SSH eine Verbindung zur Instanz herstellen.

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. Prüfen Sie dann das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.

  6. Stellen Sie über SSH eine Verbindung zur Instanz her, um die Verbindung zu überprüfen. Eine detaillierte Anleitung finden Sie unter Mit SSH eine Verbindung zur Instanz herstellen.

Windows

Prüfen Sie vorab, 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 ist PowerShell-Version 3.0 oder höher 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.18.3/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"
    

    Bei der Installation fügt GooGet der Systemumgebung Inhalte hinzu. Starten Sie nach Abschluss der Installation eine neue PowerShell-Konsole. Alternativ können Sie den vollständigen Pfad zur Datei googet.exe (C:\ProgramData\GooGet\googet.exe) angeben.

  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 keine Verbindung zu einer Instanz herstellen können, um die Gastumgebung manuell zu installieren, installieren Sie die Gastumgebung mithilfe der folgenden Schritte, die in der Google Cloud Console oder in Cloud Shell ausgeführt werden können.

Diese 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. Wenn Sie diese Anleitung ohne Cloud Shell ausführen möchten, installieren Sie den jq-Befehlszeilen-JSON-Prozessor. Dieser Prozessor filtert die Ausgabe der gcloud CLI. In Cloud Shell ist jq vorinstalliert.

CentOS/RHEL/Rocky

  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. Diese Variable 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/Rocky Linux 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 Konfigurationen 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/Rocky Linux =="
      sleep 30 # Wait for network.
      echo "Determining CentOS/RHEL/Rocky Linux version..."
      eval $(grep VERSION_ID /etc/os-release)
      if [[ -z $VERSION_ID ]]; then
        echo "ERROR: Could not determine version of CentOS/RHEL/Rocky Linux."
        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. Sichern Sie die vorhandene Datei rc.local, verschieben Sie das temporäre Skript rc.local auf das bereitgestellte Laufwerk und legen Sie die Berechtigungen so fest, dass das temporäre Skript beim Booten ausgeführt werden kann. Das temporäre Skript ersetzt das ursprüngliche Skript, wenn es mit dem Booten fertig ist. Führen Sie dazu den folgenden Befehl aus:

      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 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.

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. Diese Variable 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 Konfigurationen 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. Sichern Sie die vorhandene Datei rc.local, verschieben Sie das temporäre Skript rc.local auf das bereitgestellte Laufwerk und legen Sie die Berechtigungen so fest, dass das temporäre Skript beim Booten ausgeführt werden kann. Das temporäre Skript ersetzt das ursprüngliche Skript, wenn es mit dem Booten fertig ist. Führen Sie dazu den folgenden Befehl aus:

      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 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.

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. Diese Variable 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 Konfigurationen 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. Sichern Sie die vorhandene Datei rc.local, verschieben Sie das temporäre Skript rc.local auf das bereitgestellte Laufwerk und legen Sie die Berechtigungen so fest, dass das temporäre Skript beim Booten ausgeführt werden kann. Das temporäre Skript ersetzt das ursprüngliche Skript, wenn der Bootvorgang abgeschlossen ist. Führen Sie dazu den folgenden Befehl aus:

      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 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 so:

CentOS/RHEL/Rocky

Führen Sie die folgenden Befehle aus, um CentOS-, RHEL- und Rocky Linux-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

Sie können prüfen, ob eine Gastumgebung installiert ist, indem Sie die Systemlogs untersuchen, die während des Startvorgangs einer Instanz an die Console ausgegeben werden, oder indem Sie die installierten Pakete auflisten, während Sie mit der Instanz verbunden sind.

Erwartete Konsolenlogs für die Gastumgebung ansehen

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/Rocky Linux
Debian
Ubuntu
SLES
Container-Optimized OS 89 und höher
systemd
google_guest_agent: GCE Agent Started (version YYYYMMDD.NN)
google_metadata_script_runner: 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. Wählen Sie die Instanz aus, die Sie untersuchen möchten.
    2. Starten Sie die Instanz neu oder setzen Sie sie zurück.
    3. Klicken Sie unter Logs auf Serieller Port 1 (Konsole).
    4. Suchen Sie in der Tabelle vor diesen Schritten nach der erwarteten Ausgabe.

gcloud

  1. Starten Sie die Instanz neu oder setzen Sie sie zurück.
  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 in der Tabelle vor diesen Schritten nach der erwarteten Ausgabe.

Geladene Dienste nach Betriebssystemversion ansehen

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 können Sie diese Überprüfung nur durchführen, wenn Sie Zugriff auf die Instanz haben.

Betriebssystem Befehl zum Auflisten von Diensten Erwartete Ausgabe
CentOS/RHEL/Rocky Linux
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 nach Betriebssystemversion ansehen

Die folgende Tabelle enthält eine Übersicht über die Pakete, die auf Instanzen mit aktiven Gastumgebungen installiert sein sollten. Sie müssen den Befehl zum Auflisten der installierten Pakete nach der Herstellung einer Verbindung zur Instanz ausführen. Daher können Sie diese Überprüfung nur durchführen, wenn Sie Zugriff auf die Instanz haben.

Weitere Informationen zu diesen Paketen finden Sie unter Komponenten der Gastumgebung.

Betriebssystem Befehl zum Auflisten von Paketen Erwartete Ausgabe
CentOS/RHEL/Rocky Linux
rpm -qa --queryformat '%{NAME}\n' \
| 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 -i 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 -i google
google-compute-engine-oslogin
google-compute-engine
google-guest-agent
google-osconfig-agent
SUSE (SLES)
rpm -qa --queryformat '%{NAME}\n' \
| grep -i 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