我的问题涉及引导的增量过程。
当我使用类似的方法设置备份目录时,我可以启动快照的增量备份
(src)$ sudo btrfs send initial_snapshot -f somedir/initial_snapshot.data"
(dst)$ sudo btrfs receive initial_snapshot -f somedir/initial_snapshot.data"
(假设src
和dst
位于不同的块设备上,甚至位于不同的机器上)。
有没有办法从与 同步的子卷开始rsync
?即我可以通过这种方式引导差分同步吗?
如果我以天真的方式执行此操作(在每个快照上同步src
并创建只读快照),我会收到以下错误:dst
rsync
btrfs error: can not find parent snapshot
是的,这是可以理解的。
但是有没有办法“说服”btrfssrc
包含dst
相同的数据并且可以initial_snapshot
用作增量快照的父级?
答案1
不幸的是,除了发送/接收操作之外,您无法通过任何其他方式来引导它。发送/接收的增量传输取决于两件事:
- 目标卷上相关子卷的“已接收 UUID”属性必须与源上相应子卷的“UUID”属性正确匹配。您可以使用命令轻松检查这一点
btrfs subvolume show
,但除了直接修改这些值之外,无法设置这些值。 - 用于增量发送的父子卷中的块必须在源和目标之间匹配。换句话说,如果您发送的增量更新对文件 X 进行了更改,则目标卷上文件 X 的先前版本的副本必须与源卷上文件 X 的原始副本相同。严格来说,
rsync
如果除了跨快照之外没有涉及任何引用链接(也就是说,在源快照的父子卷内的任何内容上没有使用过 CLONE_RANGE 或 EXTENT_SAME ioctl),那么从技术上讲应该满足此要求。
从理论上讲,实际上可以解决这两个约束,但这样做需要付出巨大的努力,并且需要非常低级的 BTRFS 知识(并且是极其有风险)。