相关疑难解决方法(0)

比 rsync 更智能的文件传输?

我有一个大文件(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)它会传输整个文件文件,但发生了很大变化)。

rsync file-transfer checksum hfs+

8
推荐指数
1
解决办法
8036
查看次数

为什么 rsync 不进行增量传输

我有大约 77MB 的二进制文件:

nupic@nupic-virtualbox:~/VboxSharedFolder/experiments/sync/exp2$ ls -lah src/
total 77M
drwxrwx--- 1 root vboxsf    0 Jun 21 13:31 .
drwxrwx--- 1 root vboxsf 4.0K Jun 21 16:21 ..
-rwxrwx--- 1 root vboxsf  77M May 27  2014 binary.bin
Run Code Online (Sandbox Code Playgroud)

我一直在玩rsync它的 delta 算法功能,看看它是如何工作的。想法是在二进制文件中进行细微的差异,并查看使用多种方法传输了多少数据。为了这些目的,我制作了非常简单的脚本:

#!/bin/bash
# rsync does not trnansfers delta over local by default
sed 's%\x00\x00\x00\x20\x66\x74\x79\x70\x69\x73\x6f\x6d\x00\x00\x02\x00%\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11%' src/binary.bin > dst/binary.bin
strace -f -e trace=read,write -o rw_rsync_local_default.log rsync -avcz --progress src/ dst/

# rsync -no-W should enables delta tranfer no matter if local or …
Run Code Online (Sandbox Code Playgroud)

scp rsync

7
推荐指数
1
解决办法
3557
查看次数

标签 统计

rsync ×2

checksum ×1

file-transfer ×1

hfs+ ×1

scp ×1