为永久性磁盘创建计划快照

本文档介绍如何创建快照时间表以定期自动备份区域地区永久性磁盘。您可以将快照时间表用作备份 Compute Engine 工作负载的最佳做法。创建快照时间表后,您便可以将其应用到一个或多个永久性磁盘。

快照时间表包括以下属性:

  • 时间表名称
  • 时间表说明
  • 快照频率(每小时、每天、每周)
  • 快照保留政策(用于确定保留快照的天数)
  • 快照开始时间
  • 快照时间表可用区域
  • 来源磁盘删除政策(用于在来源磁盘遭到删除后处理自动生成的快照)

您还可以在快照时间表中包括可选的保留政策(用于定义保留快照时间表所产生快照的时间长短)。如未指定,系统便会无限期地保留快照。

准备工作

限制

  • 一个永久性磁盘一次只能挂接一个快照时间表。
  • 如果您所在区域需要更多资源,则可能需要通过 Console 请求增加资源配额
  • 如果快照时间表已挂接到磁盘,便无法被删除。您必须先从所有磁盘中分离该时间表,然后才能删除。
  • 快照时间表一旦创建,便不可更改。若要更新,您必须删除该时间表,然后再创建一个新的。
  • 目前,您无法为使用客户提供的加密密钥 (CSEK) 功能的永久性磁盘创建快照时间表。

快照时间表频率

在创建快照时间表之前,您需要选择开始时间和快照频率。开始时间就是您希望启动快照时间表的时间,而频率则可定义为每小时、每天和每周。

快照时间表会在指定的开始时间所处的那个小时开始。例如,如果时间表的开始时间是中午 12 点,那么系统便会在中午 12 点到中午 12:59 之间的任意时间开始拍摄快照。如果您使用的是控制台或 gcloud 工具,则可以提供世界协调时间 (UTC) 或本地时间。如果您使用的是 Compute Engine API,必须提供 UTC 时间。

  • 设置每小时时间表:要设置每小时时间表,请选择开始时间,并使用介于 1 到 23 的整数选择快照间隔。快照间隔用于定义快照的拍摄频率。在设置间隔时,一种选项是选择可以整除 24 的数字。例如,将开始时间设为上午 9 点,间隔设为 6,表示快照时间表是在上午 9 点运行,每 6 小时生成 1 次快照。

  • 设置每天时间表:将频率设为每天,让系统每天生成 1 次快照。例如,您可以设置快照时间表,让系统每天上午 9 点生成快照。

  • 设置每周时间表:将频率设为每周,让系统拍摄一周内多天的快照。例如,将开始时间设为上午 9:00,并将每周时间表设为星期一、星期四、星期日,表示系统在每周的星期一、星期四和星期日上午 9:00 拍摄快照。您还可以将每周时间表设置在一周中的不同日子和时间。例如,您可以将每周时间表设为每周一下午 2 点和每周四上午 10 点。

快照保留政策

快照保留政策定义了您要保留快照的时间长短。如果您选择设置快照保留政策,就必须将其纳入快照时间表。如未设置,系统会默认永久保留所有自动生成的快照,直到您手动删除它们。如果您选择该默认选项以无限期地保留快照,则请注意,保留这些快照可能会产生存储费用。您可以考虑的最佳做法是,设置保留政策,以最大限度地减少长期存储快照所产生的费用。

  • 您必须指定按天数计(最少 1 天)的快照保留政策。
  • 快照保留政策仅适用于自动生成的快照,不适用于手动创建的快照。
  • 您不能追溯应用保留政策。如果您先创建了一个不含保留政策的快照时间表,然后切换到另一个含有保留政策的快照时间表,则该保留政策只会应用于新的快照。
  • 无论保留政策如何设置,您随时都可以手动删除自动生成和手动生成的快照。

来源磁盘删除规则

