Compute Engine 磁盘快照的最佳实践


您可以随时创建永久性磁盘和 Google Cloud Hyperdisk 快照,但如果使用以下最佳实践,则可以更快速地创建快照,并且可靠性更高。

安全注意事项

为防止意外提权,请确保仅向您信任的主账号授予与快照相关的 IAM 权限,以读取和恢复快照或即时快照数据。以下权限允许用户从快照或即时快照读取和恢复数据:

  • compute.snapshots.useReadOnly
  • compute.instantSnapshots.useReadOnly

具有上述任一权限的任何主账号都可以将项目中快照或即时快照中的数据恢复到其控制的项目(包括其他组织中的项目)。例如,如果作恶方获得了您项目的快照 IAM 角色,就可以在自己的个人项目中恢复快照并访问快照中包含的数据。

如需了解如何检查主账号具有的权限,请参阅确定哪些主账号具有特定角色或权限

准备一致的快照

如果您在应用运行时创建了永久性磁盘或 Hyperdisk 的快照,则快照可能无法捕获从内存传输到磁盘的待处理写入。由于这些不一致,快照可能不会在您捕获快照时反映应用的确切状态。在此场景中,快照被视为具有崩溃一致,因为它会捕获应用的状态,就好像机器截取快照时发生崩溃。

或者,您也可以暂停应用,这样所有应用事务都会完成,并且系统可在捕获快照前清空所有从内存写入到磁盘的操作。在这种情况下,快照被视为应用一致

创建崩溃一致快照

截取永久性磁盘或 Hyperdisk 的快照时,您无需执行任何额外步骤即可使快照崩溃。具体来说,您无需暂停工作负载。

如果您的工作负载无法容忍临时暂停,请考虑以下创建崩溃一致快照的流程:

  1. 在应用运行时,拍摄快照,因为部分应用数据不一致。
  2. 验证您可以从快照恢复工作负载到可接受的应用状态。
  3. 根据上一步,保留或删除快照。

使用崩溃一致快照可能需要重放文件系统和应用级日志,然后才能使用。因此,快照的质量取决于应用快速从崩溃一致状态恢复为服务的能力。

创建应用一致快照

  • Windows Server 用户:对于挂接到 Windows Server 实例的磁盘,请使用 VSS 快照
  • Linux 用户:如需为挂接到 Linux 实例的磁盘快照实现应用一致,请创建快照前和快照后 Shell 脚本,以便准备好系统以实现应用一致性。然后创建一个启用了 guest-flush 选项的快照。这会在捕获快照之前和之后运行快照前和快照后脚本。如需了解相关说明,请参阅创建 Linux 应用一致性快照

手动创建应用一致快照

在某些情况下,您可能需要手动暂停应用才能实现一致的应用快照。

例如,如果需要多个永久性磁盘或 Hyperdisk 卷之间的应用一致性,请使用此选项。在这种情况下,您必须冻结每个磁盘上的所有文件系统,并完成这些磁盘的所有快照创建工作,然后才能继续运行您的应用。

您无需停止虚拟机。例如,应用暂停可能涉及冻结和卸载文件系统。手动暂停应用后,仅当快照资源达到 UPLOADING 状态后,再恢复工作负载。

请求快照时,请调用 globalOperations.get 方法来检查操作的状态。下表显示了快照操作的状态与快照资源状态之间的关系。

操作状态 快照资源状态
PENDING 尚无快照资源。
RUNNING CREATINGUPLOADING

CREATING:创建快照尚未完成。
UPLOADING:已创建快照,但尚未保存到 Cloud Storage。
DONE FAILEDREADY

快照频率限制

您可以截取磁盘快照的频率存在限制。

通过永久性磁盘或 Hyperdisk 创建快照

每 60 分钟最多可以为单个磁盘截取 6 次快照。

如果超出限制,则操作将失败并返回以下错误:

"code": "RESOURCE_OPERATION_RATE_EXCEEDED",
"message": "Operation rate exceeded for resource 'projects/project-id/zones/zone-id/disks/disk-name'.
Too frequent operations from the source resource."

此限制适用于以下操作:

以下限制不适用于以下操作:

最佳做法是,每小时为磁盘创建一个快照。请避免超出此频率创建快照。实现此目的的最简单方法是设置快照时间表。

通过快照创建新的可用区磁盘

可根据每个目标区域通过给定快照创建新的区域永久性磁盘或 Hyperdisk(每隔十分钟最多创建一次)。目标区域是指通过快照创建的新磁盘的存储位置。 Google Cloud 不保证您将能够以快于该频率的频率通过快照创建磁盘,但如果您尚未在过去一小时内通过快照创建任何磁盘,则能够更频繁地创建磁盘。

