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



我使用的是使用rsnapshot和自定义的增量备份cmd_cpcmd_rm要利用btrfs快照,这个过程是多重的每日BTRFS子卷:

.sync
daily.0
daily.1
daily.2

.sync是使用SSH从服务器I备份同步到的文件夹。完成后会发生如下操作:

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发送和使用parent接收会很容易同步维基上描述的快照: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.

如果远程上存在命名为快照的日期,我用btrfs subvolume show检查是否正确同步。如果不存在,则删除远端子卷/快照re-sync。如果已经同步,我将跳过同步。正常同步的子卷/快照具有Received UUIDreadonly标志。

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

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

最新更新