從即時快照還原磁碟

如要存取即時快照中擷取的資料,您必須還原或從即時快照建立新磁碟。

本頁說明如何從即時快照建立磁碟。建立磁碟後,您可以將磁碟連接至虛擬機器 (VM) 來使用。

事前準備

  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,可以選取下列任一選項,向 Compute Engine 進行驗證:

    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

    1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init

      若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    2. Set a default region and zone.

    REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init

      若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

必要角色和權限

如要取得從即時快照建立磁碟所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備從即時快照建立磁碟所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要透過即時快照建立磁碟,您必須具備下列權限:

  • 如何建立磁碟:
    • 新磁碟目的地專案的 compute.disks.create
    • 來源即時快照的 compute.instantSnapshots.useReadOnly 權限
  • 如要從即時快照一致性群組建立磁碟,請按照下列步驟操作:
    • compute.disks.create 在目標專案中
    • compute.instantSnapshots.useReadOnly 來源即時快照
    • compute.resourcePolicies.useReadOnly 來源即時快照
    • 即時快照來源一致性群組的 compute.instantSnapshotGroups.useReadOnly

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

限制

即時快照和即時快照一致性群組有以下限制:

  • 從即時快照建立磁碟時,新磁碟一律會採用與快照來源磁碟相同的類型、儲存位置和加密方式。

  • 您無法直接透過即時快照建立 VM。您必須先從即時快照建立磁碟,然後使用新磁碟建立 VM。

  • 如果即時快照的來源磁碟使用客戶自行管理的加密金鑰或客戶提供的加密金鑰,則從即時快照建立新磁碟時,必須提供相同的加密金鑰。

    請參考以下範例。假設您有一個磁碟 DISK-1,並使用客戶提供的加密金鑰 (CSEK) 進行加密 KEY-1。您也從 DISK-1 建立了即時快照 IS-1。 如要從 IS-1 建立新磁碟,您必須在新磁碟建立時提供相同的金鑰 KEY-1

    如果磁碟是以客戶自行管理的加密金鑰 (CMEK) 加密,則只有在使用 REST 或 gcloud CLI 建立磁碟時,才需要提供金鑰。如果您使用Google Cloud 控制台,則不需指定加密金鑰。

  • 從即時快照一致性群組建立新磁碟時,新磁碟的位置與即時快照的來源一致性群組相同 (預覽)。

透過即時快照建立磁碟

即時快照會採用與來源磁碟相同的加密方式。 從即時快照建立磁碟的步驟,取決於即時快照來源磁碟的加密方式。

每個來源磁碟都會透過下列其中一種方法加密:

  • Google-owned and Google-managed encryption keys。這是預設設定。
  • 由客戶管理的加密金鑰 (CMEK)
  • 客戶提供的加密金鑰 (CSEK)。

如要瞭解特定磁碟的加密方式,請參閱查看磁碟加密資訊

透過以預設加密方式加密的即時快照建立磁碟

您可以使用 gcloud CLI、 Google Cloud 控制台或 REST,從即時快照建立磁碟。

控制台

  1. 找出要還原的即時快照:

    1. 前往 Google Cloud 控制台的「快照」頁面。

      前往「快照」

    2. 按一下「即時快照」分頁標籤。

    3. 在「Name」(名稱) 欄中,按一下要還原的即時快照名稱。

  2. 按一下 [Create Disk] (建立磁碟)

  3. 在「Name」(名稱) 欄位中,輸入磁碟的新名稱。

  4. 選用:在「說明」欄位中輸入其他詳細資料。

  5. 確認「磁碟來源類型」為「即時快照」

  6. 在「來源即時快照」清單中,選擇即時快照。

  7. 選用:設定磁碟的其他自訂項目。

    • 輸入大小:在「Size」(大小) 欄位中,指定磁碟大小 (以 GB 為單位)。大小必須等於或大於快照來源磁碟的大小。
    • 排定備份時間:如要讓 Compute Engine 依排程建立這個新磁碟的標準快照,請選取「啟用快照排程」核取方塊,然後選擇快照排程。否則請取消勾選核取方塊。
  8. 選用:如要整理專案,請新增一或多個標籤

  9. 如要建立磁碟,請按一下「建立」

