btrfs 增量快照同步:使用 rsync 进行引导

btrfs 增量快照同步:使用 rsync 进行引导

一些文章和工具在网络上关于快照的差异同步BTFS

我的问题涉及引导的增量过程。

当我使用类似的方法设置备份目录时,我可以启动快照的增量备份

(src)$ sudo btrfs send initial_snapshot -f somedir/initial_snapshot.data"
(dst)$ sudo btrfs receive initial_snapshot -f somedir/initial_snapshot.data"

(假设srcdst位于不同的块设备上,甚至位于不同的机器上)。

有没有办法从与 同步的子卷开始rsync?即我可以通过这种方式引导差分同步吗?

如果我以天真的方式执行此操作(在每个快照上同步src并创建只读快照),我会收到以下错误:dstrsync

btrfs error: can not find parent snapshot

是的,这是可以理解的。

但是有没有办法“说服”btrfssrc包含dst相同的数据并且可以initial_snapshot用作增量快照的父级?

答案1

不幸的是,除了发送/接收操作之外,您无法通过任何其他方式来引导它。发送/接收的增量传输取决于两件事:

  1. 目标卷上相关子卷的“已接收 UUID”属性必须与源上相应子卷的“UUID”属性正确匹配。您可以使用命令轻松检查这一点btrfs subvolume show,但除了直接修改这些值之外,无法设置这些值。
  2. 用于增量发送的父子卷中的块必须在源和目标之间匹配。换句话说,如果您发送的增量更新对文件 X 进行了更改,则目标卷上文件 X 的先前版本的副本必须与源卷上文件 X 的原始副本相同。严格来说,rsync如果除了跨快照之外没有涉及任何引用链接(也就是说,在源快照的父子卷内的任何内容上没有使用过 CLONE_RANGE 或 EXTENT_SAME ioctl),那么从技术上讲应该满足此要求。

从理论上讲,实际上可以解决这两个约束,但这样做需要付出巨大的努力,并且需要非常低级的 BTRFS 知识(并且是极其有风险)。

相关内容