本页面介绍什么是快照、快照的工作原理、一些常见使用场景以及创建和使用快照的最佳做法。如需了解如何创建和管理快照,以及如何根据快照恢复 Filestore 数据,请参阅使用快照保留数据的状态。
什么是快照?
Filestore 快照是创建快照时文件共享数据的保留状态。实例会维持快照创建后修改的文件的状态。如果要将文件恢复为快照中的保留状态,您可以使用相关快照目录中的文件覆盖当前文件。
快照存储在 Filestore 实例中,并且是该实例的子资源。在实例上的数据被修改之前,快照不会复制任何数据,也不会消耗容量。一个实例的所有快照共享共同的数据,这意味着实例仅保留这些快照之间的差异部分。
快照创建
文件共享的每个目录都包含一个隐藏的 .snapshot
目录。每个 .snapshot
目录都包含您创建的父级目录的快照,例如:
foo/
│ bar.txt
│
└───.snapshot
│
├───snap1/
│ bar.txt
│
├───snap2/
│ bar.txt
│
└───snap3/
bar.txt
快照包含创建快照时其父目录中存在的所有文件和子目录的只读视图。所有文件特性(例如 atime
、ownership
和读/写权限)都将保留。
快照创建通常在两分钟内就能完成,因为它不涉及数据复制,并且不影响实例性能。
每个实例最多可以同时有 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
目录不会在READDIR
或READDIRPLUS
命令的输出中列出,也不会在ls -a
bash 命令中列出。- 要更改为
.snapshot
目录,您必须明确输入.snapshot
字符串。示例:cd somedir/.snapshot/
- shell 命令的自动补全功能不会将
.snapshot
列为选项。
删除快照中捕获的文件
在快照中捕获文件时,删除该文件不会增加实例上的可用磁盘空间。
还原为快照状态
将实例还原为快照状态是一项预览版功能,该功能仅适用于大规模 SSD 实例和企业实例。
实例恢复为快照中捕获的状态时,自创建目标快照以来写入的所有新数据都会予以删除,且无法恢复。在目标快照之后创建的快照也会由还原流程删除。
功能限制
还原快照功能对实时文件系统以及链中较新的快照来说都是破坏性操作。因此,意外丢失数据的风险较高。与从备份恢复时,这种行为明显不同,在备份过程中,备份将在使用后保持当前状态,从而允许您尝试从多个备份进行恢复以找到最佳备份。请谨慎使用还原功能。
创建目标快照后写入的所有数据都会在还原过程开始时删除,并且无法恢复。比目标快照更新的所有快照也将予以删除。例如,snapshot1、snapshot2 和 snapshot3 是按顺序创建的。将实例还原为 snapshot2 中捕获的状态意味着会在还原过程中删除 snapshot3 和 snapshot3 之后的所有更改。
清理这些已删除的数据最多可能需要三天时间。在此期间,实例容量和性能可能会受到影响。
将实例还原为快照状态会更新 NFS 文件系统 ID (fsid)。 因此,如果尝试使用现有装载访问客户端,则会返回过时的文件句柄错误。最佳做法是在还原操作之前从实例中卸载所有客户端,然后在还原操作完成后重新装载这些客户端。
还原操作可能需要数小时才能完成,具体取决于涉及的文件数。您必须等待还原操作完成,然后才能开始执行另一项还原操作。
还原操作完成时,无法运行对实例或快照的其他操作。所有其他操作都会被拒绝或加入队列,具体取决于操作的配置。
目前,只有具有单一共享的实例才能还原为快照状态。 还原快照功能不能与适用于 GKE 的 Filestore 多共享功能结合使用。