我在不同的卷上有两个 300 GB 的文件:
- 加密本地备份
- NAS 上的加密“远程”备份)。
按照设计,这两个文件的大小相同,而且内容大多(> 90%)相同......
是否有一个有效的工具来“rsync”这些文件,并且只复制不同的部分,因此目标文件与源文件相同?
也许构建块校验和的东西来解决这个问题,我不知道......(任何比cp -f
...... rsync 更有效的东西也会抓住整个源文件来覆盖)
我在不同的卷上有两个 300 GB 的文件:
按照设计,这两个文件的大小相同,而且内容大多(> 90%)相同......
是否有一个有效的工具来“rsync”这些文件,并且只复制不同的部分,因此目标文件与源文件相同?
也许构建块校验和的东西来解决这个问题,我不知道......(任何比cp -f
...... rsync 更有效的东西也会抓住整个源文件来覆盖)
rsync
可以用来做到这一点。--no-whole-file
或--no-W
参数使用块级同步而不是文件级同步。测试用例
/dev/random
使用来自网站的大量文本文件生成随机文本文件,如下所示。这 4 个文件在所有内容上都不同。tf_2.dat
是我们的目标文件。rsync
然后使用(目标为空)将它们复制到不同的硬盘。收到以下统计信息。
现在我合并这些文件以创建一个包含大约 60% 旧数据的新文件。
现在,我同步这两个文件夹,这次使用该
--no-W
选项。可以看到大数据匹配和加速。
接下来,我再试一次,这次我将几个 shell 文件合并到目标 (
tf_2.dat
) 中,这样变化约为 2%,并且,再次使用
rsync
.我们看到一个大的匹配和加速提供快速同步。
您也可以尝试使用https://bitbucket.org/ppershing/blocksync(免责声明:我是这个特定分支的作者)。与 rsync 相比的一个优势是它只读取文件一次(据我所知,在开始增量传输之前,如果不计算校验和,rsync 不能被说服假设两个文件是不同的。不用说,读取 160GB 硬盘驱动器两次不是一个好的策略)。需要注意的是——当前版本的块同步在短 RTT 连接(例如本地主机、LAN 和本地 WiFi)上运行良好,但对于长距离同步并不是特别有用。