This page describes what a snapshot is, how it works, some common use cases, and best practices when creating and using snapshots. To learn how to create and manage snapshots, as well as how to restore Filestore data from a snapshot, see Preserve the state of your data with snapshots.
What is a snapshot?
A Filestore snapshot is the preserved state of your file share data at the time that the snapshot is created. The instance maintains the state of files that are modified after the snapshot is created. If you want to restore a file to the preserved state in the snapshot, you can overwrite the current file with the file from the relevant snapshot directory.
Snapshots are stored within the Filestore instance and are child resources of the instance. They do not replicate any data or consume capacity until the data on the instance is modified. All snapshots of an instance share in-common data, meaning that the instance preserves only the differences between the snapshots.
Every directory of a file share contains a hidden
.snapshot directory. Each
.snapshot directory contains the snapshots of its parent directory that you
create, for example:
foo/ │ bar.txt │ └───.snapshot │ ├───snap1/ │ bar.txt │ ├───snap2/ │ bar.txt │ └───snap3/ bar.txt
The snapshots contain a read-only view of all files and subdirectories that
exist within its parent directory at the time of snapshot creation. All file
attributes such as
ownership, and read/write permissions are
Snapshot creation usually takes no longer than two minutes to complete because it doesn't involve the copying of data, and it doesn't affect instance performance.
You can have up to 240 snapshots per instance at a time.
Filestore snapshots have NFSv3 consistency semantics. Before a snapshot
is initiated, any write that the Filestore instance acknowledges as
written to stable storage or that is followed by an acknowledged
included in the snapshot. For details, see
NFSv3 RFC-1813 section 3.3.7.
Preparing your file share for the best snapshot consistency
The quality of a snapshot depends on the ability of your application to recover from snapshots that are created during heavy write workloads. In most situations, you can create snapshots that have good consistency even while your applications write data to the file share. However, if your applications require strict consistency, we recommend doing one or more of the following:
- Use the sync mount
option or open files with the
O_DIRECT|O_SYNC. Either of these methods improves consistency but does not guarantee it.
- Pause applications or operating system processes that write data to the file share and cause them to flush their changes to the file share before initiating the snapshot. For more information, see fsync(2).
- If your applications require consistency between multiple shares, pause all applications on all instances that are writing to all file shares and create snapshots of all file shares before resuming your applications.
- If you require application level consistency, stop your applications and unmount the file share before creating a snapshot.
NFS semantics of the
.snapshot directories are special hidden directories that contains the
snapshots taken for its parent directory. All NFS and bash commands work for
these directories with the following exceptions:
- You cannot create a file or directory named
.snapshotbecause it is reserved for snapshots.
.snapshotdirectory is not listed in the outputs of
READDIRPLUScommands, and is also not listed in the
ls -abash command.
- To change to a
.snapshotdirectory, you must explicitly type out the
- Auto complete for shell commands will not list
.snapshotas an option.