(Updated Sept 2023)
Filesystems
On Linux, btrfs is the simplest option for snapshots within a filesystem. It is reasonably stable and complete, based on this 2021 article, as long as you don't use the RAID features. It does have some fsck and repair tools.
ZFS is another option with good snapshot support, and is now cross-platform for Linux, FreeBSD, etc. It's actively developed by the OpenZFS project, and is more complete than btrfs.
LVM
This LVM answer has some details on the pro's and con's of using LVM snapshots, and some btrfs/ZFS links. With some filesystems (ext4 and XFS), LVM will take care of freezing the FS before it takes the snapshot, but LVM snapshots can have performance problems and still have some bugs.
I don't think LVM is a great solution for this 'quick snapshot of user data' application - it's still weaker than btrfs or ZFS in 2022.
rsnapshot
You may also want to look at rsnapshot, which is a user-space tool that creates snapshots using any filesystem, without using LVM.
Since rsnapshot uses rsync and stores the snapshots under a series of directories, using hard links between different snapshots if a file has not changed, it can run surprisingly quickly even on reasonably large sets of files.
It is used a lot for backups but can also be used for this sort of user-data snapshot requirement, and with a little setup can enable anyone to restore their snapshotted files, by using read-only NFS or Samba - see this HOWTO section on restoring files. Files can be restored with standard Linux tools as rsnapshot mirrors the source directory into each snapshot directory.
rsnapshot is quite flexible using its standard features, and since it's written in Perl it's quite easy to customise it, e.g. if you want to provide on-demand snapshots.
The main drawbacks compared to filesystem snapshots are speed, disk space, and not being a 'point in time' snapshot:
- speed - every file must be checked, even if many are skipped
- disk space - each file that changes results in a new copy in the snapshot, whereas filesystem snapshots only copy new blocks in the file
- point in time - rsnapshot doesn't capture all files at a single point in time, unlike filesystem snapshots. Also known as being non-atomic
sync
ed just before thw snapshot is created. To recover some data from the snapshot, you have to mount it. But be aware that any snapshot has size. The space is used to store differences between the snapshot state and current state, that's why storing the snapshot as a backup is not a good idea.