永久性磁盘快照最佳做法

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

准备工作

准备具有一致性的快照

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

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

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

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

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

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

  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 选项,请参阅格式化和装载永久性磁盘

后续步骤