在创建快照时间表时,您还可以设置来源磁盘删除规则。该规则可用于控制在来源磁盘遭到删除后,系统对快照执行的操作。默认情况下,如果来源磁盘遭到删除,那么无论您设置的原始保留政策如何,系统都会永久保留根据快照时间表自动生成的快照,除非您手动删除它们,或指定了其它相关政策。

此外,您也可以设置相应规则,以便在来源磁盘遭到删除后,将您的快照保留政策应用于快照。例如,您可以应用保留政策,让系统在来源磁盘遭到删除后将快照保留一周的时间。

例如,假设您创建了一个保留政策为 3 天的快照时间表,但选择不针对来源磁盘遭到删除的情况应用保留政策。当您将该政策应用于永久性磁盘后,Compute Engine 会自动生成快照,但也会根据保留政策在 3 天后自动删除快照。不过,如果您的来源磁盘遭到删除,则保留政策将不再适用,并且根据此时间表创建的所有现有快照都将无限期地保留下来。

为 Windows 实例安排生成快照

若要将快照时间表应用于挂接到 Windows 虚拟机实例的磁盘,请使用 guest-flush 选项来启用 VSS,以生成快照的影子副本。如需详细了解 Windows 快照,请参阅创建 Windows 永久性磁盘快照

快照存放区域规则和快照标签

与手动生成的快照类似,您还可以为自动生成的快照应用资源标签和选择存储位置。如果您在快照时间表中设置了上述属性,则根据此时间表自动生成的快照都将应用这些属性。例如,如果将快照存放区域设为 US,则根据此时间表生成的所有快照都将存储在美国。要详细了解如何设置这些选项,请参见下文介绍的示例。

创建快照时间表

请使用控制台、gcloud 命令或 Compute Engine API 方法为永久性磁盘创建快照时间表。您必须在永久性磁盘所在的同一个区域中创建快照时间表。例如,如果您的永久性磁盘位于 us-west1-a 地区,则您的快照时间表必须位于 us-west1 区域。如需了解详情,请参阅为快照选择存储位置

Console

要为快照创建时间表,请执行以下操作:

  1. 转到 Google Cloud Platform Console 中的快照页面。

    转到“快照”页面

  2. 点击页面顶部的创建快照时间表
  3. 输入时间表的名称
  4. 为快照时间表选择一个区域。您的永久性磁盘必须和快照时间表位于同一个区域。
  5. (可选)选择您的快照位置或接受默认位置。
  6. 选择您的时间表频率
  7. 针对多久后自动删除快照输入天数。
  8. 选择删除规则,以确定在时间表的来源磁盘遭到删除后,系统对快照执行的操作。
  9. 选择系统根据此时间表生成的快照的保留天数。
  10. 如果您使用的是 Windows,则可以启用 VSS
  11. (可选)指定要应用于这些快照的相关标签。
  12. 点击创建以创建快照时间表。

gcloud

如要为永久性磁盘创建快照时间表,请使用 compute resource-policies create-snapshot-schedule gcloud 命令,并将时间表频率设为每小时、每天或每周。

  gcloud beta compute resource-policies create-snapshot-schedule [SCHEDULE_NAME] \
      --description "[SCHEDULE_DESCRIPTION]" \
      --max-retention-days [MAX_RETENTION_DAYS] \
      --start-time [START_TIME] \
      --hourly-schedule [SNAPSHOT_INTERVAL] \
      --daily-schedule \
      --weekly-schedule [SNAPSHOT_INTERVAL] \
      --weekly-schedule-from-file [FILE_NAME] \
      --on-source-disk-delete [DELETION_OPTION]

