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

您可以從來源磁碟、映像檔、快照或儲存在 Cloud Storage 中的映像檔建立自訂映像檔。您可以使用這些映像檔,建立新的 VM 執行個體。在您已建立永久開機磁碟並修改為某種狀態,而需要儲存該狀態以建立新的執行個體時,這是理想的做法。

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

事前準備

建立自訂的映像檔

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

您必須具有身分與存取權管理 (IAM) 權限,才能與其他專案共用映像檔

選取映像檔儲存位置

建立自訂映像檔時,您也可以指定映像檔的 Cloud Storage 位置,但不包括雙地區位置。藉由指定映像檔的儲存位置,您可以確保跨地區的備援功能,藉以遵循資料位置的法規並符合高可用性需求。

您可以自行選擇是否要使用儲存位置功能。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。

此功能推出前的所有現有映像檔都會保留在原來的位置。唯一的不同是您可以檢視所有映像檔的所在位置。如要移動現有映像檔,則必須在所需位置重新建立檔案。

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

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

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

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

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

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

建立映像檔

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

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

主控台

  1. 在 Google Cloud Platform 主控台,前往「建立映像檔」頁面。
    前往建立映像檔頁面
  2. 指定映像檔的名稱
  3. 指定您要從其中建立映像檔的「Source」(來源)。這可以是永久磁碟、快照、另一個映像檔,或 Google Cloud Storage 中的 disk.raw 檔案。
  4. 指定儲存映像檔的「Location」(位置)。在「Based on source disk location (default)」(根據來源磁碟位置 (預設值)) 下拉式選單中選取映像檔的儲存位置。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。
  5. 指定映像檔的屬性。例如,可以為映像檔指定映像檔系列名稱,以便將此映像檔整理為映像檔系列的成員。
  6. 按一下 [建立] 以建立映像檔。

gcloud

使用 gcloud compute beta images create 指令建立自訂映像檔。選用的 --storage-location 標記中必須要提供 beta 標記。

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

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

其中:

  • [IMAGE_NAME] 是新映像檔的名稱。
  • [SOURCE_DISK] 是您要從其中建立新映像檔的磁碟。
  • [ZONE] 是磁碟所在的分區。
  • [IMAGE_FAMILY] 是選用標記,用於指定此映像檔屬於哪一個映像檔系列
  • [LOCATION] 是選用標記,讓您指定要儲存映像檔的地區或多地區。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。
  • [--force] 是選用標記,讓您從執行中的執行個體建立映像檔。根據預設,您無法從執行中的執行個體建立映像檔。唯有您確認要在執行個體執行時建立映像檔,才指定此標記。

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

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

其中:

  • [IMAGE_NAME] 是新映像檔的名稱。
  • [SOURCE_IMAGE] 是您要從其中建立新映像檔的映像檔。
  • [IMAGE_PROJECT] 是選用參數,用於指定來源映像檔位於哪一個專案中。如果您要從另一個專案複製映像檔,請使用這個參數。
  • [IMAGE_FAMILY] 是選用標記,用於指定此新的映像檔屬於哪一個映像檔系列
  • [LOCATION] 是選用標記,讓您指定要儲存映像檔的地區或多地區。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。

從快照建立映像檔:

gcloud beta compute images create [IMAGE_NAME] \
  --source-snapshot [SOURCE_SNAPSHOT] \
  --storage-location [LOCATION]

其中:

  • [IMAGE_NAME] 是新映像檔的名稱。
  • [SOURCE_SNAPSHOT] 是要從中建立新映像檔的快照。
  • [LOCATION] 是選用標記,讓您指定要儲存映像檔的地區或多地區。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。

檢視映像檔位置

使用 gcloud beta compute images describe 指令檢視映像檔位置。須有 beta 標記才能檢視映像檔的儲存位置。

gcloud beta compute images describe [IMAGE_NAME]

其中 [IMAGE_NAME] 是您要敘述的映像檔名稱。

API

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

從永久磁碟建立映像檔:

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

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

其中:

  • [PROJECT_ID] 是映像檔所屬的專案。
  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [ZONE] 是來源磁碟所在的分區。
  • [SOURCE_DISK] 是您要從其中建立映像檔的磁碟。
  • [LOCATION] 是選用參數,用來選擇映像檔的儲存位置。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。
  • [FORCE_CREATE] 是選用標記,讓您從執行中的執行個體建立映像檔。唯有您確認要從執行中的執行個體建立映像檔,才指定 TRUE。如果未指定此參數,預設值則是 FALSE

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

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

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

其中:

  • [PROJECT_ID] 是映像檔所屬的專案。
  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [SOURCE_IMAGE] 是您要從其中建立映像檔的映像檔。
  • [LOCATION] 是選用參數,用來選擇映像檔的儲存位置。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。

從快照建立映像檔:

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

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

其中:

  • [PROJECT_ID] 是映像檔所屬的專案。
  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [SOURCE_SNAPSHOT] 是您要從其中建立映像檔的快照。
  • [SOURCE_PROJECT_ID] 是選用變數,用於指定快照位於哪一個專案中。您必須擁有權限才能存取該專案內的快照資源。
  • [LOCATION] 是選用參數,用來選擇映像檔的儲存位置。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。

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

