btrfs send
我想做出类似和 的行为btrfs receive
,但基于每个文件。据我所知,我可以用来cp -ax --reflink=always
制作文件的“快照”。我们假设两个不同硬盘上的两个这样的“快照”完全相等。我如何像这样比较cp
两个重新链接文件之间的差异(并且只有差异) ?btrfs send -p
理想情况下,我希望有一个适用于任何能够进行引用链接的文件系统的解决方案,而不仅仅是 btrfs。理想情况下,我想在没有 sudo 的情况下运行它。
我知道我可以使用 查看文件范围filefrag
,但filefrag
不能保证结果准确。我宁愿多复制几兆字节,也不愿冒文件损坏的风险。
答案1
我找到了一个解决方法(尚未测试):
- 在原始磁盘上创建新的子卷 X 和子卷 Y。
- 用于
cp -ax --reflink=always
将旧版本复制到子卷 X,将新版本复制到子卷 Y。 - 使用(如果这是您第一次执行此操作)将子卷 X 复制到第二个磁盘
btrfs send
,或者按照步骤 1 和 2 中的方法从文件重新创建子卷 X(如果不是)。 - 使用 复制子卷 Y 到第二个磁盘
btrfs send -p
。 - 相应地重新链接第二个磁盘上子卷 Y 内的文件(替换旧文件)并删除该过程中使用的所有子卷。
警告:我不确定这是否有效。我需要进行广泛的测试以确保它确实发挥了应有的作用。理论上,如果子卷的创建是 100% 可重现的(=执行相同的操作两次会产生相同的 btrfs 树内部状态),那么它应该可以工作。
我仍然很高兴有一个适当的解决方案。
编辑:您当然可以检查filefrag
两个磁盘上是否产生相同的结果。