14.4. Reversing Changes in Between Snapshots
To reverse changes made between two existing Snapper snapshots, use the
undochange
command in the following format, where 1
is the first snapshot and 2
is the second snapshot:
snapper -c config_name undochange 1..2
Important
Using the
undochange
command does not revert the Snapper volume back to its original state and does not provide data consistency. Any file modification that occurs outside of the specified range, for example after snapshot 2, will remain unchanged after reverting back, for example to the state of snapshot 1. For example, if undochange
is run to undo the creation of a user, any files owned by that user can still remain.
There is also no mechanism to ensure file consistency as a snapshot is made, so any inconsistencies that already exist can be transferred back to the snapshot when the
undochange
command is used.
Do not use the Snapper
undochange
command with the root file system, as doing so is likely to lead to a failure.
The following diagram demonstrates how the
undochange
command works:
Figure 14.1. Snapper Status over Time
The diagram shows the point in time in which
snapshot_1
is created, file_a
is created, then file_b
deleted. Snapshot_2
is then created, after which file_a
is edited and file_c
is created. This is now the current state of the system. The current system has an edited version of file_a
, no file_b
, and a newly created file_c
.
When the
Be aware that if
undochange
command is called, Snapper generates a list of modified files between the first listed snapshot and the second. In the diagram, if you use the snapper -c SnapperExample undochange 1..2
command, Snapper creates a list of modified files (that is, file_a
is created; file_b
is deleted) and applies them to the current system. Therefore:
- the current system will not have
file_a
, as it has yet to be created whensnapshot_1
was created. file_b
will exist, copied fromsnapshot_1
into the current system.file_c
will exist, as its creation was outside the specified time.
file_b
and file_c
conflict, the system can become corrupted.
You can also use the
snapper -c SnapperExample undochange 2..1
command. In this case, the current system replaces the edited version of file_a
with one copied from snapshot_1
, which undoes edits of that file made after snapshot_2
was created.
Using the mount and unmount Commands to Reverse Changes
The
undochange
command is not always the best way to revert modifications. With the status
and diff
command, you can make a qualified decision, and use the mount
and unmount
commands instead of Snapper. The mount
and unmount
commands are only useful if you want to mount snapshots and browse their content independently of Snapper workflow.
If needed, the
mount
command activates respective LVM Snapper snapshot before mounting. Use the mount
and unmount
commands if you are, for example, interested in mounting snapshots and extracting older version of several files manually. To revert files manually, copy them from a mounted snapshot to the current file system. The current file system, snapshot 0, is the live file system created in Procedure 14.1, “Creating a Snapper Configuration File”. Copy the files to the subtree of the original /mount-point.
Use the
mount
and unmount
commands for explicit client-side requests. The /etc/snapper/configs/config_name
file contains the ALLOW_USERS= and ALLOW_GROUPS= variables where you can add users and groups. Then, snapperd
allows you to perform mount operations for the added users and groups.