Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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

snapper Status over Time
图中显示了创建 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_bfile_c 冲突,系统可能会损坏。
您还可以使用 snapper -c SnapperExample undochange 2..1 命令。在这种情况下,当前系统会将 edit 的 file_a 版本替换为从 snapshot_1 复制的版本,这会撤销在创建 snapshot_2 后对该文件的编辑。

使用 mount 和 unmount 命令反向更改

undochange 命令并不总是是恢复修改的最佳方法。使用 statusdiff 命令,您可以做出合格的决定,并使用 mountunmount 命令而不是 Snapper。只有在您要挂载快照并浏览独立于 Snapper 工作流的内容时,mountunmount 命令才有用。
如果需要,mount 命令在挂载前激活相应的 LVM Snapper 快照。例如,如果您有兴趣挂载快照并手动提取多个文件的旧版本,请使用 mountunmount 命令。要手动恢复文件,请将它们从挂载的快照复制到当前文件系统中。当前文件系统,快照 0 是 过程 14.1, “创建 Snapper 配置文件” 中创建的实时文件系统。将文件复制到原始 /mount-point 的子树中。
对于显式客户端请求,使用 mountunmount 命令。/etc/snapper/configs/config_name 文件包含 ALLOW_USERS= 和 ALLOW_GROUPS= 变量,您可以在其中添加用户和组。然后,snapper d 允许您为添加的用户和组执行挂载操作。