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

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

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

事前準備

建立自訂映像檔

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

您必須使用 Cloud Identity and Access Management (Cloud IAM) 權限,才能與其他專案共用映像檔

選取映像檔儲存位置

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

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

如要查看映像檔目前的儲存位置,請使用 gcloud beta computeimages describe 指令:

gcloud beta compute images describe [IMAGE_NAME] --project [PROJECT]

⋮
storageLocations:
- us-central1

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

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

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

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

  • 如果您無法在建立映像檔之前停止執行個體,請盡量減少寫入磁碟的資料量,並且同步處理檔案系統。

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

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

建立映像檔

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

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

主控台

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

gcloud

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 要求,要求主體中的網址會指向您要建立映像檔的來源物件。用自己的專案 ID 與資源名稱,將網址指定到資源。使用這個方法的 beta 版本來指定 storageLocations 參數。

從永久磁碟建立映像檔:

POST https://compute.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://compute.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://compute.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 會將映像檔儲存在最靠近映像檔來源位置的多地區。

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

淘汰映像檔

Compute Engine 可讓您在映像檔上設定淘汰狀態,以淘汰您擁有的自訂映像檔。每一種淘汰狀態會引起不同的伺服器反應,協助您採用易管理的方法,為使用者淘汰不再支援的映像檔。您可以使用主控台、gcloud 指令或 Compute Engine API 方法來淘汰映像檔。

主控台

  1. 在 Google Cloud Platform Console,前往「Create an image」(建立映像檔) 頁面。
    前往「Create an image」(建立映像檔) 頁面
  2. 找到您要淘汰的映像檔,並勾選該映像檔左側的方塊。
  3. 按一下頁面頂端的 [Deprecate] (淘汰) 按鈕,即可淘汰您的映像檔。

gcloud

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

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

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

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

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

API

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

POST https://compute.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 Console,前往「Create an image」(建立映像檔) 頁面。
    前往「Create an image」(建立映像檔) 頁面
  2. 找到您要刪除的映像檔,並勾選該映像檔左側的方塊。
  3. 按一下頁面頂端的 [Delete] (刪除),即可刪除映像檔。

gcloud

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

gcloud compute images delete [IMAGE_NAME]

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

API

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

POST https://compute.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 Console,前往「Create an image」(建立映像檔) 頁面。
    前往「Create an image」(建立映像檔) 頁面
  2. 指定映像檔的「Name」(名稱)
  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. 如要從連結到執行中映像檔的磁碟建立映像檔,請勾選 [Force creation from running instance] (從執行中執行個體強迫建立),以確認您要在執行個體執行時建立映像檔。

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

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://compute.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://compute.googleapis.com/compute/v1/projects/my-project/global/images/image-v2
sourceDisk: https://compute.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://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images/family

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

}

如果您決定復原映像檔系列,使它不再指向 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://compute.googleapis.com/compute/v1/projects/my-project/global/images/image-v1
sourceDisk: https://compute.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 韌體啟動。
  • 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] 是其中一個可用訪客作業系統功能的 ID。您可以透過逗號分隔清單的形式指定多個功能。
  • [LOCATION] 是選用旗標,讓您指定要儲存映像檔的地區或多地區。例如,指定 us 會將映像檔儲存在 us 多地區;指定 us-central1 則會儲存在 us-central1 地區。如果未選擇位置,Compute Engine 會將映像檔儲存在最靠近映像檔來源位置的多地區。

API

images().insert 方法發出 POST 要求,要求主體中的網址會指向您要建立映像檔的來源物件。將專案和區域替換為您自己的專案 ID 和永久磁碟區域。對此要求使用 beta API 方法來查看 storageLocations 參數。

從永久磁碟建立映像檔:

POST https://compute.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] 是其中一個可用訪客作業系統功能的 ID。您可以透過逗號分隔清單的形式指定多個功能。

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

後續步驟

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

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

這個網頁
Compute Engine 說明文件