建立、刪除及汰換自訂映像檔

您能建立開機磁碟的自訂映像檔,然後以這些映像檔建立新的執行個體。在您已建立永久開機磁碟並修改為某種狀態,而需要儲存該狀態以建立新的執行個體時,這是理想的做法。

或者也可以使用虛擬磁碟匯入工具,從現有系統將開機磁碟的映像檔匯入 Compute Engine,再將映像檔新增到您的自訂映像檔清單中。

事前準備

建立自訂的映像檔

這些指示說明如何在 Linux 執行個體上建立自訂的映像檔。 如需建立 Windows 映像檔的說明,請參閱建立 Windows 映像檔

或者,您也可以使用「身分與存取權管理」(IAM) 與其他專案共用映像檔

準備執行個體以建立映像檔

即使磁碟已連接執行中的 VM 執行個體,您也能從該磁碟建立映像檔。但是,如果您將執行個體置於映像檔較容易擷取的狀態,映像檔將更為可靠。請以下列程序之一,準備開機磁碟以建立映像檔:

  • 停止執行個體使它能關閉並停止將任何資料寫入永久磁碟。

  • 如果無法在建立映像檔之前停止執行個體,請將對於磁碟的寫入動作數量降至最低,並同步處理檔案系統。

    1. 暫停會將資料寫入該永久磁碟的應用程式或作業系統程序。
    2. 視需要執行適當的指令來清除磁碟中的應用程式快取資料。例如,MySQL 擁有 FLUSH 陳述式。其他應用程式可能也有類似的程序。
    3. 停止應用程式將資料寫入永久磁碟。
    4. 執行 sudo sync

在您準備好執行個體後,請建立映像檔

建立映像檔

您可從下列來源建立磁碟映像檔:

  • 永久磁碟,即使該磁碟已連接執行個體。
  • 永久磁碟的快照
  • 專案中的另一個映像檔。
  • 從另一個專案共用的映像檔。
  • Google Cloud Storage 中的已壓縮 RAW 映像檔

主控台

  1. 在 Google Cloud Platform 主控台,前往「建立映像檔」頁面。
    前往「建立映像檔」頁面
  2. 指定您要從其中建立映像檔的來源。這可以是永久磁碟、快照、另一個映像檔,或 Google Cloud Storage 中的 disk.raw 檔案。
  3. 指定映像檔的屬性。例如,可以為映像檔指定映像檔系列名稱,以便將此映像檔整理為映像檔系列的成員。
  4. 如果是從連結到執行中映像檔的磁碟建立映像檔,請勾選 [從執行中執行個體強迫建立],以確認要在執行個體執行時建立映像檔。
  5. 按一下 [建立] 以建立映像檔。

gcloud

從永久磁碟建立映像檔:

gcloud compute images create [IMAGE_NAME] \
  --source-disk [SOURCE_DISK] \
  --source-disk-zone [ZONE] \
  --family [IMAGE_FAMILY] \
  [--force]

其中:

  • [IMAGE_NAME] 是新映像檔的名稱。
  • [SOURCE_DISK] 是您要從其中建立新映像檔的磁碟。
  • [ZONE] 是磁碟所在的分區。
  • [IMAGE_FAMILY] 是選用標記,用於指定此映像檔屬於哪一個映像檔系列
  • [--force] 是選用標記,讓您從執行中的執行個體建立映像檔。根據預設,您無法從執行中的執行個體建立映像檔。唯有您確認要在執行個體執行時建立映像檔,才指定此標記。

從另一個映像檔建立映像檔:

gcloud compute images create [IMAGE_NAME] \
  --source-image [SOURCE_IMAGE] \
  --source-image-project [IMAGE_PROJECT] \
  --family [IMAGE_FAMILY]

其中:

  • [IMAGE_NAME] 是新映像檔的名稱。
  • [SOURCE_IMAGE] 是您要從其中建立新映像檔的映像檔。
  • [IMAGE_PROJECT] 是選用參數,用於指定來源映像檔位於哪一個專案中。如果您要從另一個專案複製映像檔,請使用這個參數。
  • [IMAGE_FAMILY] 是選用標記,用於指定此新的映像檔屬於哪一個映像檔系列

從快照建立映像檔:

gcloud compute images create [IMAGE_NAME] \
  --source-snapshot [SOURCE_SNAPSHOT]

其中:

  • [IMAGE_NAME] 是新映像檔的名稱。
  • [SOURCE_SNAPSHOT] 是要從中建立新映像檔的快照。

