'\" t
.\" Title: snapper
.\" Author: [see the "AUTHORS" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot
.\" Date: 2024-04-18
.\" Manual: Filesystem Snapshot Management
.\" Source: 0.11.0
.\" Language: English
.\"
.TH "SNAPPER" "8" "2024\-04\-18" "0\&.11\&.0" "Filesystem Snapshot Management"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
snapper \- Command\-line program for filesystem snapshot management
.SH "SYNOPSIS"
.HP \w'\fBsnapper\fR\ 'u
\fBsnapper\fR [\fI\-\-global\-opts\fR] \fIcommand\fR [\fI\-\-command\-opts\fR] [\fIcommand\-arguments\fR]
.HP \w'\fBsnapper\fR\ 'u
\fBsnapper\fR {\-\-help}
.SH "DESCRIPTION"
.PP
Snapper is a command\-line program for filesystem snapshot management\&. It can create, delete and compare snapshots and undo changes done between snapshots\&.
.PP
Snapper never modifies the content of snapshots\&. Thus snapper creates read\-only snapshots if supported by the kernel\&. Supported filesystems are btrfs and ext4 (discontinued) as well as snapshots of LVM logical volumes with thin\-provisioning\&. Some filesystems might not be supported depending on your installation\&.
.SH "CONCEPTS"
.SS "Configurations"
.PP
For each filesystem or subvolume that should be snapshotted by snapper, a configuration file is required, see
\fBsnapper-configs\fR(5)\&. The setup can be done with the create\-config command\&.
.SS "Snapshots"
.PP
Snapper distinguishes three types of snapshots\&.
.PP
pre
.RS 4
Pre snapshots should always have a corresponding post snapshot\&. The intention of pre/post snapshot pairs is to snapshot the filesystem before and after a modification\&.
.RE
.PP
post
.RS 4
See pre type\&.
.RE
.PP
single
.RS 4
These snapshots have no special relationship to other snapshots\&.
.RE
.PP
Note that filesystem\-wise all three types are the same\&.
.SS "Snapshot Description and Userdata"
.PP
With each snapshot a description and some userdata can be associated\&. The description is a string\&. The userdata is a list of key\-value pairs where the keys and values are strings\&.
.PP
Do not use non\-ASCII characters for the snapshot description, userdata or any other strings, unless you always use the UTF\-8 character encoding\&.
.SS "Automatic Snapshot Creation"
.PP
Next to manual snapshot creation, snapshots are also created automatically\&.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
A cronjob or systemd timer creates hourly snapshots, if TIMELINE_CREATE is enabled for a config\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Certain programs like YaST and zypper create pre/post snapshot pairs when modifying the system\&.
.RE
.SS "Cleanup Algorithms"
.PP
Snapper provides several algorithms to clean up old snapshots\&. The algorithms are executed in an hourly cronjob or systemd timer\&. This can be configured in the corresponding configurations files along with parameters for every algorithm\&.
.PP
number
.RS 4
Deletes old snapshots when a certain number of snapshots is reached\&.
.RE
.PP
timeline
.RS 4
Deletes old snapshots but keeps a number of hourly, daily, weekly, monthly, quarterly and yearly snapshots\&.
.RE
.PP
empty\-pre\-post
.RS 4
Deletes pre/post snapshot pairs with empty diffs\&.
.RE
.PP
The number and timeline cleanup algorithms can also try to keep the space used by snapshots below a limit and the free space of the filesystem above a limit\&. For the first condition quota must be setup, see command setup\-quota\&. Additional the NUMBER_LIMIT and TIMELINE_LIMIT variables in the config file must have ranges (min\- and max\-value)\&. The algorithms will then make two passes:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 1." 4.2
.\}
Delete snapshots above the max\-value independent of the snapshot and filesystem space\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 2." 4.2
.\}
Delete snapshots above the min\-value until the limits for the snapshot and filesystem are reached\&.
.RE
.PP
The limit for the used space can be configured via the SPACE_LIMIT variable\&. Note: Only snapshots that have a cleanup algorithm set are taken into account when calculating the space used by snapshots\&.
.PP
The limit for the free space can be configured via the FREE_LIMIT variable\&.
.PP
Note: Since the cleanup is performed asynchronous from creating snapshots the observed snapshots can differ from the expected snapshots according to the limits\&. Also btrfs stale qgroups can exist temporarily\&.
.SS "Filters"
.PP
Some files keep state information of the system, e\&.g\&.
/etc/mtab\&. Such files should never be reverted\&. To help users, snapper allows one to ignore these files\&.
.PP
Filters are read from the files
/etc/snapper/filters/*\&.txt
and
/usr/share/snapper/filters/*\&.txt, where for files with the same name the former location has precedence\&. Each line in those files specifies a pattern\&. When snapper computes the difference between two snapshots it ignores all files and directories matching any of those patterns by using
\fBfnmatch\fR(3)
with the flag FNM_LEADING_DIR\&.
.PP
Note that filters do not exclude files or directories from being snapshotted\&. For that, use subvolumes or mount points\&.
.SH "GLOBAL OPTIONS"
.PP
\fB\-q, \-\-quiet\fR
.RS 4
Suppress normal output\&. Error messages will still be printed, though\&.
.RE
.PP
\fB\-v, \-\-verbose\fR
.RS 4
Increase verbosity\&.
.RE
.PP
\fB\-\-debug\fR
.RS 4
Turn on debugging\&.
.RE
.PP
\fB\-\-utc\fR
.RS 4
Display dates and times in UTC\&. By default, local time is used\&.
.RE
.PP
\fB\-\-iso\fR
.RS 4
Display dates and times in ISO format\&. ISO format is always used for machine\-readable outputs\&.
.RE
.PP
\fB\-t, \-\-table\-style \fR\fB\fIstyle\fR\fR
.RS 4
Specifies table style\&. Table style is identified by an integer number\&.
.RE
.PP
\fB\-\-abbreviate\fR
.RS 4
Try to abbreviate texts in some columns so that tables fit the width of the screen\&.
.RE
.PP
\fB\-\-machine\-readable \fR\fB\fIformat\fR\fR
.RS 4
Specifies a machine\-readable output format\&. Possible options are csv and json\&.
.RE
.PP
\fB\-\-csvout\fR
.RS 4
Sets CSV output format\&. See
\m[blue]\fBRFC 4180\fR\m[]\&\s-2\u[1]\d\s+2
for the details, except lines end with a LF, not CR+LF\&.
.RE
.PP
\fB\-\-jsonout\fR
.RS 4
Sets JSON output format\&.
.RE
.PP
\fB\-\-separator \fR\fB\fIcharacter\fR\fR
.RS 4
Specifies the character separator for CSV output format\&.
.RE
.PP
\fB\-\-no\-headers\fR
.RS 4
Suppress headers for CSV output format\&.
.RE
.PP
\fB\-c, \-\-config \fR\fB\fIname\fR\fR
.RS 4
Use specified configuration instead of the default configuration\&. The default configuration is named "root"\&.
.RE
.PP
\fB\-\-no\-dbus\fR
.RS 4
Operate without a DBus connection\&.
.sp
Use with caution since a running snapperd will not know about modifications made to the system\&.
.RE
.PP
\fB\-r, \-\-root \fR\fB\fIpath\fR\fR
.RS 4
Operate on target root\&. Only works together with no\-dbus and only for some commands\&.
.RE
.PP
\fB\-a, \-\-ambit \fR\fB\fIambit\fR\fR
.RS 4
Operate in the specified ambit\&. Can be used to override the ambit detection\&. Allowed ambits are auto, classic and transactional\&.
.RE
.PP
\fB\-\-version\fR
.RS 4
Print version and exit\&.
.RE
.SH "COMMANDS"
.PP
Snapper provides a number of
\fIcommands\fR\&. Each command accepts the options listed in the
GLOBAL OPTIONS
section\&. These options must be specified
\fIbefore\fR
the command name\&. In addition, many commands have specific options, which are listed in this section\&. These command\-specific options must be specified
\fIafter\fR
the name of the command and
\fIbefore\fR
any of the command arguments\&.
.PP
\fBhelp\fR
.RS 4
Show short help text\&.
.RE
.PP
\fBlist\-configs [options]\fR
.RS 4
List available configurations\&.
.PP
\fB\-\-columns\fR \fIcolumns\fR
.RS 4
Select columns to show separated by comma\&.
.sp
Possible columns are: config, subvolume\&.
.RE
.RE
.PP
\fBcreate\-config [options] \fR\fB\fIsubvolume\fR\fR
.RS 4
Create a new configuration for a filesystem or subvolume\&. For this command you will likely need the global option
\fB\-\-config\fR, see
GLOBAL OPTIONS
and
CONCEPTS\&.
.PP
\fB\-f, \-\-fstype\fR \fIfstype\fR
.RS 4
Manually set filesystem type\&. Supported values are btrfs, ext4 (discontinued) and lvm\&. For lvm, snapper uses LVM thin\-provisioned snapshots\&. The filesystem type on top of LVM must be provided in parentheses, e\&.g\&. lvm(xfs)\&.
.sp
Without this option snapper tries to detect the filesystem\&.
.RE
.PP
\fB\-t, \-\-template\fR \fIname\fR
.RS 4
Name of template for the new configuration file\&.
.RE
.RE
.PP
\fBdelete\-config\fR
.RS 4
Delete a configuration for a filesystem or subvolume\&. For this command you will likely need to global option
\fB\-\-config\fR, see
GLOBAL OPTIONS
and
CONCEPTS\&.
.RE
.PP
\fBget\-config [options]\fR
.RS 4
Displays the settings of the configuration\&.
.PP
\fB\-\-columns\fR \fIcolumns\fR
.RS 4
Select columns to show separated by comma\&.
.sp
Possible columns are: key, value\&.
.sp
Columns are not selected when JSON format is used\&.
.RE
.RE
.PP
\fBset\-config\fR \fIconfigdata\fR
.RS 4
Changes the settings of the configuration\&. The settings
\fIconfigdata\fR
are a list of key\-value\-pairs separated by spaces and the key and value must be separated by an equal sign, e\&.g\&. "NUMBER_CLEANUP=yes NUMBER_LIMIT=10"\&. The value of SUBVOLUME and FSTYPE cannot be changed\&.
.RE
.PP
\fBlist (ls) [options]\fR
.RS 4
List snapshots\&.
.PP
\fB\-t, \-\-type\fR \fItype\fR
.RS 4
Selects type of snapshots to list\&. Possible values are all, single and pre\-post\&.
.RE
.PP
\fB\-\-disable\-used\-space\fR
.RS 4
Disable display of used space\&.
.sp
Calculating the used space needs some time\&. Thus this option can speedup the listing\&.
.RE
.PP
\fB\-a, \-\-all\-configs\fR
.RS 4
List snapshots from all configs accessible by the user\&.
.RE
.PP
\fB\-\-columns\fR \fIcolumns\fR
.RS 4
Select columns to show separated by comma\&.
.sp
Possible columns are: config, subvolume, number, default, active, date, user, used\-space, cleanup, description, userdata, pre\-number, post\-number, post\-date, read\-only\&.
.RE
.sp
For each snapshot the output consists of several columns\&. Some need explanation:
.PP
#, Pre # and Post #
.RS 4
The number of the snapshot\&.
.sp
For btrfs the number can be followed by a sign\&. A "\-" indicates that the snapshot is the currently mounted snapshot and a "+" indicates that the snapshot will be mounted next time (It is the btrfs default subvolume)\&. If both conditions apply a "*" is displayed\&.
.RE
.PP
Used Space
.RS 4
For btrfs the exclusive space of the btrfs quota group corresponding to the snapshot\&.
.sp
Display of used space is automatically disabled if not available, e\&.g\&. quota not enabled on btrfs\&.
.RE
.RE
.PP
\fBcreate [options]\fR
.RS 4
Create a new snapshot\&.
.PP
\fB\-t, \-\-type\fR \fItype\fR
.RS 4
Specifies the type of the new snapshot\&. Possible values are single, pre and post\&.
.RE
.PP
\fB\-\-pre\-number\fR \fInumber\fR
.RS 4
For post snapshots the number of the pre snapshot must be provided\&.
.RE
.PP
\fB\-p, \-\-print\-number\fR
.RS 4
Print number of the created snapshot\&.
.RE
.PP
\fB\-d, \-\-description\fR \fIdescription\fR
.RS 4
Description for the snapshot\&.
.RE
.PP
\fB\-c, \-\-cleanup\-algorithm\fR \fIcleanup\-algorithm\fR
.RS 4
Set the cleanup algorithm for the snapshot\&.
.RE
.PP
\fB\-u, \-\-userdata\fR \fIuserdata\fR
.RS 4
Set userdata for the snapshot\&. The key\-value pairs must be separated by comma and the key and value must be separated by an equal sign, e\&.g\&. requestid=42,user=arthur\&.
.RE
.PP
\fB\-\-command\fR \fIcommand\fR
.RS 4
Create a pre and post snapshot and run command in between\&.
.RE
.PP
\fB\-\-read\-only\fR
.RS 4
Create a read\-only snapshot\&. This is the default\&.
.RE
.PP
\fB\-\-read\-write\fR
.RS 4
Create a read\-write snapshot\&.
.RE
.PP
\fB\-\-from\fR \fInumber\fR
.RS 4
Create a snapshot from the snapshot with the provided number instead of snapshot 0\&.
.RE
.RE
.PP
\fBmodify [options] \fR\fB\fInumber\fR\fR
.RS 4
Modify a snapshot\&.
.PP
\fB\-d, \-\-description\fR \fIdescription\fR
.RS 4
New description for snapshot\&.
.RE
.PP
\fB\-c, \-\-cleanup\-algorithm\fR \fIcleanup\-algorithm\fR
.RS 4
Set the cleanup algorithm for the snapshot\&.
.RE
.PP
\fB\-u, \-\-userdata\fR \fIuserdata\fR
.RS 4
Set userdata for the snapshot\&. The key\-value pairs must be separated by comma and the key and value must be separated by an equal sign, e\&.g\&. requestid=42,user=arthur\&.
.RE
.PP
\fB\-\-read\-only\fR
.RS 4
Set the snapshot read\-only\&.
.RE
.PP
\fB\-\-read\-write\fR
.RS 4
Set the snapshot read\-write\&.
.RE
.PP
\fB\-\-default\fR
.RS 4
Set the snapshot as default snapshot\&. Only for btrfs\&.
.RE
.RE
.PP
\fBdelete (remove|rm) \fR\fB\fInumber\fR\fR\fB | \fR\fB\fInumber1\-number2\fR\fR
.RS 4
Delete a snapshot or a range of snapshots\&.
.PP
\fB\-s, \-\-sync\fR
.RS 4
Sync the filesystem after deleting the snapshots\&. The details depend on the filesystem type\&.
.sp
Btrfs normally asynchronously frees space after deleting snapshots\&. With this option snapper will wait until the space once used by the deleted snapshots is actually available again\&.
.RE
.sp
Snapshot 0 cannot be deleted\&. For btrfs the currently mounted snapshot and the snapshot that will be mounted next time (the btrfs default subvolume) can also not be deleted\&.
.RE
.PP
\fBmount \fR\fB\fInumber\fR\fR
.RS 4
Mount a snapshot\&. Not required for all filesystem types\&.
.RE
.PP
\fBumount \fR\fB\fInumber\fR\fR
.RS 4
Unmount a snapshot\&. Not required for all filesystem types\&.
.RE
.PP
\fBstatus [options] \fR\fB\fInumber1\fR\fR\fB\&.\&.\fR\fB\fInumber2\fR\fR
.RS 4
Compare the snapshots
\fInumber1\fR
and
\fInumber2\fR\&. This will show a list of files and directories that have been created, modified or deleted in the time between the two snapshots have been made\&.
.PP
\fB\-o, \-\-output\fR \fIfile\fR
.RS 4
Write output to file
\fIfile\fR\&.
.RE
.sp
The output consists of a string encoding the status followed by the filename\&. The characters of the status string are:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 1." 4.2
.\}
A "+" means the file was created, a "\-" means the file was deleted\&. A "c" means the content of the file has changed and a "t" means the type of the file has changed (e\&.g\&. from regular file to directory)\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 2." 4.2
.\}
A "p" means the permissions are have changed\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 3.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 3." 4.2
.\}
An "u" means the user ownership has changed\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 4.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 4." 4.2
.\}
A "g" means the group ownership has changed\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 5.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 5." 4.2
.\}
A "x" means the extended attribute information has changed\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 6.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 6." 4.2
.\}
An "a" means the ACL information has changed\&.
.RE
.sp
If there is no change a "\&." is outputted\&.
.RE
.PP
\fBdiff [options] \fR\fB\fInumber1\fR\fR\fB\&.\&.\fR\fB\fInumber2\fR\fR\fB [files]\fR
.RS 4
Compare the snapshots
\fInumber1\fR
and
\fInumber2\fR\&. This will show a diff of the content of files and directories that have been created, modified or deleted in the time between the two snapshots have been made\&.
.PP
\fB\-i, \-\-input\fR \fIfile\fR
.RS 4
Read files to diff from file
\fIfile\fR\&.
.RE
.PP
\fB\-\-diff\-cmd\fR \fIcommand\fR
.RS 4
Command used for comparing files\&. The default is
/usr/bin/diff \-\-new\-file \-\-unified\&. The two files to compare are passed as parameters to the command\&.
.RE
.PP
\fB\-x, \-\-extensions\fR \fIoptions\fR
.RS 4
Extra options passed to the diff command\&.
.RE
.RE
.PP
\fBundochange [options] \fR\fB\fInumber1\fR\fR\fB\&.\&.\fR\fB\fInumber2\fR\fR\fB [files]\fR
.RS 4
Undo changes done between snapshot
\fInumber1\fR
and
\fInumber2\fR\&.
.PP
\fB\-i, \-\-input\fR \fIfile\fR
.RS 4
Read files for which to undo changes from file
\fIfile\fR\&.
.RE
.RE
.PP
\fBrollback [options] [\fR\fB\fInumber\fR\fR\fB]\fR
.RS 4
Creates two new snapshots and sets the default subvolume\&. Per default the system boots from the default subvolume of the root filesystem\&. The exact actions depend on whether a number is provided or not:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Without a number, a first read\-only snapshot of the default subvolume is created\&. A second read\-write snapshot of the current system is created\&. The system is set to boot from the second snapshot\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
With a number, a first read\-only snapshot of the current system is created\&. A second read\-write snapshot is created of
\fInumber\fR\&. The system is set to boot from the second snapshot\&.
.RE
.sp
Rollback is only supported with btrfs and requires a properly configured system\&.
.PP
\fB\-p, \-\-print\-number\fR
.RS 4
Print number of the second created snapshot\&.
.RE
.PP
\fB\-d, \-\-description\fR \fIdescription\fR
.RS 4
Description for the snapshot\&.
.RE
.PP
\fB\-c, \-\-cleanup\-algorithm\fR \fIcleanup\-algorithm\fR
.RS 4
Set the cleanup algorithm for the snapshot\&.
.RE
.PP
\fB\-u, \-\-userdata\fR \fIuserdata\fR
.RS 4
Set userdata for the snapshot\&. The key\-value pairs must be separated by comma and the key and value must be separated by an equal sign, e\&.g\&. requestid=42,user=arthur\&.
.RE
.sp
The rollback command also sets the description, the cleanup algorithm and some userdata unless the values are specified on the command line\&. This will automate cleanup of snapshots created by rollbacks\&.
.sp
In other ambits than classic the rollback command does what is required to do a rollback\&. Anyway it is recommended to use specific programs in that case\&.
.RE
.PP
\fBsetup\-quota\fR
.RS 4
Sets up quota\&. Currently only supported with btrfs\&.
.RE
.PP
\fBcleanup [options] \fR\fB\fIcleanup\-algorithm\fR\fR
.RS 4
Run the cleanup algorithm
\fIcleanup\-algorithm\fR\&. Currently implemented cleanup algorithms are number, timeline and empty\-pre\-post\&. To run all cleanup algorithms, all can be provided as cleanup\-algorithm\&.
.PP
\fB\-\-path\fR \fIpath\fR
.RS 4
Cleanup all configs affecting path\&. Only useful for btrfs\&.
.RE
.PP
\fB\-\-free\-space\fR \fIfree\-space\fR
.RS 4
Try to make free\-space available\&. Only useful for btrfs\&.
.RE
.RE
.PP
\fBxadiff \fR\fB\fInumber1\fR\fR\fB\&.\&.\fR\fB\fInumber2\fR\fR\fB [files]\fR
.RS 4
Compare the extended attributes between snapshot
\fInumber1\fR
and
\fInumber2\fR\&. See examples below:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
+:user\&.foo
for created attributes
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-:user\&.bar
for removed attributes
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-+:security\&.selinux
for modified attributes
.RE
.RE
.SH "PERMISSIONS"
.PP
Non\-root users can be allowed to use a configuration by setting ALLOW_USERS or ALLOW_GROUPS in the config file\&. For all operations to work, the user must also be able to read and access the
\&.snapshots
directory inside the subvolume\&. The
\&.snapshots
directory must be owned by root and must not be writable by anybody else\&.
.PP
Here are some methods how to achieve that:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Make the directory accessible for everyone:
.sp
\fBchmod a+rx \&.snapshots\fR
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Make the directory accessible for a group the user belongs to, e\&.g\&.:
.sp
\fBchown :users \&.snapshots\fR
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
Make the directory accessible for the user using ACLs, e\&.g\&.:
.sp
\fBsetfacl \-m u:tux:rx \&.snapshots\fR
.RE
.PP
The last method can be performed by snapper, see the SYNC_ACL setting in
\fBsnapper-configs\fR(5)\&.
.SH "PLUGINS"
.PP
snapper can execute external scripts after certain actions\&. Scripts have to be placed in
/usr/lib/snapper/plugins\&. The name has to start with a digit, execution order is alphabetical\&.
.PP
The first argument of a script is the action snapper executed\&. The following actions are defined:
.PP
\fBcreate\-config\-pre \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR
.RS 4
Executed before a new config is created
.RE
.PP
\fBcreate\-config\-post \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR
.RS 4
Executed after a new config was created
.RE
.PP
\fBdelete\-config\-pre \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR
.RS 4
Executed before a config is deleted
.RE
.PP
\fBdelete\-config\-post \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR
.RS 4
Executed after a config was deleted
.RE
.PP
\fBcreate\-snapshot\-pre \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR\fB \fR\fB\fIsnapshot\-number\fR\fR
.RS 4
Executed before a new snapshot is created
.RE
.PP
\fBcreate\-snapshot\-post \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR\fB \fR\fB\fIsnapshot\-number\fR\fR
.RS 4
Executed after a new snapshot was created
.RE
.PP
\fBmodify\-snapshot\-pre \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR\fB \fR\fB\fIsnapshot\-number\fR\fR
.RS 4
Executed before a snapshot is modified
.RE
.PP
\fBmodify\-snapshot\-post \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR\fB \fR\fB\fIsnapshot\-number\fR\fR
.RS 4
Executed after a snapshot was modified
.RE
.PP
\fBdelete\-snapshot\-pre \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR\fB \fR\fB\fIsnapshot\-number\fR\fR
.RS 4
Executed before a snapshot is removed
.RE
.PP
\fBdelete\-snapshot\-post \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR\fB \fR\fB\fIsnapshot\-number\fR\fR
.RS 4
Executed after a snapshot was removed
.RE
.PP
\fBset\-default\-snapshot\-pre \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR\fB \fR\fB\fIsnapshot\-number\fR\fR
.RS 4
Executed before the default snapshot is changed
.RE
.PP
\fBset\-default\-snapshot\-post \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR\fB \fR\fB\fIsnapshot\-number\fR\fR
.RS 4
Executed after the default snapshot was changed
.RE
.PP
\fBrollback\-post \fR\fB\fIsubvolume\fR\fR\fB \fR\fB\fIfstype\fR\fR\fB \fR\fB\fIold\-snapshot\-number\fR\fR\fB \fR\fB\fInew\-snapshot\-number\fR\fR
.RS 4
Executed after a rollback was done
.RE
.PP
More actions and arguments can be added any time\&. Using snapper in the plugins is not allowed\&.
.PP
It is undefined whether the plugins are called from the client (snapper) or server (snapperd)\&.
.SH "FILES"
.PP
/etc/conf\&.d/snapper
.RS 4
Global configuration file\&.
.RE
.PP
/etc/snapper/configs
.RS 4
Directory containing configuration files\&.
.RE
.PP
/etc/snapper/config\-templates
.RS 4
Directory containing configuration templates\&.
.RE
.PP
/usr/share/snapper/config\-templates
.RS 4
Fallback directory containing configuration templates\&.
.RE
.PP
/etc/snapper/filters/*\&.txt
.RS 4
Filter files\&.
.RE
.PP
/usr/share/snapper/filters/*\&.txt
.RS 4
Fallback filter files\&.
.RE
.PP
/var/log/snapper\&.log
.RS 4
Logfile\&. Please include this file in bug reports\&.
.RE
.SH "EXIT STATUS"
.PP
Normally the exit status is 0\&. If an error occurred the exit status is 1\&. It is also an error if the exit status of a plugin is not 0\&.
.SH "NOTES"
.PP
There is no mechanism to ensure consistency of the files while a snapshot it made\&. E\&.g\&. the files of a database can be inconsistent while the database is running\&.
.PP
Consistency after undochange is not guaranteed\&. E\&.g\&. when the creation of a user is undone, there might still exist files from that user\&.
.PP
Support for individual filesystems, rollback and extended attributes are compile\-time options and may not be available\&.
.SH "HOMEPAGE"
.PP
\m[blue]\fBhttp://snapper\&.io/\fR\m[]
.SH "AUTHORS"
.PP
Arvin Schnell
.SH "SEE ALSO"
.PP
\fBsnapper-configs\fR(5),
\fBsnapper-zypp-plugin\fR(8),
\fBpam_snapper\fR(8),
\fBbtrfs\fR(8),
\fBlvm\fR(8),
\fBattr\fR(5),
\fBacl\fR(5)
.SH "NOTES"
.IP " 1." 4
RFC 4180
.RS 4
\%https://tools.ietf.org/html/rfc4180
.RE