比 rsync 更智能的文件传输?

d-b*_*d-b 8 rsync file-transfer checksum hfs+

我有一个大文件(2-3 GB,二进制,未记录格式),我在两台不同的计算机上使用它(通常我在桌面系统上使用它,但当我旅行时,我把它放在我的笔记本电脑上)。我使用 rsync 来回传输这个文件。

我不时对这个文件进行小的更新,更改不到 100 kB。这发生在两个系统上。

据我所知,rsync 的问题在于,如果它认为文件在源和目标之间发生了变化,它会传输完整的文件。在我的情况下,当文件的一小部分发生更改时,感觉就像是在浪费时间。我设想了一个协议,其中源和目标上的传输代理首先校验整个文件,然后比较结果。当他们意识到整个文件的校验和不同时,他们将文件拆分为 A 和 B 两部分,分别对它们进行校验。

啊哈,B 在两台机器上是一样的,我们忽略那一半。现在它将 A 拆分为 A1 和 A2。好吧,只有A2发生了变化。将 A2 拆分为 A2I 和 A2II 并进行比较等。以递归方式执行此操作,直到找到例如三个部分,每个部分均为 1 MB,在源和目标之间存在差异,然后仅传输这些部分并将它们插入目标文件中的正确位置。今天,有了快速的 SSD 和多核 CPU,这种并行化应该非常高效。

所以我的问题是,今天是否有任何工具可以像这样(或以我无法想象但具有类似结果的另一种方式)工作?

已发布澄清请求。我主要使用 Mac,所以文件系统是 HFS+。通常我这样启动 rsync

rsync -av --delete --progress --stats- 在这种情况下,我有时使用 SSH,有时使用 rsyncd。当我使用 rsyncd 时,我是这样启动的rsync --daemon --verbose --no-detach

第二个说明:我要求使用一个工具来传输存在于两个位置的文件的增量,并且/或者 rsync 是否真的提供了这个。我对 rsync 的经验是它可以完整传输文件(但现在有一个答案可以解释这一点:rsync 需要一个 rsync 服务器才能仅传输增量,否则(例如,使用 ssh-shell)它会传输整个文件文件,但发生了很大变化)。

roa*_*ima 9

如果 Rsync 作为单个进程负责源文件和目标文件,则它不会使用增量,但会完整传输完整文件。当源计算机和目标计算机上运行单独的客户端和服务器进程时,它可以传输增量。

当 rsync 是唯一进程时,它不会发送 delta 的原因是为了确定它是否需要发送 delta,它需要读取源文件和目标文件。当它完成时,它可能还不如直接复制文件。

如果您使用这种形式的命令,您只有一个 rsync 进程:

rsync /path/to/local/file /network/path/to/remote/file
Run Code Online (Sandbox Code Playgroud)

如果您使用这种形式的命令,您有两个 rsync 进程(一个在本地主机上,一个在远程主机上)并且可以使用增量:

rsync /path/to/local/file remote_host:/path/to/remote/file
Run Code Online (Sandbox Code Playgroud)

  • 是的,我使用主机名,通过 ssh- 或 rsync-协议(即,不是 file://),例如`rsync://remote.local:/myFile /myFile;` (2认同)