假设一个名为"child-subvol"的btrfs子卷位于另一个名为"root-subvol"的子卷中,如果我们对"root-subvol"进行快照,那么也应该对"child-subvol"进行快照。
由于btrfs文件系统中还不支持递归快照,那么如何替代它呢?
第一步:获取所有驻留的btrfs子卷。最好按照下面命令实现的排序顺序。
$ btrfs子卷列表——sort=-path
步骤2:根据查询到的优先级顺序,执行删除/快照操作。
$ BTRFS子卷delete
我也一直在想这个问题,但在网上找不到任何推荐的最佳实践。应该可以编写一个脚本来创建处理递归的快照。
正如Peter R所建议的,您可以编写一个脚本。但是,如果要发送子卷,则必须将其标记为只读,并且不能递归地快照到只读卷中。
为了解决这个问题,您可以在处理递归的脚本中使用btrfs-property(通过这个答案找到),使它(在所有快照被拍摄之后)将快照标记为只读,以便您可以发送它们。
或者,您可以执行
cp -a --reflink=always /path/to/root_subvol/ /path/to/child_subvol/
(--reflink=auto
以前从未为我工作过,也可以帮助您捕获错误)
它应该很快,并且具有与快照相同的优点,尽管您不需要保留旧的子卷结构。