Gastumgebung installieren

Auf dieser Seite wird gezeigt, wie Sie manuell die Gastumgebung für VM-Instanzen installieren, die auf Compute Engine ausgeführt werden.

Wenn Sie VM-Instanzen verwenden, die mit von Google bereitgestellten öffentlichen Images erstellt wurden, müssen Sie in den meisten Fällen keine Gastumgebung manuell installieren.

Prüfen Sie vor der manuellen 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.

Prüfen Sie andernfalls anhand der Informationen , unter Wann muss die Gastumgebung manuell installiert werden?, ob Sie die Gastumgebung manuell installieren müssen.

Hinweise

Inhalt

Betriebssystemunterstützung

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

  • Ubuntu 14.04 oder höher
  • CentOS 6 und 7
  • Red Hat Enterprise Linux (RHEL) 6 und 7
  • Debian 9
  • Windows Server 2019
  • Windows Server 1809 und 1803
  • Windows Server 1709
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2008 R2
  • SQL Server auf Windows Server
  • Windows BYOL(Beta):
    • Windows 7
    • Windows 10

Google empfiehlt für die Installation der Gastumgebung das Importtool. Eine Liste der Installationsoptionen finden Sie unter "Installationsmethoden".

Sie können die Gastumgebungen für die Betriebssysteme SUSE, CoreOS und Container-Optimized OS nicht manuell installieren. Wenn Sie eines dieser Betriebssysteme benötigen, empfehlen wir die Verwendung öffentlicher Images, da eine Gastumgebung Kernbestandteil aller öffentlichen Images ist.

Gastumgebung installieren

Installationsmethoden

