永久性磁盘快照最佳做法

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

准备工作

准备一致的快照

在大多数情况下,即使您的应用正在向永久性磁盘中写入数据,您也可以为永久性磁盘创建快照并且仍然可以期待快照具有良好的一致性。快照的质量取决于您的应用从在大量写入工作负载期间创建的快照恢复数据的能力。

如果应用需要严格的一致性,您可以按照以下步骤确保快照与所需的永久性磁盘状态保持一致。

在创建快照之前刷新磁盘的缓冲区

即使应用正在向永久性磁盘写入数据,您也可以为该磁盘创建快照。但是,如果您在创建快照之前先刷新磁盘缓冲区并同步文件系统,则可以提高快照一致性。

暂停将数据写入该永久性磁盘的应用或操作系统进程。然后,在创建快照之前刷新磁盘缓冲区。

如需在创建快照之前准备永久性磁盘,请执行以下操作:

  1. 使用 SSH 连接到您的实例
  2. 运行应用以刷新到磁盘。例如,MySQL 设有 FLUSH 语句。使用适用于您的应用的任何工具。
  3. 阻止应用写入永久性磁盘。
  4. 运行 sudo sync

如果您跳过此步骤,则只有已被应用成功刷新到磁盘的数据才会包含在快照中。应用在这种情况下的经历类似一次突然断电。

冻结和卸载您的文件系统

您还可以选择在创建快照之前冻结或卸载文件系统。这是确保清空磁盘缓冲区的最可靠方法,但它更耗时,而且没有简单地刷新磁盘缓冲区那么方便。

完全卸载永久性磁盘,以确保在您创建快照时系统不会向其写入任何数据。通常没必要这样做,但这种方法确实可以提高快照的一致性。

  1. 使用 SSH 连接到您的实例
  2. 停止正在从永久性磁盘读取或向其写入数据的任何应用。
  3. 冻结文件系统或卸载文件系统。

    1. 冻结:sudo fsfreeze -f [example-disk_location]
    2. 卸载:sudo umount [example-disk_location]

    快照创建完毕后,您可以取消冻结文件系统或装载文件系统:

    1. 取消冻结:sudo fsfreeze -u [example-disk_location]
    2. 装载:sudo mount [example-disk_location mount_location]

Linux 用户

如果磁盘已连接到 Linux 实例,请通过连接到实例并使用 umount 工具从实例中卸载磁盘:

sudo umount /dev/disk/by-id/google-[DISK_NAME]

其中 [DISK_NAME] 是永久性磁盘的名称。

Windows 用户

如果磁盘已连接到 Windows 实例,请通过连接到实例并使用磁盘管理工具从实例中卸载磁盘。

重新装载永久性磁盘

创建快照后,必须重新装载永久性磁盘。如需了解详情,请参阅格式化和装载永久性磁盘

如果您的应用要求多个永久性磁盘之间具备一致性,您必须冻结或卸载每个磁盘上的所有文件系统,并完成这些磁盘的所有快照创建工作,然后才能继续运行您的应用。Compute Engine 不保证在多个永久性磁盘上运行的同步快照之间保持一致性。

使用 ext4日志文件系统可以降低数据已缓存但实际上并未写入永久性磁盘的风险。

使用 Windows Server 实例的永久性磁盘

对于已附加到 Windows Server 实例的永久性磁盘,请使用 VSS 快照来帮助保持数据完整性。

高效、频繁地创建快照

使用快照高效地管理您的数据。

  • 定期为数据创建快照,能够最大程度地减少因意外故障导致的数据丢失。

  • 避免过量下载快照以及创建和重复使用映像有助于提升性能。

  • 将快照创建任务安排在非高峰时段可减少快照创建时间。

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

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

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

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

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

  • 先为某个永久性磁盘创建一个新的快照,然后再删除该磁盘之前的快照。如果系统能够使用先前的快照并且只读取永久性磁盘中新增或更改的数据,则可以更快地创建新的快照。

  • 等待新的快照创建完毕,然后再为同一个永久性磁盘创建后续快照。如果您为同一个永久性磁盘同时运行两个快照创建任务,那么这两个任务都会从相同的基准开始做完全重复的工作。如果等待新的快照创建完成,则任何后续快照创建任务都将运行得更快,因为它们只需要获取自上次快照创建完成以来发生了更改的数据。

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

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

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

在单独的永久性磁盘上存储您的数据

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

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

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

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

后续步骤

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

发送以下问题的反馈:

此网页
Compute Engine 文档