其中:

  • [SCHEDULE_NAME] 是新快照时间表的名称。
  • "[SCHEDULE_DESCRIPTION]" 是快照时间表的说明。请使用引号将您的说明括起来。
  • [MAX_RETENTION_DAYS] 是保留快照的天数。例如,设为 3 表示快照在删除之前会保留 3 天。您必须将保留政策设为至少 1 天。
  • [START_TIME] 是采用本地时间或 UTC 的开始时间(例如:下午 2 点就是 14:00)。时间必须从整点开始。例如,如果您将开始时间设为 14:13,则会收到错误消息。
  • [SNAPSHOT_INTERVAL] 用于定义拍摄快照的时间间隔。请使用介于 1 到 23 的整数设置每小时时间表。同时,请选择一个可以整除 24 的小时数。例如,将 --hourly-schedule 设为 12,表示每 12 小时生成 1 次快照。对于每周时间表,请定义您要拍摄快照的日期,并务必写清楚是周几(不区分大小写)。hourly-scheduledaily-scheduleweekly-schedule 这 3 个快照频率标志相互排斥。您必须为快照时间表选择其中一个标志。

  • 如果您选择提供每周快照时间表,则 [FILE_NAME] 是包含该时间表的文件的名称。请注意,您可以使用文件来为每周时间表指定不同的星期几和不同的时间(但不能直接在命令行上指定多个每周时间表)。例如,您的文件为快照时间表指定了星期一和星期三:[{"day": "MONDAY", "startTime": "04:00"}, {"day": "WEDNESDAY", "startTime": "02:00"}],如果您在文件中添加开始时间,则无需设置 --start-time 标志。您可以采用 UTC 或您的本地时区设置时间。

  • [DELETION_OPTION] 用于确定在来源磁盘遭到删除后系统对快照执行的操作。选择默认的 keep-auto-snapshots 可省略此标志,而使用 apply-retention-policy 则会应用保留政策。

下文介绍了设置快照时间表的其他示例。在下面的所有示例中:

  • 包含了磁盘删除规则;--on-source-disk-delete 标志设为默认值 keep-auto-snapshots,以永久保留所有自动生成的快照。另一种方法是将此标志设为 apply-retention-policy,以使用您的快照保留政策。
  • 存储位置设为 US,因此所有生成的快照将存储在 US 多区域中。
  • 向所有生成的快照应用了标签 env=devmedia=images
  • 保留政策设为 10 天。

每小时时间表:在此示例中,快照时间表的开始时间为格林威治标准时间 (GMT) 下午 2 点,每 4 小时运行 1 次。

  gcloud beta compute resource-policies create-snapshot-schedule SCHEDULE_NAME \
      --description "MY HOURLY SNAPSHOT SCHEDULE" \
      --max-retention-days 10 \
      --start-time 14:00 \
      --hourly-schedule 4 \
      --region us-west1 \
      --on-source-disk-delete keep-auto-snapshots \
      --snapshot-labels env=dev,media=images \
      --storage-location US

每日时间表:在此示例中,快照时间表的开始时间为下午 2 点,并在每天同一时间运行 1 次。--daily-schedule 标志必须包含在其中,但不用设置任何值。

gcloud beta compute resource-policies create-snapshot-schedule SCHEDULE_NAME \
    --description "MY DAILY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 14:00 \
    --daily-schedule \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

每周时间表:在此示例中,快照时间表的开始时间为下午 2 点,并在每个星期二和星期四各运行 1 次。

gcloud beta compute resource-policies create-snapshot-schedule SCHEDULE_NAME \
    --description "MY WEEKLY SNAPSHOT SCHEDULE" \
    --max-retention-days 10 \
    --start-time 14:00 \
    --weekly-schedule tuesday,thursday \
    --region us-west1 \
    --on-source-disk-delete keep-auto-snapshots \
    --snapshot-labels env=dev,media=images \
    --storage-location US

API

在 API 中,您可以构建向 resourcePolicies.insert 发出的 POST 请求,以创建快照时间表。您必须至少包括快照时间表名称、快照存储区域位置和快照频率。

默认情况下,onSourceDiskDelete 参数会设为 keepAutoSnapshots。这意味着,如果来源磁盘遭到删除,系统会无限期地保留为该磁盘自动生成的快照。此外,您也可以将该标志设为 applyRetentionPolicy,以应用您的保留政策。

在以下示例中,每日快照时间表的开始时间设为 UTC 时间 12 点,并每天重复。该示例还设置了 5 天的保留政策;5 天后,系统将自动移除快照。