gcloud

使用 gcloud compute disks create 指令。您指定的引數取決於要建立區域或地區磁碟。

建立可用區磁碟

使用 --zone 旗標指定可用區:

gcloud compute disks create DISK_NAME --zone=ZONE \
  --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • ZONE:新磁碟的可用區,例如 europe-west1-a
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。

建立區域磁碟

使用 --region 指定區域,並使用 --replica-zones 指定新磁碟的目標複製區域。

gcloud compute disks create DISK_NAME \
 --region=REGION \
 --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME \
 --replica-zones=ZONE1,ZONE2

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • REGION:區域磁碟所在的區域,例如:europe-west1
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • ZONE1,ZONE2:兩個磁碟副本所在的區域,例如:europe-west1-b,europe-west1-c

REST

如要從即時快照建立區域或地區磁碟,請使用 disks.insert 方法。新磁碟的類型必須與即時快照來源磁碟的類型相同。舉例來說,您無法從區域磁碟的快照建立區域磁碟。

建立可用區磁碟

發出 POST 要求,並指定來源即時快照。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/SOURCE_ZONE/disks/insert
{
"name": "NEW_DISK_NAME",
"sourceInstantSnapshot": "projects/PROJECT/zones/SOURCE_ZONE/instantSnapshots/SOURCE_INSTANT_SNAPSHOT_NAME"
}

更改下列內容:

  • PROJECT:要在其中建立新磁碟的專案。
  • SOURCE_ZONE:即時快照所在的區域,例如 us-central1-a。磁碟會在這個可用區中建立。
  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。

建立區域磁碟

發出 POST 要求,指定來源即時快照和磁碟應複製到的區域。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/region/SOURCE_REGION/disks/insert

{
"name": "NEW_DISK_NAME",
"sourceInstantSnapshot": "projects/PROJECT/regions/SOURCE_REGION/instantSnapshots/SOURCE_INSTANT_SNAPSHOT_NAME",
"replicaZones": [
  "projects/PROJECT/zones/ZONE1",
  "projects/PROJECT/zones/ZONE2"
]
}

更改下列內容:

  • PROJECT:要在其中建立新磁碟的專案。
  • SOURCE_REGION:即時快照所在的區域。 磁碟是在這個區域中建立。
  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • ZONE1,ZONE2:兩個磁碟副本所在的區域,例如 europe-west1-beurope-west1-c

API 要求回應

如果 POST 要求成功,回應主體會是物件,您可以輪詢該物件,取得磁碟建立作業的狀態。詳情請參閱「處理 API 回應」。

透過以 CMEK 或 CSEK 加密的即時快照建立磁碟

控制台

如果即時快照使用 Google 預設或 CMEK 加密,當您從即時快照建立磁碟時, Google Cloud 控制台會自動提供加密金鑰。否則,如果即時快照經過 CSEK 加密,您必須提供加密金鑰才能建立磁碟。

請按照「Google 代管的加密」一節中的步驟操作,並按照下列操作說明指定加密金鑰:

  1. 在「解密」部分,於「加密金鑰」欄位中輸入加密金鑰。
  2. 如果金鑰已使用公開 RSA 金鑰包裝,請選取「經過包裝的金鑰」

gcloud

使用 gcloud compute disks create 指令。

如果來源磁碟經過 CMEK 加密,請使用 --kms-key 參數提供金鑰名稱。

如果來源磁碟經過 CSEK 加密,請使用 --csek-key-file 參數指定來源磁碟的加密金鑰。

CMEK