请注意,就此频率限制而言,同一磁盘的多个快照被视为不同的快照。

如果超出限制,则操作将失败并返回以下错误:

"code": "RESOURCE_OPERATION_RATE_EXCEEDED",
"message": "Operation rate exceeded for resource 'projects/project-id/global/snapshots/snapshot-name'.
Too frequent operations from the source resource."

此限制适用于以下操作:

以下限制不适用于以下操作:

  • 通过快照创建新的区域级永久性磁盘。
  • 使用映像作为来源创建新的可用区或区域级永久性磁盘。

如需通过快照创建多个磁盘,请使用快照创建映像,然后通过该映像创建磁盘:

  1. 通过快照创建映像
  2. 通过映像创建磁盘

对于非启动磁盘,请按照说明通过映像创建永久性磁盘,并执行以下步骤:

  • 在 Google Cloud 控制台中,选择映像作为磁盘来源类型
  • 如果使用 gcloud CLI,请使用 image 标志
  • 如果使用 REST,请使用 sourceImage 参数

使用现有快照作为后续快照的基准

如果您有某个磁盘(永久性磁盘或 Hyperdisk)的现有快照,则系统会自动将其作为您为同一个磁盘创建的任何后续快照的基准。

  • 先为某个磁盘创建一个新的快照,然后再删除该磁盘之前的快照。如果系统能够使用先前的快照并且只读取磁盘中新增或更改的数据,则可以更快地创建新的快照。
  • 等待新的快照创建完毕,然后再为同一个磁盘创建后续快照。如果您为同一个磁盘同时运行两个快照创建任务,那么这两个任务都会从相同的基准开始做完全重复的工作。 如果等待新的快照创建完成,则任何后续快照创建任务都将运行得更快,因为它们只需要获取自上次快照创建完成以来发生了更改的数据。

将快照创建任务安排在非高峰时段运行

如果您要为磁盘(永久性磁盘或 Hyperdisk)安排定期快照创建任务,则可以尽量在非高峰时段创建快照,以减少完成每个快照所需的时间。

  • 将自动快照创建任务安排在您的磁盘所在可用区的工作日白天运行。快照创建活动通常在工作日结束时达到峰值。
  • 将自动快照创建任务安排在您的磁盘所在可用区的早晨运行,而不是在午夜零点前后的时间。快照创建活动通常在午夜时分达到峰值。

在单独的磁盘上整理您的数据

如果您为某个磁盘(永久性磁盘或 Hyperdisk)创建快照,则存储在磁盘上的任何数据都将包含在该快照中。数据量越大,创建的快照就会越大,费用会更多,创建时间也会更长。如需确保只为您需要的数据创建快照,请将您的数据存储在单独的磁盘上。

  • 将关键数据存储在辅助磁盘(或数据磁盘)上,而不是启动磁盘。 这样您就可以仅在必要时或以较低的频率为启动磁盘创建快照。
  • 如果您确实要为启动磁盘创建快照,请将交换分区、页面文件、缓存文件和非关键日志存储在一个单独的磁盘上。这些文件和分区经常发生更改,快照创建过程可能会将它们标识为必须包含在增量快照中的已更改数据。
  • 将类似的数据集中存储在一个磁盘上,从而减少需要创建的快照数量。将操作系统和易失性数据与要创建快照的数据分开,但不需要像在真实机器上那样将关键数据分散存储在多个磁盘上。一个大容量磁盘的性能与总容量大小相等的多个较小的磁盘是相同的。

在磁盘上启用 discard 选项或运行 fstrim

在 Linux 实例上,如果您之前在格式化和装载磁盘(永久性磁盘或 Hyperdisk)时未使用磁盘选项,请在创建快照之前先在实例上运行 fstrim 命令。该命令会移除文件系统不再需要的磁盘块,以便系统能够更快速地创建快照并且快照的大小也更小。如需了解如何在磁盘上配置舍弃选项,请参阅在 Linux 虚拟机上格式化和装载非启动磁盘

为频繁使用的快照创建映像

如果您需要在同一地区反复使用快照来创建磁盘(永久性磁盘或 Hyperdisk),则使用快照一次并为其创建映像可以节省网络费用。存储该映像并使用它创建磁盘,然后启动虚拟机实例。有关说明,请参阅创建自定义映像

最佳做法是,每小时为磁盘创建一个快照。请避免超出此频率创建快照。实现此目的的最简单方法是设置快照时间表

其他最佳做法

  • 使用 ext4日志文件系统可以降低数据已缓存但实际上并未写入永久性磁盘的风险。
  • 定期为数据创建快照,能够最大程度地减少因意外故障导致的数据丢失。

后续步骤