本頁說明如何為在 Compute Engine 上執行的 VM 執行個體手動安裝訪客環境。
在大多數情況下,如果您使用的是透過 Google 提供的公開映像檔建立的 VM 執行個體,則無須手動安裝訪客環境。
手動安裝訪客環境之前,請先進行驗證訪客環境程序,檢查您的執行個體上是否正在執行訪客環境。如果執行個體上有可用的訪客環境,但該訪客環境已過時,請更新訪客環境。
如果沒有可用的訪客環境,請參閱手動安裝訪客環境的時機一文,判斷您是否必須手動安裝訪客環境。
事前準備
-
如要使用本指南中的
- 您可以安裝本機工具或使用 Cloud Shell。
- 安裝本機工具:
- 安裝
gcloud
指令列工具。 - 安裝可用於篩選
gcloud
輸出內容的 jq 指令列 JSON 處理器。
- 安裝
- 使用 Cloud Shell 並預先安裝
gcloud
和jq
:
- 安裝本機工具:
- 設定預設屬性。
gcloud config set compute/zone [ZONE]
gcloud config set compute/region [REGION]
gcloud config set project [PROJECT]
gcloud
指令列範例,請完成下列事項:
目錄
作業系統支援
下列作業系統支援手動安裝訪客環境:
- Ubuntu 14.04 以上版本
- CentOS 6 與 7
- Red Hat Enterprise Linux (RHEL) 6 和 7
- Debian 9
- Windows Server 2019
- Windows Server 1809 和 1803
- Windows Server 1709
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2008 R2
- Windows Server 上的 SQL Server
- Windows 自備授權(Beta 版):
- Windows 7
- Windows 10
Google 建議您使用匯入工具來安裝訪客環境。如需安裝選項的清單,請參閱安裝方法一節。
您無法為 SUSE、CoreOS 和 Container-Optimized 作業系統手動安裝訪客環境。如果您需要上述其中一個作業系統,建議您使用公開映像檔,因為所有公開映像檔的核心部分均已包含訪客環境。
安裝訪客環境
安裝方法
安裝訪客環境的方法有以下三種,請選擇其中一種方法:
- 使用匯入工具。如要瞭解如何使用匯入工具,請參閱將映像檔設定為可開機一節。
- 使用安全殼層或遠端桌面協定連線至您的執行個體,然後就地安裝訪客環境
- 複製您的開機磁碟,然後使用開機指令碼安裝訪客環境
就地安裝訪客環境
如果您能以安全殼層連線至目標執行個體,請採用此方法安裝訪客環境。如果無法連線至執行個體來安裝訪客環境,請複製其開機磁碟並使用開機指令碼安裝訪客環境。
如果您可以使用安全殼層密碼式驗證來連線,則這項程序對匯入的映像檔來說很實用。如果您至少有一個使用者帳戶具備可運作的金鑰式安全殼層,這項程序也可以用於重新安裝訪客環境。
CentOS/RHEL
- 確認您的作業系統版本受支援。
判斷 CentOS/RHEL 版本,並建立原始碼存放區檔案
/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
更新套件清單:
sudo yum makecache sudo yum updateinfo
安裝訪客環境套件:
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
重新啟動執行個體並檢查該執行個體的主控台記錄,確定訪客環境在開始備份時會載入。
確認您可以使用安全殼層連線至執行個體。
Debian
- 確認您的作業系統版本受支援。
安裝公開存放區 GPG 金鑰:
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
判斷 Debian 發行版名稱,並建立原始碼清單檔案
/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
更新套件清單:
sudo apt-get update
安裝訪客環境套件:
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
重新啟動執行個體並檢查該執行個體的主控台記錄,確定訪客環境在開始備份時會載入。
確認您可以使用安全殼層連線至執行個體。
Ubuntu
確認您的作業系統版本受支援。
啟用 Universe 存放區。 Canonical 會將其訪客環境套件發布至 Universe 存放區。
sudo apt-add-repository universe
更新套件清單:
sudo apt-get update
安裝訪客環境套件:
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
重新啟動執行個體並檢查該執行個體的主控台記錄,確定訪客環境在開始備份時會載入。
確認您可以使用安全殼層連線至執行個體。
Windows
在開始之前,請確認您的作業系統版本受支援。
如要安裝 Windows 訪客環境,請在已啟用進階權限的 PowerShell 3.0 以上版本提示字元中執行下列指令。以下操作說明中的 Invoke-WebRequest
指令需要 3.0 以上的 PowerShell 版本。
下載並安裝
GooGet
。[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"
在安裝期間,
GooGet
會將內容新增至系統環境。安裝完成後,請啟動新的 PowerShell 主控台或提供googet.exe
檔案的完整路徑 (C:\ProgramData\GooGet\googet.exe)。開啟新的主控台並新增
google-compute-engine-stable
存放區。googet addrepo google-compute-engine-stable https://packages.cloud.google.com/yuck/repos/google-compute-engine-stable
安裝核心 Windows 訪客環境套件。
googet -noconfirm install google-compute-engine-windows \ google-compute-engine-sysprep google-compute-engine-metadata-scripts \ google-compute-engine-vss
安裝選用的 Windows 訪客環境套件。
googet -noconfirm install google-compute-engine-auto-updater
使用
googet
指令。如要查看可用的套件,請執行
googet available
指令。如要查看已安裝的套件,請執行
googet installed
指令。如要更新至最新版套件,請執行
googet update
指令。如要查看其他指令,請執行
googet help
。
複製開機磁碟並使用開機指令碼
如果您無法連線至執行個體以手動安裝訪客環境,請改用這個程序安裝,這個程序包含可在 GCP Console 和 Cloud Shell 中完成的步驟。
這個方法所提供的程序僅適用於 Linux 發行版。如果是 Windows,請使用其他兩種安裝方法。
請使用 Cloud Shell 來執行此程序:
CentOS/RHEL
- 確認您的作業系統版本受支援。
- 安裝公開存放區 GPG 金鑰:
建立新執行個體以做為救援執行個體。將此執行個體命名為 rescue。此救援執行個體執行的 Linux OS 不需要和有問題的執行個體相同。此範例在救援執行個體上使用的是 Debian 9。
停止有問題的執行個體,並建立該執行個體開機磁碟的副本。
為有問題的執行個體設定變數名稱,以便在後續步驟中參照該執行個體。
export PROB_INSTANCE_NAME=instance-name
其中「instance-name」是有問題的執行個體名稱。
停止有問題的執行個體。
gcloud compute instances stop "$PROB_INSTANCE_NAME"
取得問題執行個體的開機磁碟名稱。
export PROB_INSTANCE_DISK="$(gcloud compute instances describe \ "$PROB_INSTANCE_NAME" --format='json' | jq -r '.disks[] | \ select(.boot == true) | .source')"
建立開機磁碟的快照。
export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot" gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \ --snapshot-names "$DISK_SNAPSHOT"
使用快照建立新磁碟。
export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk" gcloud compute disks create "$NEW_DISK" \ --source-snapshot="$DISK_SNAPSHOT"
刪除快照:
gcloud compute snapshots delete "$DISK_SNAPSHOT"
將新磁碟連接至救援執行個體,並掛接救援執行個體的根磁碟區。由於這個程序只連接一個額外磁碟,因此新磁碟的裝置 ID 為 /dev/sdb。根據預設,CentOS/RHEL 會使用磁碟的第一個磁碟區做為根磁碟區,因此磁碟區 ID 應為 /dev/sdb1。如為自訂情況,請使用
lsblk
判定磁碟區 ID。gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
-
gcloud compute ssh rescue
在救援執行個體上執行下列步驟。
- 掛接新磁碟的根磁碟區。
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
- 建立
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
將
rc.local
指令碼移至新磁碟的根磁碟區並設定權限,然後將任何現有的rc.local
指令碼移至旁邊。這些指令碼在執行完畢時會遭暫時指令碼取代。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"
卸載新磁碟的根磁碟區。
sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir \ "$NEW_DISK_MOUNT_POINT"
結束對救援執行個體的安全殼層工作階段。
從救援執行個體卸離新磁碟。
gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
建立新執行個體以做為替代執行個體。建立替代執行個體後,請將新磁碟指定為開機磁碟。您可以使用 GCP Console 建立替代執行個體:
- 前往「VM instances」(VM 執行個體) 頁面。
- 點選問題執行個體,然後按一下 [複製]。
- 指定替代執行個體的名稱。在「Boot disk」(開機磁碟) 區段,點選 [Change] (變更),然後按一下 [Existing Disks](現有磁碟) 。選取新磁碟。
- 按一下 [Create] (建立)。替代執行個體在建立完成後會自動啟動。
當替代執行個體啟動時,暫時
rc.local
指令碼會執行並安裝訪客環境。如要查看這個指令碼的進度,請檢查主控台記錄中暫時rc.local
指令碼產生的記錄行。如要查看記錄,請執行下列指令:gcloud compute instances get-serial-port-output replacement-instance-name
其中「replacement-instance-name」是您為替代執行個體指派的名稱。
當暫時
rc.local
指令碼完成時,替代執行個體也會自動重新啟動。在第二次重新啟動期間,您可以檢查主控台記錄,確保訪客環境可順利載入。確認您可以使用安全殼層連線至執行個體。
Debian
- 確認您的作業系統版本受支援
建立新執行個體以做為救援執行個體。將此執行個體命名為 rescue。此救援執行個體執行的 Linux OS 不需要和有問題的執行個體相同。此範例在救援執行個體上使用的是 Debian 9。
停止有問題的執行個體,並建立該執行個體開機磁碟的副本。
為有問題的執行個體設定變數名稱,以便在後續步驟中參照該執行個體。
export PROB_INSTANCE_NAME=instance-name
其中「instance-name」是有問題的執行個體名稱。
停止有問題的執行個體。
gcloud compute instances stop "$PROB_INSTANCE_NAME"
取得問題執行個體的開機磁碟名稱。
export PROB_INSTANCE_DISK="$(gcloud compute instances describe \ "$PROB_INSTANCE_NAME" --format='json' | jq -r '.disks[] | \ select(.boot == true) | .source')"
建立開機磁碟的快照。
export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot" gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \ --snapshot-names "$DISK_SNAPSHOT"
使用快照建立新磁碟。
export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk" gcloud compute disks create "$NEW_DISK" \ --source-snapshot="$DISK_SNAPSHOT"
刪除快照:
gcloud compute snapshots delete "$DISK_SNAPSHOT"
將新磁碟連接至救援執行個體,並掛接救援執行個體的根磁碟區。由於這個程序只連接一個額外磁碟,因此新磁碟的裝置 ID 為 /dev/sdb。根據預設,Debian 會使用磁碟的第一個磁碟區做為根磁碟區,因此磁碟區 ID 應為 /dev/sdb1。如為自訂情況,請使用
lsblk
判定磁碟區 ID。gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
-
gcloud compute ssh rescue
在救援執行個體上執行下列步驟。
掛接新磁碟的根磁碟區。
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"
建立
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
將
rc.local
指令碼移至新磁碟的根磁碟區並設定權限,然後將任何現有的rc.local
指令碼移至旁邊。這些指令碼在執行完畢時會遭暫時指令碼取代。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"
卸載新磁碟的根磁碟區。
sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
結束對救援執行個體的安全殼層工作階段。
從救援執行個體卸離新磁碟。
gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
建立新執行個體以做為替代執行個體。建立替代執行個體後,請將新磁碟指定為開機磁碟。您可以使用 GCP Console 建立替代執行個體:
- 前往「VM instances」(VM 執行個體) 頁面。
- 點選問題執行個體,然後按一下 [複製]。
- 指定替代執行個體的名稱。在「Boot disk」(開機磁碟) 區段,點選 [Change] (變更),然後按一下 [Existing Disks](現有磁碟) 。選取新磁碟。
- 按一下 [Create] (建立)。替代執行個體在建立完成後會自動啟動。
當替代執行個體啟動時,暫時
rc.local
指令碼會執行並安裝訪客環境。如要查看這個指令碼的進度,請檢查主控台記錄中暫時rc.local
指令碼產生的記錄行。如要查看記錄,請執行下列指令:gcloud compute instances get-serial-port-output replacement-instance-name
其中「replacement-instance-name」是您為替代執行個體指派的名稱。
當暫時
rc.local
指令碼完成時,替代執行個體也會自動重新啟動。在第二次重新啟動期間,您可以檢查主控台記錄,確保訪客環境可順利載入。確認您可以使用安全殼層連線至執行個體。
Ubuntu
- 確認您的作業系統版本受支援
- 安裝公開存放區 GPG 金鑰:
建立新執行個體以做為救援執行個體。將此執行個體命名為 rescue。此救援執行個體執行的 Linux OS 不需要和有問題的執行個體相同。此範例在救援執行個體上使用的是 Debian 9。
停止有問題的執行個體,並建立該執行個體開機磁碟的副本。
為有問題的執行個體設定變數名稱,以便在後續步驟中參照該執行個體。
export PROB_INSTANCE_NAME=instance-name
其中「instance-name」是有問題的執行個體名稱。
停止有問題的執行個體。
gcloud compute instances stop "$PROB_INSTANCE_NAME"
取得問題執行個體的開機磁碟名稱。
export PROB_INSTANCE_DISK="$(gcloud compute instances describe \ "$PROB_INSTANCE_NAME" --format='json' | jq -r '.disks[] | \ select(.boot == true) | .source')"
建立開機磁碟的快照。
export DISK_SNAPSHOT="${PROB_INSTANCE_NAME}-snapshot" gcloud compute disks snapshot "$PROB_INSTANCE_DISK" \ --snapshot-names "$DISK_SNAPSHOT"
使用快照建立新磁碟。
export NEW_DISK="${PROB_INSTANCE_NAME}-new-disk" gcloud compute disks create "$NEW_DISK" \ --source-snapshot="$DISK_SNAPSHOT"
刪除快照:
gcloud compute snapshots delete "$DISK_SNAPSHOT"
將新磁碟連接至救援執行個體,並掛接救援執行個體的根磁碟區。由於這個程序只連接一個額外磁碟,因此新磁碟的裝置 ID 為 /dev/sdb。根據預設,Ubuntu 會將自己的根磁碟區標示為 1,因此磁碟區 ID 應為 /dev/sdb1。如為自訂情況,請使用
lsblk
判定磁碟區 ID。gcloud compute instances attach-disk rescue --disk "$NEW_DISK"
-
gcloud compute ssh rescue
在救援執行個體上執行下列步驟。
掛接新磁碟的根磁碟區。
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"
建立
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
將
rc.local
指令碼移至新磁碟的根磁碟區並設定權限,然後將任何現有的rc.local
指令碼移至旁邊。這些指令碼在執行完畢時會遭暫時指令碼取代。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"
卸載新磁碟的根磁碟區。
sudo umount "$NEW_DISK_MOUNT_POINT" && sudo rmdir "$NEW_DISK_MOUNT_POINT"
結束對救援執行個體的安全殼層工作階段。
從救援執行個體卸離新磁碟。
gcloud compute instances detach-disk rescue --disk "$NEW_DISK"
建立新執行個體以做為替代執行個體。建立替代執行個體後,請將新磁碟指定為開機磁碟。您可以使用 GCP Console 建立替代執行個體:
- 前往「VM instances」(VM 執行個體) 頁面。
- 點選問題執行個體,然後按一下 [複製]。
- 指定替代執行個體的名稱。在「Boot disk」(開機磁碟) 區段,點選 [Change] (變更),然後按一下 [Existing Disks](現有磁碟) 。選取新磁碟。
- 按一下 [Create] (建立)。替代執行個體在建立完成後會自動啟動。
當替代執行個體啟動時,暫時
rc.local
指令碼會執行並安裝訪客環境。如要查看這個指令碼的進度,請檢查主控台記錄中暫時rc.local
指令碼產生的記錄行。如要查看記錄,請執行下列指令:gcloud compute instances get-serial-port-output replacement-instance-name
其中「replacement-instance-name」是您為替代執行個體指派的名稱。
當暫時
rc.local
指令碼完成時,替代執行個體也會自動重新啟動。在第二次重新啟動期間,您可以檢查主控台記錄,確保訪客環境可順利載入。確認您可以使用安全殼層連線至執行個體。
更新訪客環境
如果您收到指出訪客環境過舊的訊息,請更新作業系統的套件。
CentOS/RHEL
如要更新 CentOS 和 RHEL 作業系統,請執行下列指令:
sudo yum makecache sudo yum install google-compute-engine google-compute-engine-oslogin python*-google-compute-engine
Debian/Ubuntu
如要更新 Debian 和 Ubuntu 作業系統,請執行下列指令:
sudo apt-get update sudo apt install google-compute-engine google-compute-engine-oslogin python*-google-compute-engine
Windows
如要更新 Windows 作業系統,請執行下列指令:
googet update
驗證訪客環境
如要判斷訪客環境是否存在,您可以檢查執行個體啟動時向主控台發送的系統記錄,或在已連線至執行個體時列出已安裝的套件。
預期的訪客環境主控台記錄
下表摘要說明如果執行個體具有運作中的訪客環境,則該執行個體在啟動時預期輸出的主控台記錄。
作業系統 | 服務管理 | 預期的輸出內容: |
---|---|---|
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 和 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 |
如要查看執行個體的主控台記錄,請執行下列步驟。
Console
- 前往「VM instances」(VM 執行個體) 頁面。
gcloud
已為訪客環境載入的服務
下表摘要說明具有可用訪客環境的執行個體上應載入的服務。列出服務的指令必須在連線至執行個體後執行,因此您必須具備相關存取權才能執行這項檢查。
作業系統 | 列出服務的指令 | 預期的輸出內容: |
---|---|---|
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 |
已為訪客環境安裝的套件
下表摘要說明具有可用訪客環境的執行個體上應安裝的套件。列出已安裝套件的指令必須在連線至執行個體後執行,因此您必須具備相關存取權才能執行這項檢查。
作業系統 | 列出套件的指令 | 預期的輸出內容: |
---|---|---|
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 |