btrfs 在旋转的增量文件夹上发送/接收

btrfs send / receive on incremental folders that rotate

我正在使用 rsnapshot 结合自定义的增量备份 cmd_cpcmd_rm 使用 btrfs 快照,这会产生多个 每日 btrfs 子卷:

.sync
daily.0
daily.1
daily.2

.sync 是从我备份的服务器使用 SSH 同步的文件夹。 完成后会发生这种情况:

mv daily.2/ daily.3/
mv daily.1/ daily.2/
mv daily.0/ daily.1/
rsnapshot_cp_btrfs -al .sync daily.0

cp命令翻译成btrfs subvolume snapshot -r .sync daily.0.

这一切都很好。但现在我想将所有备份同步到另一台服务器 也是,所以我有所有备份的完整镜像。此同步应始终有效, 即使它会在一周后同步(可能是由于 SSH 连接问题)。

通常使用 btrfs 发送和接收使用父级同步很容易 维基上描述的快照: https://btrfs.wiki.kernel.org/index.php/Incremental_Backup#Doing_it_by_hand.2C_step_by_step

我设想了一个只发送所有每日文件夹并维护旧文件夹的循环 备份供家长参考。

但在这种情况下 daily.0 移动到 daily.1,1 到 2,依此类推。所以这行不通。

我可以向远程服务器发送一个简单的 mv,但我不能相信这个,因为 如果出现任何错误,一天后文件夹结构将不正确。我想要一个真正的镜像,但要使用 btrfs 工具。

有没有人处理过类似的情况或知道克隆所有的最佳方法 子卷到其他服务器?

非常感谢!

我解决了!我创建了一个 bash 脚本,将名称中带有日期的所有快照同步到远程服务器。从 btrfs subvolume show.

中减去日期

所以daily.0在遥控器上可以变成2021-09-20-08-44-46

我向后同步。 daily.30 第一。 daily.0 最后。这样我就可以通过 btrfs send 的正确父级。例如:btrfs send -p daily.30 daily.29.

如果远程上存在名为 snapshot 的日期,我会检查 btrfs subvolume show 是否正确同步。如果没有,我删除远程 subvolume/snapshot 和 重新同步。如果它已经同步,我将跳过同步。正确同步的 subvolume/snapshot 具有 Received UUIDreadonly 标志。

同步后,我将远程的所有快照名称与刚刚同步的名称进行比较。 差异将被删除(因此旧快照)。

我可能会在代码长期稳定后分享代码 运行。 现在我希望以上信息对其他人有所帮助!