您还可以在请求中包含快照存放区域选项快照标签,以确保快照会存储在您选择的位置。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/resourcePolicies

{
 "name": "[SCHEDULE_NAME]",
 "description": "[SCHEDULE_DESCRIPTION]",
 "snapshotSchedulePolicy": {
   "schedule": {
     "dailySchedule": {
       "startTime": "12:00",
       "daysInCycle": "1"
     }
   },
   "retentionPolicy": {
     "maxRetentionDays": "5"
   },
   "snapshotProperties": {
     "guestFlush": "False",
     "labels": {
       "env": "dev",
       "media": "images"
     },
     "storageLocations": ["US"]
   }
 }
}

其中:

  • [PROJECT_ID] 是项目名称。
  • [REGION] 是快照时间表政策的区域。
  • [SCHEDULE_DESCRIPTION] 是快照时间表的说明。
  • [SCHEDULE_NAME] 是快照时间表的名称。

同样,您也可以创建每周或每月时间表。请查看 API 参考,以了解有关设置每周或每月时间表的详细信息。

例如,以下请求将创建一个每个星期一的 9 点和星期四的 2 点运行的每周时间表。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/resourcePolicies

{
 "name": "[SCHEDULE_NAME]",
 "description": "[SCHEDULE_DESCRIPTION]",
 "snapshotSchedulePolicy": {
   "schedule": {
     "weeklySchedule": {
       "dayOfWeeks": [
       {
         "day": "Monday",
         "startTime": "9:00"
       },
       {
         "day": "Thursday",
         "startTime": "2:00"
       }
       ]
     }
   },
  "retentionPolicy": {
    "maxRetentionDays": "5"
  },
  "snapshotProperties": {
    "guestFlush": "False",
    "labels": {
      "production": "webserver"
    },
    "storageLocations": ["US"]
  }
 }
}

将快照时间表挂接到磁盘

创建时间表后,您可以使用控制台、gcloud 命令或 Compute Engine API 方法将其挂接到现有磁盘。

Console

将快照时间表挂接到现有磁盘。

  1. 转到 Google Cloud Platform Console 中的磁盘页面。

    转到“磁盘”页面

  2. 选择要添加时间表的目标磁盘。
  3. 点击页面顶部的修改
  4. 使用快照时间表下拉菜单将时间表添加到对应磁盘,或者创建一个新的时间表。
  5. 如果您创建了新的时间表,请点击创建
  6. 点击保存,以完成该任务。

gcloud

要将快照时间表挂接到磁盘,请使用 disks add-resource-policies gcloud 命令。

gcloud beta compute disks add-resource-policies [DISK_NAME] \
    --resource-policies [SCHEDULE_NAME] \
    --zone [ZONE]

其中:

  • [DISK_NAME] 是现有磁盘的名称。
  • [SCHEDULE_NAME] 是快照时间表的名称。
  • [ZONE] 是磁盘的位置。

API

在 API 中,您可以构建向 disks.addResourcePolicies 发出的 POST 请求,以将快照时间表挂接到现有磁盘。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/addResourcePolicies

{
  "resourcePolicies": [
    "regions/[REGION]/resourcePolicies/[SCHEDULE_NAME]"
  ]
}

其中:

  • [PROJECT_ID] 是项目名称。
  • [ZONE] 是磁盘的位置。
  • [REGION] 是快照时间表的位置。
  • [DISK_NAME] 是磁盘的名称。
  • [SCHEDULE_NAME] 是您要应用到此磁盘中的区域所含快照时间表的名称。

同时创建磁盘和快照时间表

您仅在 GCP Console 和 gcloud 中可以同时创建磁盘和快照时间表。