API

images().insert 方法提出 POST 要求,要求主體中的 URL 會指向您要從其中建立映像檔的來源物件。以您自己的專案 ID 與資源名稱,將 URL 指定到資源。

從永久磁碟建立映像檔:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
  "name": "[IMAGE_NAME]",
  "sourceDisk": "/zones/[ZONE]/disks/[SOURCE_DISK]",
  "forceCreate": "[FORCE_CREATE]"
}

其中:

  • [SOURCE_DISK] 是您要從其中建立映像檔的磁碟。
  • [ZONE] 是來源磁碟所在的分區。
  • [PROJECT_ID] 是映像檔所屬的專案。
  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [ZONE] 是磁碟所屬的分區。
  • [FORCE_CREATE] 是選用標記,讓您從執行中的執行個體建立映像檔。唯有您確認要從執行中的執行個體建立映像檔,才指定 TRUE。如果未指定此參數,預設值則是 FALSE

從另一個映像檔建立映像檔:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
  "name": "[IMAGE_NAME]",
  "sourceImage": "/global/images/[SOURCE_IMAGE]"
}

其中:

  • [PROJECT_ID] 是映像檔所屬的專案。
  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [SOURCE_IMAGE] 是您要從其中建立映像檔的映像檔。

從快照建立映像檔:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
  "name": "[IMAGE_NAME]",
  "sourceSnapshot": "/[SOURCE_PROJECT_ID]/global/snapshots/[SOURCE_SNAPSHOT]"
}

其中:

  • [PROJECT_ID] 是映像檔所屬的專案。
  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [SOURCE_SNAPSHOT] 是您要從其中建立映像檔的快照。
  • [SOURCE_PROJECT_ID] 是選用參數,用於指定快照位於哪一個專案中。您必須擁有權限才能存取該專案內的快照資源。

如需更多新增映像檔的資訊,請參閱映像檔參考資料

汰換映像檔

Google Compute Engine 可讓您在映像檔上設定汰換狀態,以汰換您擁有的自訂映像檔。每一個汰換狀態會造成伺服器的不同反應,協助您以便利管理的方式,將使用者轉換離開不支援的映像檔。

若要設定映像檔的汰換狀態,請執行下列指令:

gcloud compute images deprecate [IMAGE] --state [STATE] --replacement [REPLACEMENT]

其中,[IMAGE] 是要汰換的映像檔之名稱。

汰換狀態可以是下列任何一種:

  • DEPRECATED - 此映像檔被視為已汰換。使用者嘗試使用此映像檔時,要求會成功,但是 Google Compute Engine 也會傳回警告。仍然允許對於此映像檔的新連結。即使它是系列中最新的映像檔,映像檔系列也不再指向此映像檔。
  • OBSOLETE - 此映像檔已過時,新的使用者無法使用它。如果使用者嘗試在他們的要求中使用此映像檔,Google Compute Engine 會傳回錯誤。仍然允許對於此映像檔的現有連結。
  • DELETED - 此映像檔已刪除,使用者無法使用它。如果使用者嘗試使用此映像檔,Google Compute Engine 會傳回錯誤。

刪除映像檔

您只能刪除您或對於專案擁有存取權限的人士已新增的自訂映像檔。若要刪除映像檔,請執行下列指令:

gcloud compute images delete [IMAGE]

其中 [IMAGE] 是要刪除的映像檔之名稱。

在映像檔系列中設定映像檔版本

以映像檔系列簡化映像檔版本的設定工作。新增映像檔到映像檔系列中,將它設定為系列中最新的映像檔版本。如果您決定必須將映像檔系列復原為前一個映像檔版本,請汰換系列中最新的映像檔。

例如,建立名為 image-v1 的映像檔,做為映像檔系列的成員。

gcloud

gcloud compute images create image-v1 \
          --source-disk disk-1 \
          --source-disk-zone us-central1-f \
          --family my-image-family

映像檔系列指向 image-v1。新增第二個映像檔到系列:

gcloud compute images create image-v2 \
          --source-disk disk-2 \
          --source-disk-zone us-central1-f \
          --family my-image-family

API

POST 方法發出 images().insert 要求,在要求主體中指定映像檔系列。

使用映像檔系列建立映像檔

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
  "name": "image-v2",
  "sourceDisk": "/zones/us-central1-f/disks/disk-2",
  "family":"my-image-family"
}

