通过即时快照恢复磁盘


如需访问即时快照中捕获的数据,您必须通过即时快照恢复或创建新磁盘。

本页面介绍了如何通过即时快照创建磁盘。创建磁盘后,您可以通过将其挂接到虚拟机 (VM) 来使用磁盘。

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

限制

需要遵循以下限制:

  • 通过即时快照创建磁盘时,新磁盘始终与快照的来源磁盘具有相同的类型、存储位置和加密方式。

  • 您无法直接通过即时快照创建虚拟机。 您必须通过即时快照创建磁盘,然后使用新磁盘创建虚拟机。

  • 如果即时快照的来源磁盘使用客户管理的加密密钥或客户提供的加密密钥,则您必须在通过即时快照创建新磁盘时提供相同的加密密钥。

    请参考下面的示例。假设您有一个使用客户提供的加密密钥 (CSEK) KEY-1 加密的磁盘 DISK-1。您还有一个通过 DISK-1 创建的即时快照 IS-1。如需通过 IS-1 创建新磁盘,您必须在创建新磁盘时提供相同的密钥 KEY-1

    如果磁盘使用客户管理的加密密钥 (CMEK) 进行加密,则只有在使用 REST 或 gcloud CLI 创建磁盘时,您才需要提供密钥。如果您使用 Google Cloud 控制台,则无需指定加密密钥。

通过即时快照创建磁盘

即时快照采用与其来源磁盘相同的加密方式进行加密。通过即时快照创建磁盘的步骤取决于即时快照来源磁盘的加密方式。

每个来源磁盘都使用以下方法之一进行加密:

  • Google 拥有的密钥和 Google 管理的密钥。这是默认设置。
  • 客户管理的加密密钥 (CMEK)
  • 客户提供的加密密钥 (CSEK)。

如需了解特定磁盘的加密方式,请参阅查看有关磁盘加密的信息

通过使用默认加密方式加密的即时快照创建磁盘

您可以使用 gcloud CLI、Google Cloud 控制台或 REST 通过即时快照创建磁盘。

控制台

  1. 找到您要恢复的即时快照:

    1. 在 Google Cloud 控制台中,转到快照页面。

      转到“快照”

    2. 点击即时快照标签页。

    3. 名称列中,点击您要恢复的即时快照的名称。

  2. 点击创建磁盘

  3. 名称字段中,输入磁盘的新名称。

  4. 可选:在说明字段中,输入其他详细信息。

  5. 确认磁盘来源类型即时快照

  6. 来源即时快照列表中,选择相应的即时快照。

  7. 可选:为磁盘配置其他自定义设置。

    • 输入大小:在大小字段中,指定磁盘大小(以 GB 为单位)。该大小必须等于或大于快照的来源磁盘大小。
    • 安排备份:如果您希望 Compute Engine 按时间表创建新磁盘的标准快照,请选中启用快照时间表复选框,然后选择一个快照时间表。否则,请清除该复选框。
  8. 可选:如需整理项目,请添加一个或多个标签

  9. 如需创建磁盘,请点击创建

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 使用 gcloud beta compute disks create 命令。 您指定的参数取决于您是要创建可用区级磁盘还是区域级磁盘。

    创建可用区级磁盘

    使用 --zone 标志指定可用区:

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

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 使用 gcloud beta compute disks create 命令

    如果来源磁盘使用 CMEK 加密,请使用 --kms-key 参数提供密钥的名称。

    如果来源磁盘使用 CSEK 加密,请使用 --csek-key-file 参数指定来源磁盘的加密密钥。

    CMEK

    如需通过 CMEK 加密的即时快照创建可用区级磁盘,请使用以下命令:

         gcloud beta 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 beta 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 加密密钥,请按如下所示修改上述示例:

  • 向 Beta 版 disks.insert 方法发出 POST 请求:

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

  • 在请求正文的 diskEncryptionKey.rsaEncryptedKey 属性中指定密钥:

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

RSA_ENCRYPTED_KEY 替换为您的加密密钥。

API 请求响应

如果 POST 请求成功,则响应正文将是一个对象,您可以轮询该对象以获取磁盘的创建状态。如需了解详情,请参阅处理 API 响应