如要從 CMEK 加密即時快照建立區域磁碟,請使用下列指令:

     gcloud compute disks create NEW_DISK_NAME \
       --zone=SOURCE_ZONE \
       --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME \
       --kms-key=projects/KMS_PROJECT_NAME/locations/KEYRING_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

更改下列內容:

  • NEW_DISK_NAME:新磁碟的名稱。
  • SOURCE_ZONE:即時快照的儲存區域,例如 europe-west1-a
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • KMS_PROJECT_NAME:包含金鑰的專案。
  • KEYRING_LOCATION:金鑰所屬金鑰環的位置。 如果金鑰環是全域,請指定 global。否則,請指定金鑰環所在的區域名稱,例如 us-west1
  • KEY_RING_NAME:包含金鑰的金鑰環名稱,例如 key-ring-1
  • KEY_NAME:用於加密磁碟的金鑰名稱。

CSEK

如要從 CSEK 加密的即時快照建立區域磁碟,請使用下列指令:

     gcloud compute disks create NEW_DISK_NAME \
       --zone=SOURCE_ZONE \
       --source-instant-snapshot=SOURCE_INSTANT_SNAPSHOT_NAME \
       --csek-key-file=PATH_TO_CSEK_JSON_FILE
 

更改下列內容:

  • NEW_DISK_NAME:新磁碟的名稱。
  • SOURCE_ZONE:即時快照的儲存區域,例如 europe-west1-a
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • CSEK_JSON_FILE:包含金鑰的 JSON 檔案路徑。請參閱 CSEK 檔案格式範例

如要建立地區磁碟,請將上述範例中的 --zone 旗標替換為下列旗標:

  • --region:新磁碟的區域
  • --replica-zones:該地區中這兩個磁碟副本所在的區域。

REST

如要從以 CMEK 或 CSEK 加密的即時快照建立區域或地區磁碟,請使用「Google 管理的加密」一節中列出的屬性,向 disks.insert 方法提出 POST 要求。

此外,請在 diskEncryptionKey 欄位中提供來源磁碟的加密金鑰。diskEncryptionKey 欄位的屬性取決於磁碟是否經過 CMEK 或 CSEK 加密。

下列範例說明如何為每種加密類型建立新的區域磁碟。

CMEK

在要求主體中,使用 diskEncryptionKey.kmsKeyName 屬性指定金鑰名稱:

{
"name": "NEW_DISK_NAME",
"sourceInstantSnapshot": "projects/PROJECT/zones/SOURCE_ZONE/instantSnapshots/SOURCE_INSTANT_SNAPSHOT_NAME",
"diskEncryptionKey": {
      "kmsKeyName": "projects/KMS_PROJECT/locations/LOCATION/keyRings/KEYRING_LOCATION/cryptoKeys/KEY_NAME"
  }
}

更改下列內容:

  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • PROJECT:要在其中建立新磁碟的專案。
  • SOURCE_ZONE:即時快照所在的區域,例如 us-central1-a。磁碟會在這個可用區中建立。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • KMS_PROJECT:包含金鑰的專案。
  • LOCATION:金鑰所屬金鑰環的位置。 如果金鑰環是全域,請指定 global。否則,請指定金鑰環所在的區域名稱,例如 us-west1
  • KEY_RING:包含金鑰的金鑰環名稱,例如 key-ring-1
  • KEY:用於加密磁碟的金鑰名稱。

CSEK

要求主體取決於用於加密即時快照的 CSEK 是否經過 RSA 加密。

如要使用原始 (非 RSA 加密) 金鑰,請在要求主體的 diskEncryptionKey.rawKey 屬性中指定金鑰:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/SOURCE_ZONE/disks/insert
{
  "name": "NEW_DISK_NAME",
  "sourceInstantSnapshot": "projects/PROJECT/zones/SOURCE_ZONE/instantSnapshots/INSTANT_SNAPSHOT_NAME,
  "diskEncryptionKey": {
      "rawKey": "RAW_ENCRYPTION_KEY"
  }
}

