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.
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.
Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich bei Compute Engine authentifizieren. Wählen Sie dazu eine der folgenden Optionen aus:
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
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.
- Prüfen Sie, ob die Version Ihres Betriebssystems unterstützt wird.
Bestimmen Sie die Version von CentOS/RHEL/Rocky Linux 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.
- 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.
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.
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.
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"
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.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/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 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/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
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.
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.
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.
Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
- Klicken Sie auf die Instanz, die Sie untersuchen möchten.
- Starten Sie die Instanz neu oder setzen Sie sie zurück.
- Klicken Sie unter Logs auf Serieller Port 1 (Konsole).
- Suchen Sie nach der erwarteten Ausgabe gemäß der obigen Tabelle.
- Starten Sie die Instanz neu oder setzen Sie sie zurück.
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.
- Lesen Sie die Tipps zur Fehlerbehebung
- Erfahren Sie mehr über die Anwendung von Metadaten
- Informationen zu SSH-Schlüsseln
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 manuell auf VMs installieren, die Betriebssystem-Image-Versionen verwenden, die sich im GA-Lebenszyklus (General Availability) oder in der Phase des erweiterten Supportzeitraums befinden. Eine Liste der Betriebssystem-Imageversionen und ihrer Lebenszyklusphase in der 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 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/Rocky
Debian
Ubuntu
SLES
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.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.
Führen Sie diese Schritte mit Cloud Shell aus. Wenn Sie nicht Cloud Shell verwenden, installieren Sie den
jq
-Befehlszeilen-JSON-Prozessor. Mit diesem Prozessor können Sie die gcloud CLI-Ausgabe filtern.jq
ist in Cloud Shell vorinstalliert.CentOS/RHEL/Rocky
Debian
Ubuntu
Gastumgebung aktualisieren
Wenn Sie eine Meldung erhalten, dass die Gastumgebung veraltet ist, aktualisieren Sie die Pakete für Ihr Betriebssystem.
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
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/Rocky Linux
Debian
Ubuntu
SLES
Container-Optimized OS 89 und höhersystemd 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
gcloud
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/Rocky Linux
Debiansudo 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/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
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2024-12-22 (UTC).
-