重新链接复制差异

重新链接复制差异

btrfs send我想做出类似和 的行为btrfs receive,但基于每个文件。据我所知,我可以用来cp -ax --reflink=always制作文件的“快照”。我们假设两个不同硬盘上的两个这样的“快照”完全相等。我如何像这样比较cp两个重新链接文件之间的差异(并且只有差异) ?btrfs send -p

理想情况下,我希望有一个适用于任何能够进行引用链接的文件系统的解决方案,而不仅仅是 btrfs。理想情况下,我想在没有 sudo 的情况下运行它。

我知道我可以使用 查看文件范围filefrag,但filefrag不能保证结果准确。我宁愿多复制几兆字节,也不愿冒文件损坏的风险。

答案1

我找到了一个解决方法(尚未测试):

  1. 在原始磁盘上创建新的子卷 X 和子卷 Y。
  2. 用于cp -ax --reflink=always将旧版本复制到子卷 X,将新版本复制到子卷 Y。
  3. 使用(如果这是您第一次执行此操作)将子卷 X 复制到第二个磁盘btrfs send,或者按照步骤 1 和 2 中的方法从文件重新创建子卷 X(如果不是)。
  4. 使用 复制子卷 Y 到第二个磁盘btrfs send -p
  5. 相应地重新链接第二个磁盘上子卷 Y 内的文件(替换旧文件)并删除该过程中使用的所有子卷。

警告:我不确定这是否有效。我需要进行广泛的测试以确保它确实发挥了应有的作用。理论上,如果子卷的创建是 100% 可重现的(=执行相同的操作两次会产生相同的 btrfs 树内部状态),那么它应该可以工作。

我仍然很高兴有一个适当的解决方案。


编辑:您当然可以检查filefrag两个磁盘上是否产生相同的结果。

相关内容