將下列項目替換為對應的值:

  • PROJECT:要在其中建立新磁碟的專案。
  • SOURCE_ZONE:即時快照所在的區域,例如 us-central1-a。磁碟會在這個可用區中建立。
  • NEW_DISK_NAME:新磁碟的專屬名稱。
  • SOURCE_INSTANT_SNAPSHOT_NAME:來源即時快照的名稱。
  • RAW_ENCRYPTION_KEY:用於加密即時快照及其來源磁碟的金鑰,例如 SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=

如要使用 RSA 加密金鑰,請按照下列方式修改上述範例:

  • disks.insert 方法發出 POST 要求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/insert
    

  • 在要求主體的 diskEncryptionKey.rsaEncryptedKey 屬性中指定金鑰:

    "diskEncryptionKey": {
     "rsaEncryptedKey": "RSA_ENCRYPTED_KEY"
    }
    

RSA_ENCRYPTED_KEY 替換為加密金鑰。

API 要求回應

如果 POST 要求成功,回應主體會是物件,您可以輪詢該物件,取得磁碟建立作業的狀態。詳情請參閱「處理 API 回應」。

從即時快照一致性群組建立磁碟

如果您使用一致性群組的即時快照備份磁碟一致性群組,可以從快照群組建立新磁碟。建立新磁碟後,您可以選擇將磁碟新增至一致性群組。

gcloud

如要從即時快照一致性群組建立新磁碟,請使用 gcloud beta compute disks bulk create 指令。

  • 如要從即時快照一致性群組建立區域磁碟,請按照下列步驟操作:

    gcloud beta compute disks bulk create \
    --zone=ZONE \
    --source-instant-snapshot-group=SOURCE_INSTANT_SNAPSHOT_GROUP \
    --source-instant-snapshot-group-zone=SOURCE_ZONE
    
    

    更改下列內容:

    • ZONE:新磁碟所在的區域。
    • INSTANT_SNAPSHOT_GROUP_NAME:要還原的快照一致性群組名稱。
    • SOURCE_ZONE:來源快照一致性群組所在的可用區。
  • 如要從即時快照一致性群組建立地區磁碟,請按照下列步驟操作:

    gcloud beta compute disks bulk create \
    --region=REGION \
    --source-instant-snapshot-group=SOURCE_INSTANT_SNAPSHOT_GROUP \
    --source-instant-snapshot-group-region=SOURCE_REGION
    
    

    更改下列內容:

    • REGION:新磁碟所在的區域。
    • INSTANT_SNAPSHOT_GROUP_NAME:要還原的快照一致性群組名稱。
    • SOURCE_REGION:來源快照一致性群組所在的區域。

REST

如要從即時快照一致性群組建立新磁碟,請向 disks.bulkInsert 方法提出 POST 要求。在主體中指定 sourceInstantSnapshotGroup

  • 如要從即時快照一致性群組建立區域磁碟,請按照下列步驟操作:

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/disks/bulkInsert --data-ascii
    {
    "sourceInstantSnapshotGroup": "INSTANT_SNAPSHOT_GROUP_NAME",
    }
    

    更改下列內容:

    • PROJECT_ID:您的專案 ID。
    • ZONE:新磁碟所在的區域。
    • INSTANT_SNAPSHOT_GROUP_NAME:要還原的快照一致性群組名稱。
  • 如要從即時快照一致性群組建立地區磁碟,請按照下列步驟操作:

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/bulkInsert --data-ascii
    {
    "sourceSnapshotGroup": "INSTANT_SNAPSHOT_GROUP_NAME",
    }
    

    更改下列內容:

    • PROJECT_ID:您的專案 ID。
    • REGION:新磁碟所在的區域。
    • INSTANT_SNAPSHOT_GROUP_NAME:要還原的快照一致性群組名稱。

選用步驟:如要將新建立的磁碟加入一致性群組,請按照「將磁碟加入一致性群組」一文中的步驟操作。