如何获取btrfs subvol的recursion快照?

假设一个名为“child-subvol”的btrfs subvol在另一个subvol中,例如“root-subvol”,并且如果我们拍摄了“root-subvol”的快照,那么“child-subvol”也应该被拍摄成快照。

由于在btrfs文件系统中还没有recursion快照支持,所以如何实现呢?

我一直想知道这一点,并没有能够找到任何推荐的最佳做法在线。 应该可以写一个脚本来创建处理递归的快照。

第1步:获取所有驻留的btrfs子卷。 最好按照下面的命令实现的排序顺序。

$ btrfs subvolume list –sort = -path <top_subvol>

步骤2:按照获得的优先顺序,执行删除/快照操作。

$ btrfs subvolume delete <subvol-name>

正如Peter R所说,你可以写一个脚本。 但是,如果要发送子卷,则必须将其标记为只读,并且不能将递归快照到只读卷。

为了解决这个问题,你可以在处理递归的脚本中使用btrfs-property (通过这个answear找到),使得它(在所有的快照被拍摄之后)只读标记快照,所以你可以发送它们。

或者,你可以做

cp -a --reflink=always /path/to/root_subvol/ /path/to/child_subvol/ 

--reflink=auto之前从未为我工作,也可以帮助你捕捉错误)

尽管不保留旧的子体积结构,但它应该是快速的,并且具有与快照相同的优点。