淘汰映像檔

Google Compute Engine 可讓您在映像檔上設定淘汰狀態,淘汰您擁有的自訂映像檔。每一個淘汰會造成伺服器的不同反應,協助您以便利管理的方式,將使用者轉換離開不支援的映像檔。您可以使用主控台、gcloud 指令或 Compute Engine API 方法來完成這項操作。

主控台

  1. 在 Google Cloud Platform 主控台,前往「建立映像檔」頁面。
    前往建立映像檔頁面
  2. 針對您要淘汰的映像檔,勾選該映像檔左側的方塊。
  3. 按一下頁面頂端的 [Deprecate] (淘汰) 按鈕,即可淘汰您的映像檔。

gcloud

使用 gcloud compute images deprecate 指令設定映像檔的淘汰狀態。

gcloud compute images deprecate [IMAGE_NAME] \
    --state [STATE] \
    --replacement [REPLACEMENT]

其中,[IMAGE_NAME] 是要淘汰的映像檔名稱。

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

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

API

images().deprecate 方法發出 POST 要求,指定要淘汰的映像檔名稱。

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

{
  "deprecated": "[IMAGE_NAME]",
  "replacement": "[REPLACEMENT]"
}

其中:

  • [PROJECT_ID] 是映像檔所屬的專案。
  • [IMAGE_NAME] 是要淘汰的映像檔。
  • [REPLACEMENT] 是要替代淘汰映像檔的映像檔。

刪除映像檔

您只能刪除您或有權限存取該專案的人所新增的自訂映像檔。您可以使用主控台、gcloud 指令或 Compute Engine API 方法來完成這項操作。

主控台

  1. 在 Google Cloud Platform 主控台,前往「建立映像檔」頁面。
    前往建立映像檔頁面
  2. 針對您要刪除的映像檔,勾選該映像檔左側的方塊。
  3. 按一下頁面頂端的 [Delete] (刪除),即可刪除映像檔。

gcloud

使用 gcloud compute images delete 指令刪除映像檔。

gcloud compute images delete [IMAGE_NAME]

其中,[IMAGE_NAME] 是要刪除的映像檔名稱。

API

images().delete 方法發出 POST 要求。指定要刪除的映像檔名稱。

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

其中:

  • [PROJECT_ID] 是映像檔所屬的專案。
  • [RESOURCE_ID] 是要刪除的映像檔名稱。

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

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

您可以視需要選擇要使用主控台、具有 --storageLocation 標記的 gcloud beta compute images create 指令,或 beta images().insert API 方法來指定映像檔的儲存位置

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

主控台

  1. 在 Google Cloud Platform 主控台,前往「建立映像檔」頁面。
    前往建立映像檔頁面
  2. 指定映像檔的名稱
  3. 指定您要從其中建立映像檔的「Source」(來源)。這可以是永久磁碟、快照、另一個映像檔,或 Google Cloud Storage 中的 disk.raw 檔案。
  4. 指定儲存映像檔的「Location」(位置)。在「Based on source disk location (default)」(根據來源磁碟位置 (預設值)) 下拉式選單中選取映像檔的儲存位置。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。

  5. 指定映像檔的屬性。例如,您可以為映像檔指定映像檔系列名稱為 my-image-family,將此映像檔整理為映像檔系列的成員。

  6. 如果是從連結到執行中映像檔的磁碟建立映像檔,請勾選 [從執行中執行個體強迫建立],以確認要在執行個體執行時建立映像檔。

  7. 按一下 [建立] 以建立映像檔。

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

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

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

您可執行 gcloud compute images describe-from-family 指令,查看系列指向哪一個映像檔。

例如:

gcloud beta 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 beta 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

使用 gcloud compute images create 指令,藉以用您現有的自定映像檔建立自訂映像檔,但還要加上 --guest-os-features 標記。使用 gcloud compute beta images create 指令加入選用的 --storage-location 標記。

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

其中:

  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [SOURCE_IMAGE] 是您要從其中建立新映像檔的映像檔。
  • [IMAGE_PROJECT] 是選用參數,用於指定來源映像檔位於哪一個專案中。如果您要從另一個專案複製映像檔,請使用這個參數。
  • [FEATURE_ID] 是可用的客體 OS 功能之一的 ID。您可以透過逗號分隔清單的形式指定多個功能。
  • [LOCATION] 是選用標記,讓您指定要儲存映像檔的地區或多地區。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。

API

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

從永久磁碟建立映像檔:

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

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

其中:

  • [IMAGE_NAME] 是您要建立的新映像檔的名稱。
  • [SOURCE_IMAGE] 是您要從其中建立新映像檔的映像檔。
  • [IMAGE_PROJECT] 是參數,用於指定來源映像檔位於哪一個專案中。
  • [LOCATION] 是選用參數,用來選擇映像檔的儲存位置。例如,指定 us 將映像檔儲存在 us 多地區位置,或指定 us-central1 儲存在 us-central1 多地區位置。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源的多地區位置。
  • [FEATURE_ID] 是可用的客體 OS 功能之一的 ID。您可以透過逗號分隔清單的形式指定多個功能。

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

後續步驟

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

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

這個網頁
Compute Engine 說明文件