Console

  1. 转到 Google Cloud Platform Console 中的磁盘页面。

    转到“磁盘”页面

  2. 点击页面顶部的创建磁盘
  3. 填写必填字段,以创建地区磁盘或区域磁盘。
  4. 在与快照时间表相同的区域中创建磁盘。
  5. 填充快照时间表的各个字段。
  6. 使用下拉菜单并填写用于创建时间表的各个字段。
  7. 点击创建以创建时间表。
  8. 点击创建以创建磁盘。

gcloud

使用 disks create gcloud 命令创建地区或区域永久性磁盘,然后向其挂接快照时间表。

gcloud beta compute disks create [DISK_NAME] \
    --resource-policies [SCHEDULE_NAME] \
    --zone [ZONE]

其中:

  • [DISK_NAME] 是新磁盘的名称。
  • [SCHEDULE_NAME] 是快照时间表的名称。
  • [ZONE] 是您要创建磁盘的位置。磁盘必须位于快照时间表区域内的地区中。

查看快照时间表

要获取快照时间表的列表,请使用控制台、gcloud 命令或 Compute Engine API 方法。此请求会显示项目中所有快照时间表的名称、说明和区域。

Console

  1. 转到 Google Cloud Platform Console 中的快照页面。

    转到“快照”页面

  2. 点击页面顶部的快照时间表
  3. 使用过滤快照时间表搜索框,以查看指定的快照时间表。
  4. 点击相应快照时间表,以查看其详情。

gcloud

要查看快照时间表的列表,请使用 resource-policies list gcloud 命令。

gcloud beta compute resource-policies list

要查看特定快照时间表的说明,请使用 resource-policies describe gcloud 命令。

gcloud beta compute resource-policies describe [SCHEDULE_NAME]

其中:[SCHEDULE_NAME] 是快照时间表的名称。

API

请向 resourcepolicies.aggregatedList 发出 GET 请求,以返回项目中快照时间表的列表。

GET https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/aggregated/resourcePolicies

其中:[PROJECT_ID] 是项目名称。

按区域查看快照时间表

要查看特定区域内的快照时间表,请使用控制台、gcloud 命令或 Compute Engine API 方法。此请求会显示项目中所有快照时间表的名称、说明和区域。

Console

  1. 转到 Google Cloud Platform Console 中的快照页面。

    转到“快照”页面

  2. 点击页面顶部的快照时间表
  3. 使用过滤快照时间表搜索框,以按区域查看指定的资源政策。

gcloud

要查看特定区域中的快照时间表,请使用 resource-policies list gcloud 命令。

gcloud beta compute resource-policies list [PROJECT_ID] \
    --filter [REGION]

其中:

  • [PROJECT_ID] 是项目名称。
  • [REGION] 是政策的位置。

API

请向 resourcePolicies.get 发出请求,以检索在相应区域中建立的快照时间表。

GET https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/resourcePolicies/[SCHEDULE_NAME]

其中:

  • [PROJECT_ID] 是项目名称。
  • [REGION] 是快照时间表的区域。
  • [SCHEDULE_NAME] 是您要查看的快照时间表的名称。

更改快照时间表

您无法修改快照时间表。要更改已挂接到某个磁盘的时间表,您必须先从该磁盘中分离这个时间表,然后再将其删除。之后,您便可以创建新的时间表,并将其挂接到对应磁盘。您可以使用控制台、gcloud 命令或 Compute Engine API 方法来更改快照时间表。

Console

  1. 转到 Google Cloud Platform Console 中的磁盘页面。

    转到“磁盘”页面

  2. 选择包含要分离的时间表的磁盘。
  3. 点击页面顶部的修改
  4. 打开快照时间表下拉菜单。
  5. 点击无计划,以从磁盘中分离该时间表。
  6. 您可以创建新的时间表,也可以在修改磁盘选项时更换时间表。
  7. 点击保存,以完成该任务。

gcloud

您可以使用 disks remove-resource-policies gcloud 命令从包含要更改的时间表的磁盘中分离快照时间表。

gcloud beta compute disks remove-resource-policies [DISK_NAME] \
    --resource-policies [SCHEDULE_NAME] \
    --region [REGION] \
    --zone [ZONE]

