快照概览

本页面介绍什么是快照、快照的工作原理、一些常见使用场景以及创建和使用快照的最佳做法。如需了解如何创建和管理快照,以及如何根据快照恢复 Filestore 数据,请参阅使用快照保留数据的状态

什么是快照?

Filestore 快照是创建快照时文件共享数据的保留状态。实例会维持快照创建后修改的文件的状态。如果要将文件恢复为快照中的保留状态,您可以使用相关快照目录中的文件覆盖当前文件。

快照存储在 Filestore 实例中,并且是该实例的子资源。在修改实例上的数据之前,它们不会复制任何数据或消耗容量。一个实例的所有快照共享共同的数据,这意味着实例仅保留这些快照之间的差异部分。

快照创建

文件共享的每个目录都包含一个隐藏的 .snapshot 目录。每个 .snapshot 目录都包含您创建的父级目录的快照,例如:

volume1/
│   genomics-file.txt
│
└───.snapshot
    │
    ├───snap1/
    │        genomics-file.txt
    │
    ├───snap2/
    │        genomics-file.txt
    │
    └───snap3/
             genomics-file.txt

快照包含创建快照时其父目录中存在的所有文件和子目录的只读视图。系统会保留所有文件属性,例如 atimeownership 和读写权限。

快照创建通常在两分钟内就能完成,因为它不涉及数据复制,并且不影响实例性能。

每个实例最多可以同时有 240 个快照。 文件共享名称和快照名称的总长度不得超过 78 个字符。

快照一致性

Filestore 快照具有 NFSv3 一致性语义。启动快照之前,Filestore 实例确认已写入到稳定的存储空间中或后跟已确认的 COMMIT 的所有写入将会包括在快照中。如需了解详情,请参阅 NFSv3 RFC-1813 第 3.3.7 节

准备文件共享,以实现最佳快照一致性

快照的质量取决于您的应用从在大量写入工作负载期间创建的快照恢复数据的能力。在大多数情况下,即使您的应用向文件共享写入数据,您也可以创建具有良好一致性的快照。但是,如果您的应用要求严格的一致性,建议您执行以下一项或多项操作:

  • 请使用 sync 装载选项或通过 O_DIRECT|O_SYNC 打开文件。这两种方法都可以提高一致性,但不能保证一致性。
  • 暂停将数据写入文件共享的应用或操作系统进程,使其在启动快照之前刷新对文件共享的更改。如需了解详情,请参阅 fsync(2)
  • 如果您的应用需要在多个共享之间保持一致性,请在写入所有文件共享的所有实例上暂停所有应用,并在恢复应用之前为所有文件共享创建快照。
  • 如果需要保持应用级层一致性,请在创建快照之前先停止应用并卸载文件共享。

.snapshot 目录的 NFS 语义

.snapshot 目录是特殊的隐藏目录,其中包含为其父级目录截取的快照。所有 NFS 和 bash 命令都适用于这些目录,但以下情况除外:

  • 您不能创建名为 .snapshot 的文件或目录,因为它是为快照预留的。
  • .snapshot 目录不会在 READDIRREADDIRPLUS 命令的输出中列出,也不会在 ls -a bash 命令中列出。
  • 要更改为 .snapshot 目录,您必须明确输入 .snapshot 字符串。示例:cd somedir/.snapshot/
  • shell 命令的自动补全功能不会将 .snapshot 列为选项。

删除快照中拍摄的文件

在快照中捕获某个文件时,删除该文件不会增加实例的可用磁盘空间。

还原为快照状态

将实例还原为快照状态的功能已正式推出,仅适用于可用区级、大规模 SSD 和企业实例。

当实例还原到快照中捕获的状态时,自目标快照创建以来写入的所有新数据都会被删除,并且无法恢复。在目标快照之后创建的快照也会由还原流程删除。

功能限制

  • 还原快照功能是一项不可逆操作,它会从实时文件系统中删除数据,并删除链中每个后续更新的快照。因此,意外丢失数据的风险较高。与从备份恢复时,这种行为截然不同,在备份行为中,备份在使用后将保持当前状态,从而允许您尝试从多个备份进行恢复,以找到最佳备份。请谨慎使用还原功能。

  • 创建目标快照后写入的所有数据都会在还原过程开始时删除,并且无法恢复。比目标快照更新的所有快照也将予以删除。例如,snapshot1snapshot2snapshot3 将按顺序创建。将实例还原为 snapshot2 中捕获的状态意味着,在 snapshot2 之后写入的所有数据以及创建 snapshot2 后截取的所有快照都会在还原过程中删除。

    清理这些已删除的数据可能需要 6 小时到 10 天时间。在此期间,实例容量和性能可能会受到影响。

  • 将实例还原为快照状态会更新文件句柄。如果尝试使用现有装载来访问客户端,系统将返回过时的文件句柄错误。 最佳实践是在还原操作之前从实例中卸载所有客户端,并在完成操作后重新装载它们。

  • 还原操作最多可能需要两分钟才能完成。

    • 与还原操作关联的任何相关清理(例如删除链中的后续快照)可能需要 6 小时到 10 天才能完成,具体取决于所涉及的文件数量。
    • 您可以在还原操作运行期间和完成清理时运行其他操作。
    • 您必须等待还原操作完成,然后才能开始另一项还原操作。
  • 大多数服务层级都可以使用快照及其相关的 revert 操作。基本 SSD 和基本 HDD 服务层级不支持快照。

  • 只有具有单次共享的实例才能还原为快照状态。

  • 虽然企业服务层级支持快照,但它们不能与 Filestore 多共享功能结合使用。

后续步骤