Es gibt drei Möglichkeiten, wie Sie die Gastumgebung installieren können. Wählen Sie eine der folgenden Optionen:

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:

    OS_RELEASE_FILE="/etc/redhat-release"
    if [ ! -f $OS_RELEASE_FILE ]; then
      OS_RELEASE_FILE="/etc/centos-release"
    fi
    DIST=$(cat $OS_RELEASE_FILE | grep -o '[0-9].*' | awk -F'.' '{print $1}')
    sudo tee /etc/yum.repos.d/google-cloud.repo << EOM
    [google-cloud-compute]
    name=Google Cloud Compute
    baseurl=https://packages.cloud.google.com/yum/repos/google-compute-engine-el${DIST}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    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:

    declare -a PKG_LIST=(python-google-compute-engine
    google-compute-engine-oslogin
    google-compute-engine)
    for pkg in ${PKG_LIST[@]}; do
      sudo yum install -y ${pkg}
    done
    
  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. Prü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:

    DIST=$(cat /etc/os-release | grep "VERSION=" | sed "s/\"\|(\|)\|VERSION=//g" \
    | awk '{print tolower($NF)}')
    sudo tee /etc/apt/sources.list.d/google-cloud.list << EOM
    deb http://packages.cloud.google.com/apt google-compute-engine-${DIST}-stable main
    deb http://packages.cloud.google.com/apt google-cloud-packages-archive-keyring-${DIST} main
    EOM
    
  4. Aktualisieren Sie die Paketlisten:

    sudo apt-get update
  5. Installieren Sie die Gastumgebungspakete:

    declare -a PKG_LIST=(google-cloud-packages-archive-keyring
    python-google-compute-engine
    python3-google-compute-engine
    google-compute-engine-oslogin
    google-compute-engine)
    for pkg in ${PKG_LIST[@]}; do
      sudo apt install -y ${pkg}
    done
    
  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. Prü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-get update
  4. Installieren Sie die Gastumgebungspakete:

    declare -a PKG_LIST=(python-google-compute-engine
    python3-google-compute-engine
    google-compute-engine-oslogin
    gce-compute-image-packages)
    for pkg in ${PKG_LIST[@]}; do
      sudo apt install -y ${pkg} || echo "Not available: ${pkg}"
    done
    
  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. Prü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 Version 3.0 oder höher mit erhöhten 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
    
  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 und in Cloud Shell ausgeführt werden können.

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. Installieren Sie den öffentlichen Repo-GPG-Schlüssel:
  3. 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.

  4. 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=instance-name

      Dabei ist instance-name der Name 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"
  5. 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"
  6. Stellen Sie mit SSH eine Verbindung zur Instanz her:

    gcloud compute ssh rescue
  7. 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"
    if [ "$?" != "0" ]; then
    # Handle XFS filesystem cases (CentOS/RHEL 7):
    sudo mount -o nouuid "$DEV" "$NEW_DISK_MOUNT_POINT"
    fi
    
    1. Erstellen Sie das Skript rc.local.
    cat <<'EOF' >/tmp/rc.local
    #!/bin/bash
    declare -a PKG_LIST=(python-google-compute-engine
    google-compute-engine-oslogin
    google-compute-engine)
    declare -x YUM_SERVER="packages.cloud.google.com"
    declare -x REPO_FILE="/etc/yum.repos.d/google-cloud.repo"
    echo "== Installing a Linux guest environment for CentOS/RHEL =="
    sleep 30 # Wait for network.
    echo "Determining CentOS/RHEL version..."
    OS_RELEASE_FILE="/etc/redhat-release"
    if [ ! -f "$OS_RELEASE_FILE" ]; then
       OS_RELEASE_FILE="/etc/centos-release"
    fi
    if [ ! -f "$OS_RELEASE_FILE" ]; then
       echo "ERROR: This system does not appear to be CentOS/RHEL."
       exit 1
    fi
    DIST=$(cat "$OS_RELEASE_FILE" | grep -o '[0-9].*' | awk -F'.' '{print $1}')
    if [ -z $DIST ]; then
       echo "ERROR: Could not determine version of CentOS/RHEL."
       exit 1
    fi
    echo "Updating $REPO_FILE..."
    tee "$REPO_FILE" << EOM
    [google-cloud-compute]
    name=Google Cloud Compute
    baseurl=https://$YUM_SERVER/yum/repos/google-compute-engine-el${DIST}-x86_64-stable
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://$YUM_SERVER/yum/doc/yum-key.gpg
    https://$YUM_SERVER/yum/doc/rpm-package-key.gpg
    EOM
    echo "Running yum makecache..."
    yum makecache
    echo "Running yum updateinfo..."
    yum updateinfo
    echo "Installing packages..."
    for pkg in ${PKG_LIST[@]}; do
       echo "Running yum install ${pkg}..."
       yum install -y ${pkg}
       if [ "$?" != "0" ]; then
          echo "ERROR: Failed to install ${pkg}."
       fi
    done
    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 now
    EOF
    
    1. 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"
      
    2. Heben Sie die Bereitstellung des Root-Volumes auf dem neuen Laufwerk auf.

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

  8. Trennen Sie das neue Laufwerk von der Rettungsinstanz.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  9. 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. Gehen Sie zur Seite der VM-Instanzen.

      Zur Seite "VM-Instanzen"

    2. Klicken Sie auf die problematische Instanz und dann auf Klonen.
    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-instance-name

    Dabei ist replacement-instance-name der Name, 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.

  10. 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=instance-name

      Dabei ist instance-name der Name 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
      declare -a PKG_LIST=(google-cloud-packages-archive-keyring
      python-google-compute-engine
      python3-google-compute-engine
      google-compute-engine-oslogin
      google-compute-engine)
      declare -x APT_SERVER="packages.cloud.google.com"
      declare -x REPO_FILE="/etc/apt/sources.list.d/google-cloud.list"
      echo "== Installing a Linux guest environment for Debian =="
      sleep 30 # Wait for network.
      echo "Determining Debian version..."
      DIST=$(cat /etc/os-release | grep "VERSION=" \
      | sed "s/\"\|(\|)\|VERSION=//g" | awk '{print tolower($NF)}')
      if [ -z $DIST ]; then
       echo "ERROR: Could not determine Debian version."
       exit 1
      fi
      echo "Adding GPG key for $APT_SERVER."
      curl https://$APT_SERVER/apt/doc/apt-key.gpg | apt-key add -
      echo "Updating $REPO_FILE..."
      tee "$REPO_FILE" << EOM
      deb http://$APT_SERVER/apt google-compute-engine-${DIST}-stable main
      deb http://$APT_SERVER/apt google-cloud-packages-archive-keyring-${DIST} main
      EOM
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
       echo "Running apt install ${pkg}..."
       apt install -y ${pkg}
       if [ "$?" != "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 now
      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. Gehen Sie zur Seite der VM-Instanzen.

      Zur Seite "VM-Instanzen"

    2. Klicken Sie auf die problematische Instanz und dann auf Klonen.
    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-instance-name

    Dabei ist replacement-instance-name der Name, 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. Installieren Sie den öffentlichen Repo-GPG-Schlüssel:
  3. 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.

  4. 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=instance-name

      Dabei ist instance-name der Name 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"
  5. 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"
  6. Stellen Sie mit SSH eine Verbindung zur Instanz her:

    gcloud compute ssh rescue
  7. 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
      declare -a PKG_LIST=(python-google-compute-engine
      python3-google-compute-engine
      google-compute-engine-oslogin
      gce-compute-image-packages)
      echo "== Installing a Linux guest environment for Ubuntu =="
      sleep 30 # Wait for network.
      echo "Determining Ubuntu version..."
      DIST=$(cat /etc/os-release | grep "VERSION_ID=" \
      | sed "s/\"\|(\|)\|VERSION_ID=//g" | awk -F. '{print tolower($1)}')
      if [ -z $DIST ]; then
       echo "ERROR: Could not determine Ubuntu version."
       exit 1
      fi
      if [ "$DIST" -lt "16" ]; then
       # Adjust package list for older Ubuntu:
       echo "Ubuntu version less than 16.04."
       declare -a PKG_LIST=(python-google-compute-engine \
       gce-compute-image-packages)
      fi
      echo "Ensuring Ubuntu universe repositories are enabled."
      apt-add-repository universe
      echo "Running apt update..."
      apt-get update
      echo "Installing packages..."
      for pkg in ${PKG_LIST[@]}; do
       echo "Running apt install ${pkg}..."
       apt install -y ${pkg}
       if [ "$?" != "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 now
      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.

  8. Trennen Sie das neue Laufwerk von der Rettungsinstanz.

    gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
  9. 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. Öffnen Sie die Seite der VM-Instanzen.

      Zur Seite "VM-Instanzen"

    2. Klicken Sie auf die problematische Instanz und dann auf Klonen.
    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-instance-name

    Dabei ist replacement-instance-name der Name, 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.

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

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 python*-google-compute-engine

Debian/Ubuntu

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

sudo apt-get update
sudo apt install google-compute-engine google-compute-engine-oslogin python*-google-compute-engine

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 7
Debian 9Ubuntu 16.04+
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
CentOS/RHEL 6
Ubuntu 14.04
upstart

google-accounts: INFO Starting Google Accounts daemon
google-ip-forwarding: INFO Starting Google Compute Engine Network Daemon
google-clock-skew: INFO Starting Google Clock Skew daemon
CoreOS systemd und ignition

systemd[1]: Starting Ignition (files)...
[finished] enabling unit "coreos-metadata-sshkeys@.service
[finished] enabling unit "oem-gce.service"
[finished] enabling unit "oem-cloudinit.service"
Container-Optimized OS 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
SUSE (SLES) 12+ 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

GCEWindowsAgent: GCE Agent Started
GCEMetadataScripts: Starting startup scripts

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

Console

  1. Öffnen Sie die Seite der VM-Instanzen.

    Zur Seite "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 get-serial-port-output, um eine Verbindung mithilfe des gcloud-Befehlszeilentools herzustellen. Beispiel:

    gcloud compute instances get-serial-port-output [INSTANCE_NAME]

    Dabei ist instance-name der Name der Instanz, die Sie untersuchen müssen.

  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 7
Debian 9Ubuntu 16.04+

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

google-accounts-daemon.service      enabled
google-clock-skew-daemon.service    enabled
google-instance-setup.service       enabled
google-shutdown-scripts.service     enabled
google-startup-scripts.service      enabled
google-network-daemon.service       enabled
CentOS/RHEL 6
Ubuntu 14.04

initctl list | grep google

google-accounts-daemon              start/running
google-network-daemon               start/running
google-clock-skew-daemon            start/running
google-instance-setup               stop/waiting
google-startup-scripts              stop/waiting
google-shutdown-scripts             stop/waiting
CoreOS

sudo systemctl list-unit-files \
| grep \
"oem-cloudinit\|oem-gce\|coreos-metadata-ssh" \
| grep enabled

coreos-metadata-sshkeys@.service    enabled
oem-cloudinit.service               enabled
oem-gce.service                     enabled
Container-Optimized OS

sudo systemctl list-unit-files \
| grep google

var-lib-google.mount                disabled
google-accounts-daemon.service      disabled
google-clock-skew-daemon.service    disabled
google-instance-setup.service       disabled
google-ip-forwarding-daemon.service disabled
google-network-setup.service        disabled
google-shutdown-scripts.service     disabled
google-startup-scripts.service      disabled
var-lib-google-remount.service      static 
SUSE (SLES) 12+

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

google-accounts-daemon.service      enabled
google-network-daemon.service       enabled
google-clock-skew-daemon.service    enabled
google-instance-setup.service       enabled
google-shutdown-scripts.service     enabled
google-startup-scripts.service      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 6 & 7

yum list installed | grep google-compute

google-compute-engine
google-compute-engine-oslogin.x86_64
python-google-compute-engine
Debian 9

apt list --installed | grep google-compute

google-compute-engine
google-compute-engine-oslogin
python-google-compute-engine
python3-google-compute-engine
Ubuntu 14.04

apt list --installed \
| grep "google-compute\|gce-compute-image-packages"

gce-compute-image-packages
google-compute-engine-oslogin
python-google-compute-engine
Ubuntu 16.04+

apt list --installed \
| grep "google-compute\|gce-compute-image-packages"

gce-compute-image-packages
google-compute-engine-oslogin
python-google-compute-engine
python3-google-compute-engine
SUSE (SLES) 12+

zypper se -i | grep package \
| grep "google-compute-engine\|gce\|ClientConfigGCE"

cloud-regionsrv-client-plugin-gce
google-compute-engine-init
python-gcemetadata
regionServiceClientConfigGCE
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

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation