假设我有一个包含 2 个文件的目录,这两个文件完全相同且相当大(例如每个文件 2GB)。我想将该目录 rsync 到远程主机。据我了解(我可能错了),rsync 会计算文件的校验和。如果它看到 2 个文件具有相同的校验和,那么它肯定可以复制第一个文件,然后在远程主机上对第二个文件进行本地复制?这样会更快,不是吗?
类似地,rsync 在复制之前不会对所有远程文件进行哈希处理吗?如果它发现另一个文件与要传输的文件具有相同的哈希值,它可以在远程主机上进行本地复制。
rsync 支持这种功能吗?有什么方法可以启用它吗?有没有类似于 rsync 的工具可以执行这种“基于哈希”的本地复制?
答案1
类似地,rsync 在复制之前不会对所有远程文件进行哈希处理吗?如果它发现另一个文件与要传输的文件具有相同的哈希值,它可以在远程主机上进行本地复制。
不是,但齐奏做。
答案2
我认为目前没有任何产品可以作为单个软件包来实现这一点。有 WAN 优化器可以为您实现这一点,然后您仍可运行 RSYNC。
您正在寻找的是重复数据删除/重复数据重发过程。理想情况下,您实际上并不想进行重复数据删除,而是在本地进行重复数据删除,然后执行 RSYNC。这样,您只是复制链接,而不是在另一端扩展文件。
答案3
如果您的两个文件确实完全相同,那么您必须 rsync 其中一个文件,然后在 rsync 过程之外在远程端单独制作本地副本。
如果您有两个相同的文件,那么 rsync 将尝试复制它们 - 文件名(而不是校验和)是最重要的标识符。 (我刚刚在我的笔记本电脑上测试过这个!)
包装 rsync 来做你提到的一些事情会很有趣......
以下这些值得一读:
答案4
--fuzzy 选项可能做你正在寻找的事情:
从手册页中:
-y, --fuzzy
此选项告诉 rsync 它应该为任何缺失的目标文件查找基础文件。当前算法在与目标文件相同的目录中查找具有相同大小和修改时间的文件或名称相似的文件。如果找到,rsync 将使用模糊基础文件来尝试加快传输速度。
如果没有的话,具有相关编程技能的人应该能够很容易地调整选项以按照您描述的方式运行 - 尽管这可能不是您想要参与的事情!