重新组合的 BTRFS 增量与原始增量是否相同?

重新组合的 BTRFS 增量与原始增量是否相同?

我有几个运行 btrfs 的系统,我想使用 btrfs 子卷发送/收到功能作为备份解决方案。我想将每日增量数据发送到偏僻的尽可能高效。这意味着我希望避免以每日增量发送更改,然后以每月增量发送相同的更改。

具体来说,我想要生成这样的夜间增量:

btrfs subvolume snapshot /home /backup/volume-date-daily
btrfs send -p /backup/volume-previous-daily -f daily-date /backup/volume-date-daily
push daily-date to remote

一段时间后,我想将每日增量合并为每月增量,而无需重新发送客户端的所有数据。如果我解压所有增量(btrfs receive),然后删除所有不需要的中间子卷,剩余的子卷是否足以让我解压客户端生成的所有未来每日增量?

例如,服务器有来自客户端的每日 1-30 条记录。我将它们解压并删除除每日 30 条记录之外的所有子卷。当我从客户端收到每日 31 条记录时,我可以使用 解压它btrfs receive吗?

答案1

从 BTRFS 工具 3.12 和 Linux 内核 3.13 开始,答案是否定的。当序列化的 BTRFS 数据(增量或其他)被反序列化(btrfs receive)并删除中间卷时,后面的卷会被更新。当它们被重新序列化(btrfs send)时,它们会具有不同的 ID。由于 ID 已更改,通过 ID 引用其父卷的后面序列化的卷无法找到其父卷。

目前尚不清楚是否有办法解决此问题。

以下是可能的情况:

  1. 在磁盘上创建卷快照,对它们进行序列化,每个快照都引用前一个快照,并永久保存所有这些序列化文件。
  2. 将卷反序列化到磁盘(btrfs receive),删除一些中间卷,然后重新序列化已删除卷之后的所有卷。

相关内容