其中:

  • [DISK_NAME] 是挂接了快照时间表的磁盘的名称。
  • [SCHEDULE_NAME] 是您要从此磁盘中分离的快照时间表的名称。
  • [REGION] 是您的快照时间表所在的区域。
  • [ZONE] 是您的地区磁盘所在的地区。

然后,您可以使用 disks add-resource-policies 命令将经过更新的快照时间表添加到磁盘。

 gcloud beta compute disks add-resource-policies [DISK_NAME] \
     --resource-policies [SCHEDULE_NAME] \
     --zone [ZONE]

其中:

  • [DISK_NAME] 是包含快照时间表政策的磁盘的名称。
  • [SCHEDULE_NAME] 是您要添加到此磁盘的快照时间表的名称。
  • [ZONE] 是磁盘所在的地区。

API

要从磁盘中分离时间表,请构建一个向 disks.removeResourcePolicies 发送的 POST 请求。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/removeResourcePolicies

{
  "resourcePolicies": [
    "regions/[REGION]/resourcePolicies/[SCHEDULE_NAME]"
  ]
}

其中:

  • [PROJECT_ID] 是项目名称。
  • [ZONE] 是磁盘所在的地区。
  • [DISK_NAME] 是包含关联快照时间表的磁盘的名称。
  • [REGION] 是快照时间表的区域。
  • [SCHEDULE_NAME] 是您要从此磁盘中移除的快照时间表的名称。

在 API 中,您可以构建向 disks.addResourcePolicies 发出的 POST 请求,以将快照时间表挂接到现有磁盘。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/addResourcePolicies

{
  "resourcePolicies": [
    "regions/[REGION]/resourcePolicies/[SCHEDULE_NAME]"
  ]
}

其中:

  • [PROJECT_ID] 是项目名称。
  • [ZONE] 是磁盘所在的地区。
  • [DISK_NAME] 是磁盘的名称。
  • [REGION] 是快照时间表的区域。
  • [SCHEDULE_NAME] 是您要应用到此磁盘中的区域所含快照时间表的名称。

删除快照时间表

如果您删除了某个快照时间表,系统会永久保留与该快照时间表关联的所有自动生成的快照。但是,时间表一旦被删除,便无法再生成快照。

保留政策是快照时间表的一部分。时间表一旦删除,系统便不会再应用其中的保留政策。已生成的快照将会永久保留下来,直到您手动删除它们。

要删除现有快照时间表,请使用控制台、gcloud 命令或 Compute Engine API 方法。如果时间表已挂接到某个磁盘,请先从该磁盘中分离时间表,然后再将其删除。您无法删除已挂接到磁盘的快照时间表。

Console

  1. 转到 Google Cloud Platform Console 中的快照页面。

    转到“快照”页面

  2. 选择快照时间表,以查看时间表的列表。
  3. 选择与磁盘没有关联的任意时间表。
  4. 点击页面顶部的删除

gcloud

要删除指定的快照时间表,请使用 resource-policies delete gcloud 命令。

gcloud beta compute resource-policies delete [SCHEDULE_NAME] \
    --region [REGION]

其中:

  • [SCHEDULE_NAME] 是快照时间表的名称。
  • [REGION] 是快照时间表的区域。

API

请向 resourcepolicies.delete 发出请求,以删除快照时间表。如果快照时间表已挂接到特定磁盘,您便会收到错误消息。

DELETE https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/resourcePolicies/[SCHEDULE_NAME]

其中:

  • [PROJECT_ID] 是项目名称。
  • [REGION] 是快照时间表的区域。
  • [SCHEDULE_NAME] 是快照时间表的名称。

日志

对于测试版本,审核日志将会显示从实例中创建、删除、添加或移除政策的时间。活动日志还会提供相关信息,说明在“系统事件”类别中针对目标磁盘创建和删除快照的时间。您可以通过控制台中的 Stackdriver 菜单查看自己的日志。如需了解详情,请参阅查看日志

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档