映像檔系列指向 image-v2,因為它是您新增到映像檔系列的最新映像檔。您可執行 gcloud compute images describe-from-family 指令,查看系列指向哪一個映像檔。例如:

gcloud

gcloud compute images describe-from-family my-image-family

family: my-image-family
id: '8904691942610171306'
kind: compute#image
name: image-v2
selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/images/image-v2
sourceDisk: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/disks/disk-v2
sourceDiskId: '1677449456001963379'
sourceType: RAW
status: READY

API

images.getFromFamily 方法發出 GET 要求,在要求主體中指定映像檔系列。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/family

{
  "resourceId":"my-image-family"
}

如果您決定必須復原映像檔系列,使它不再指向 image-v2,請汰換 image-v2,系列就會再次指向 image-v1

gcloud compute images deprecate image-v2 --state DEPRECATED --replacement image-v1

請檢查以確定映像檔系列再次指向 image-v1

gcloud compute images describe-from-family my-image-family

family: my-image-family
id: '2741732787056801255'
kind: compute#image
name: image-v1
selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/images/image-v1
sourceDisk: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-f/disks/disk-v1
sourceDiskId: '1677449456001963379'
sourceType: RAW
status: READY

啟用自訂映像檔上的訪客作業系統功能

您在建立自訂映像檔時,可設定 guestOsFeatures 參數。 此參數會啟用以映像檔作為開機磁碟的 VM 執行個體之一項或更多項功能。下列功能可以使用:

  • MULTI_IP_SUBNET - 用於設定具有 /32 之外網路遮罩的介面。
  • SECURE_BOOT - 可讓您啟用 UEFI 安全啟動,這會限制啟動未簽署的軟體進行開機,或限制未簽署的驅動程式載入到 VM 執行個體上。設定此參數後,就可以在 VM 執行個體的建立期間啟用安全啟動功能。
  • UEFI_COMPATIBLE - 啟用 UEFI 啟動,這是替代的系統啟動方法。大部分的公開映像檔使用 GRUB 系統啟動載入程式做為主要的啟動方法。
  • VIRTIO_SCSI_MULTIQUEUE - 啟用本機 SSD 裝置的多佇列 SCSI 功能。本選項是 NVMe 的一項替代。
    • 對於 Linux 映像檔,您可啟用具備核心版本 3.17 和更新版本的映像檔上之 VIRTIO_SCSI_MULTIQUEUE
    • 對於 Windows 映像檔,您可啟用具備驅動程式版本 1.2.0.1621 或更新版本映像檔上的 VIRTIO_SCSI_MULTIQUEUE
  • WINDOWS - Windows Server 映像檔需要此參數。Windows server 的較新公開映像檔包括 WINDOWS 參數,以表示它是 Windows 映像檔。

請使用 gcloud 指令列工具或 API,以啟用自訂映像檔上的訪客作業系統功能。

gcloud

從現有自訂映像檔之一建立自訂映像檔,但是也要包括 --guest-os-features 標記。

gcloud compute images create [IMAGE_NAME] \
  --source-image [SOURCE_IMAGE] \
  --source-image-project [IMAGE_PROJECT] \
  --guest-os-features="[FEATURE_ID],..."

其中:

  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [SOURCE_IMAGE] 是您要從其中建立新映像檔的映像檔。
  • [IMAGE_PROJECT] 是選用參數,用於指定來源映像檔位於哪一個專案中。如果您要從另一個專案複製映像檔,請使用這個參數。
  • [FEATURE_ID] 是可用的客體 OS 功能之一的 ID。您可以透過逗號分隔清單的形式指定多個功能。

API

images().insert 方法提出 POST 要求,要求主體中的 URL 會指向您要從其中建立映像檔的來源物件。以您自己的專案 ID 與永久磁碟的分區來取代專案與分區:

從永久磁碟建立映像檔:

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
 "name": "[IMAGE_NAME]",
 "sourceImage": "projects/[IMAGE_PROJECT]/global/images/[SOURCE_IMAGE]",
 "guestOsFeatures": [
  {
   "type": "[FEATURE_ID]"
  }
 ]
}

其中:

  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [SOURCE_IMAGE] 是您要從其中建立新映像檔的映像檔。
  • [IMAGE_PROJECT] 是參數,用於指定來源映像檔位於哪一個專案中。
  • [FEATURE_ID] 是可用的客體 OS 功能之一的 ID。您可以透過逗號分隔清單的形式指定多個功能。

如需更多新增映像檔的資訊,請參閱映像檔參考資料

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件