跳过正文

Snapper

目录

下载
#

安装 snapper 包。

对于图形界面,安装 btrfs-assistant 包。

创建快照配置
#

在为 Btrfs 子卷创建 snapper 配置之前,该子卷必须已存在。如果子卷不存在,则应在生成 snapper 配置之前创建它。

要为 Btrfs 子卷 /path/to/subvolume 创建以 config 命名的新的 snapper 配置,请运行:

# snapper -c config create-config /path/to/subvolume

这将:

  • 根据默认模板 /usr/share/snapper/config-templates/etc/snapper/configs/config 创建一个配置文件。
  • 创建一个子卷,/path/to/subvolume/.snapshots 用于存储此配置的后续快照。快照路径为 /path/to/subvolume/.snapshots/#/snapshot,其中 # 为快照编号。
  • ​/etc/conf.d/snapper 添加 configSNAPPER_CONFIGS

例如,要为挂载到 / 的子卷创建配置文件,请运行:

# snapper -c root create-config /

此时配置已生效。

拍摄快照
#

自动时间线快照
#

可以由图形界面完成。

手动快照
#

单张快照
#

默认情况下,snapper 拍摄的快照类型为 single,与其他快照没有任何特殊关系。

要手动创建子卷快照,请执行以下操作:

# snapper -c config create --description desc

上述命令未使用任何清理算法,因此快照将永久存储,直到被删除。

管理快照
#

列出配置
#

要列出所有已创建的配置,请执行以下操作:

# snapper list-configs

列出快照
#

要列出给定配置 config 的快照,请执行以下操作:

# snapper -c config list

恢复快照
#

恢复快照时,文件可能会被保留,原因可能是该文件未包含在快照中(例如,它位于另一个子卷上),或者过滤器配置排除了该文件。

首先启动到 Arch Linux Live USB/CD。

挂载顶层子卷(subvolid=5)。也就是说,省略任何 subvolid 或 subvol 挂载标志。

# cd /mnt

将损坏/旧的子卷移开,例如 @home 到 @home-backup:

# mv @home @home-backup

找到要恢复的快照编号(每行对应一个快照,因此您可以轻松地将每个快照的编号和日期进行匹配):

# grep -r '<date>'  /mnt/@home-backup/.snapshots/*/info.xml
---------------------------------------------------------------
...
/mnt/@home-backup/.snapshots/number/info.xml:  <date>2021-07-26 22:00:00</date>
...

注意info.xml 记录的日期和时间的时区为 UTC,因此必须考虑与当地时间的时差。

记住 number。

创建 snapper 拍摄的只读快照的读写快照:

# btrfs subvolume snapshot @home-backup/.snapshots/number/snapshot @home

number 是您要恢复的快照编号。

.snapshot 恢复到正常的子卷中,例如 @home:

# mv @home-backup/.snapshots @home/

以及其他需要移动的子卷,可以用 btrfs subvolume list --sort=path -t path | grep TOP_LEVEL 查看其余需要移动的子卷。

如果要删除子卷,运行:

# btrfs subvolume delete /path/to/subvolume

如果子卷包含其他需要删除的子卷,请添加 -R--recursive 选项。或者,也可以像删除常规目录一样删除子卷(rm -r,rmdir)。

注意:删除子卷之前,请确保该子卷未挂载。删除已挂载的子卷可能会导致文件系统不一致。

最后,卸载顶层子卷(ID=5)。重新按照以前的方式挂载子卷,如果有必要进行 chroot 的话。

删除快照
#

要删除快照编号 N,请执行以下操作:

# snapper -c config delete N

要删除某个配置的所有快照、.snapshots 子卷和快照程序配置文件:

# snapper -c config delete-config

其他
#

updatedb
#

默认情况下 updatedb(参见 locate )还会索引 snapper 创建的目录 .snapshots,如果您有很多快照,这可能会导致严重的性能下降和过多的内存占用。您可以通过编辑以下配置来阻止 updatedb 索引该目录:

/etc/updatedb.conf
PRUNENAMES = ".snapshots"
作者
南风
夕阳…真美…