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
-
Wenn Sie die Beispiele der Google Cloud-Befehlszeile in dieser Anleitung verwenden möchten:
- Sie können wahlweise lokale Tools installieren oder Cloud Shell verwenden.
- Lokale Tools verwenden
- Installieren Sie die Google Cloud CLI.
- Installieren Sie den jq-Befehlszeilen-JSON-Prozessor: Mit diesem Prozessor können Sie die
gcloud
-Ausgabe filtern.
- Verwenden Sie Cloud Shell, da hier die gcloud CLI und
jq
bereits vorinstalliert sind: Cloud Shell öffnen
- Lokale Tools verwenden
- Legen Sie Standard-Attribute fest.
gcloud config set compute/zone ZONE
gcloud config set compute/region REGION
gcloud config set project PROJECT
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:
- Stellen Sie über SSH oder RDP eine Verbindung zu Ihrer Instanz her und installieren Sie die Gastumgebung direkt.
- Klonen Sie das Bootlaufwerk und installieren Sie die Gastumgebung mit einem Startskript.
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
- Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
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
Aktualisieren Sie die Paketlisten:
sudo yum makecache sudo yum updateinfo
Installieren Sie die Gastumgebungspakete:
sudo yum install -y google-compute-engine google-osconfig-agent
Starten Sie die Instanz neu und prüfen Sie das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.
Überprüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.
Debian
- Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
Installieren Sie den öffentlichen Repo-GPG-Schlüssel:
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
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
Aktualisieren Sie die Paketlisten:
sudo apt update
Installieren Sie die Gastumgebungspakete:
sudo apt install -y google-cloud-packages-archive-keyring sudo apt install -y google-compute-engine google-osconfig-agent
Starten Sie die Instanz neu und prüfen Sie das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.
Überprüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.
Ubuntu
Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
Aktivieren Sie zuerst das Universe-Repository. Canonical veröffentlicht Pakete für die zugehörige Gastumgebung im Universe-Repository.
sudo apt-add-repository universe
Aktualisieren Sie die Paketlisten:
sudo apt update
Installieren Sie die Gastumgebungspakete:
sudo apt install -y google-compute-engine google-osconfig-agent
Starten Sie die Instanz neu und prüfen Sie das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.
Überprüfen Sie, ob Sie mit SSH eine Verbindung zur Instanz herstellen können.
SLES
Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
Aktivieren Sie das öffentliche Cloud-Modul.
product=$(sudo SUSEConnect --list-extensions | grep -o "sle-module-public-cloud.*") [[ -n "$product" ]] && sudo SUSEConnect -p "$product"
Aktualisieren Sie die Paketlisten:
sudo zypper refresh
Installieren Sie die Gastumgebungspakete:
sudo zypper install -y google-guest-{agent,configs,oslogin} \ google-osconfig-agent sudo systemctl enable /usr/lib/systemd/system/google-*
Starten Sie die Instanz neu und prüfen Sie das zugehörige Konsolenlog, um festzustellen, ob die Gastumgebung beim Start des Sicherungsvorgangs geladen wird.
Ü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.
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 Dateigooget.exe
(C:\ProgramData\GooGet\googet.exe) an.Ö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
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
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
Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
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.
Beenden Sie die problematische Instanz und erstellen Sie eine Kopie des Bootlaufwerks.
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.
Beenden Sie die problematische Instanz.
gcloud compute instances stop "$PROB_INSTANCE_NAME"
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')"
Erstellen Sie einen Snapshot des Bootlaufwerks.
export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot" gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \ --snapshot-names "$DISK_SNAPSHOT"
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"
Löschen Sie den Snapshot:
gcloud compute snapshots delete "$DISK_SNAPSHOT"
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"
Stellen Sie mit SSH eine Verbindung zur Instanz her:
gcloud compute ssh rescue
Führen Sie die folgenden Schritte für die Rettungsinstanz aus:
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"
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
Verschieben Sie das Skript
rc.local
in das Root-Volume des neuen Laufwerks und legen Sie die Berechtigungen fest. Schieben Sie alle vorhandenenrc.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"
Heben Sie die Bereitstellung des Root-Volumes auf dem neuen Laufwerk auf.
sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \ "$NEW_DISK_MOUNT_POINT"
Beenden Sie die SSH-Sitzung auf der Rettungsinstanz.
Trennen Sie das neue Laufwerk von der Rettungsinstanz.
gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
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:
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf die problematische Instanz und dann auf Ähnliche erstellen.
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.
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 Skriptrc.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.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
Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
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.
Beenden Sie die problematische Instanz und erstellen Sie eine Kopie des Bootlaufwerks.
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.
Beenden Sie die problematische Instanz.
gcloud compute instances stop "$PROB_INSTANCE_NAME"
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')"
Erstellen Sie einen Snapshot des Bootlaufwerks.
export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot" gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \ --snapshot-names "$DISK_SNAPSHOT"
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"
Löschen Sie den Snapshot:
gcloud compute snapshots delete "$DISK_SNAPSHOT"
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"
Stellen Sie mit SSH eine Verbindung zur Instanz her:
gcloud compute ssh rescue
Führen Sie die folgenden Schritte für die Rettungsinstanz aus:
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"
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
Verschieben Sie das Skript
rc.local
in das Root-Volume des neuen Laufwerks und legen Sie die Berechtigungen fest. Schieben Sie alle vorhandenenrc.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"
Heben Sie die Bereitstellung des Root-Volumes auf dem neuen Laufwerk auf.
sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
Beenden Sie die SSH-Sitzung auf der Rettungsinstanz.
Trennen Sie das neue Laufwerk von der Rettungsinstanz:
gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
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:
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf die problematische Instanz und dann auf Ähnliche erstellen.
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.
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 Skriptrc.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.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
Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
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.
Beenden Sie die problematische Instanz und erstellen Sie eine Kopie des Bootlaufwerks.
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.
Beenden Sie die problematische Instanz.
gcloud compute instances stop "$PROB_INSTANCE_NAME"
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')"
Erstellen Sie einen Snapshot des Bootlaufwerks.
export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot" gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \ --snapshot-names "$DISK_SNAPSHOT"
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"
Löschen Sie den Snapshot:
gcloud compute snapshots delete "$DISK_SNAPSHOT"
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"
Stellen Sie mit SSH eine Verbindung zur Instanz her:
gcloud compute ssh rescue
Führen Sie die folgenden Schritte für die Rettungsinstanz aus:
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"
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
Verschieben Sie das Skript
rc.local
in das Root-Volume des neuen Laufwerks und legen Sie die Berechtigungen fest. Schieben Sie alle vorhandenenrc.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"
Heben Sie die Bereitstellung des Root-Volumes auf dem neuen Laufwerk auf.
sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
Beenden Sie die SSH-Sitzung auf der Rettungsinstanz.
Trennen Sie das neue Laufwerk von der Rettungsinstanz:
gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
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:
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf die problematische Instanz und dann auf Ähnliche erstellen.
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.
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 Skriptrc.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.Ü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
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
- Klicken Sie auf die Instanz, die Sie untersuchen möchten.
- Führen Sie einen Neustart oder eine Zurücksetzung der Instanz aus.
- Klicken Sie unter Logs auf Serieller Port 1 (Konsole).
- Suchen Sie nach der erwarteten Ausgabe gemäß der obigen Tabelle.
gcloud
- Führen Sie einen Neustart oder eine Zurücksetzung der Instanz aus.
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.
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
- Lesen Sie die Tipps zur Fehlerbehebung
- Erfahren Sie mehr über die Anwendung von Metadaten
- Informationen zu SSH-Schlüsseln