14.4. 在快照之间撤销更改
要在两个现有的 Snapper 快照之间反向更改,请使用 undochange 命令,其中
1
是第一个快照,2
是第二个快照:
snapper -c config_name undochange 1..2
重要
使用 undochange 命令不会将 Snapper 卷恢复到其原始状态,且不会提供数据一致性。任何在指定范围之外的文件修改(如快照 2 后)将在恢复后保持不变,例如快照 1 的状态。例如,如果运行 undochange 来撤销用户的创建,则该用户拥有的任何文件仍然可以保留。
此外,也没有保证文件一致性为快照的机制,因此使用 undochange 命令时,已存在的任何不一致的不一致都将传输回快照。
不要将 Snapper undochange 命令与 root 文件系统一起使用,因为这样做可能会导致失败。
下图显示了 undochange 命令如何工作:
图 14.1. snapper Status over Time
[D]
图中显示了创建
snapshot_1
的时间点,创建 file_a
,然后删除 file_b
。然后,会创建 Snapshot_2
,之后编辑 file_a
并创建了 file_c
。现在,这是系统的当前状态。当前系统具有 file_a
的编辑版本,无 file_b
以及新创建的 file_c
。
当调用 undochange 命令时,Snapper 会在第一个列出的快照和第二个快照之间生成修改的文件列表。在图中,如果您使用 snapper -c SnapperExample undochange 1..2 命令,Snapper 会创建修改的文件列表(即
请注意,如果
file_a
已创建;删除了 file_b
),并将其应用到当前的系统。因此:
- 当前系统没有
file_a
,因为它必须在snapshot_1
创建时创建。 file_b
将存在,从snapshot_1
复制到当前系统。file_c
将存在,因为它的创建是在指定时间之外。
file_b
和 file_c
冲突,系统可能会损坏。
您还可以使用 snapper -c SnapperExample undochange 2..1 命令。在这种情况下,当前系统会将 edit 的
file_a
版本替换为从 snapshot_1
复制的版本,这会撤销在创建 snapshot_2
后对该文件的编辑。
使用 mount 和 unmount 命令反向更改
undochange 命令并不总是是恢复修改的最佳方法。使用 status 和 diff 命令,您可以做出合格的决定,并使用 mount 和 unmount 命令而不是 Snapper。只有在您要挂载快照并浏览独立于 Snapper 工作流的内容时,mount 和 unmount 命令才有用。
如果需要,mount 命令在挂载前激活相应的 LVM Snapper 快照。例如,如果您有兴趣挂载快照并手动提取多个文件的旧版本,请使用 mount 和 unmount 命令。要手动恢复文件,请将它们从挂载的快照复制到当前文件系统中。当前文件系统,快照 0 是 过程 14.1, “创建 Snapper 配置文件” 中创建的实时文件系统。将文件复制到原始 /mount-point 的子树中。
对于显式客户端请求,使用 mount 和 unmount 命令。
/etc/snapper/configs/config_name
文件包含 ALLOW_USERS= 和 ALLOW_GROUPS= 变量,您可以在其中添加用户和组。然后,snapper d
允许您为添加的用户和组执行挂载操作。