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

标签 backup clone mirror btrfs rsnapshot

我正在使用 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 工具。

是否有人遇到过类似的情况或知道克隆所有内容的最佳方法 子卷到其他服务器?

非常感谢!

最佳答案

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

因此 daily.0 在 Remote 上可以变为 2021-09-20-08-44-46

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

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

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

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

关于backup - btrfs 在旋转的增量文件夹上发送/接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69164668/

相关文章:

c++ - 如果基类不应该是抽象的,处理复制多态对象的虚拟方法的最佳方法是什么?

emacs - 忽略 diff 中的 Emacs 自动生成的文件

ssh - 镜像rsnapshot备份目录

用于重要文件备份的 git - 为什么不呢?

c# - 我应该使用 ToList() 深度克隆 IList 吗?

git - ! [远程拒绝] 镜像 git 存储库后出现错误

php - 在没有 exec/passthru 的情况下从 PHP 中的目录构建 Tar 文件

javascript - jQuery Clone() 在 asp.net 页面中的行为不正常

maven - 相同存储库的多个 Maven 镜像

html - 问号字符显示在文本中。为什么是这样?