1

我正在使用增量备份,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 发送和接收父快照,如 wiki 所述: 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 工具。

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

非常感谢!

4

1 回答 1

1

我解决了!我创建了一个 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

如果遥控器上存在名为快照的日期,我会检查btrfs subvolume show 它是否已正确同步。如果没有,我删除远程子卷/快照并重新同步。如果它已经同步,我将跳过同步。正确同步的子卷/快照具有Received UUIDandreadonly标志。

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

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

于 2021-09-22T14:03:10.723 回答