我正在使用 rsnapshot
结合自定义的增量备份
cmd_cp
和 cmd_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.30
。 daily.0
最后。这样我就可以通过
btrfs send
的正确父级。例如:btrfs send -p daily.30 daily.29
。
如果远程上存在名为快照的日期,我会使用 btrfs subvolume show
检查
是否正确同步。如果没有,我删除远程子卷/快照并
重新同步。如果已经同步,我将跳过同步。正确的同步子卷/快照具有 Received UUID
和 readonly
标志。
同步后,我将 Remote 的所有快照名称与刚刚同步的名称进行比较。 差异将被删除(因此是旧快照)。
当代码长期稳定运行时,我可能会在将来分享代码。 现在我希望以上信息对其他人有所帮助!
关于backup - btrfs 在旋转的增量文件夹上发送/接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69164668/