我有几个运行 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 引用其父卷的后面序列化的卷无法找到其父卷。
目前尚不清楚是否有办法解决此问题。
以下是可能的情况:
- 在磁盘上创建卷快照,对它们进行序列化,每个快照都引用前一个快照,并永久保存所有这些序列化文件。
- 将卷反序列化到磁盘(
btrfs receive
),删除一些中间卷,然后重新序列化已删除卷之后的所有卷。