如何以尽可能少的CPU和带宽开销来同步大文件?


13

我有一个500 GB的文件,我打算对其进行远程备份。该文件经常更改。我将其从桌面同步到服务器。两者都可以运行rsync客户端或服务器。

正确的命令是什么?我尝试过的那些沙发已经永久使用或表现得很奇怪。

示例和结果:

rsync -cv --partial --inplace --no-whole-file /desktop/file1 myserver.com::module/file1 

似乎可以工作,但前提是我要进行两次(?!)。还有,慢。

上面的命令是在两台计算机上还是仅在发送计算机上进行校验和?否则正确吗?


这么大的文件经常更改?使用rsync,您将获得非常非常令人失望的结果……
Ignacio Vazquez-Abrams 2010年

还有其他建议吗?我应该可以使用某些应用程序,Dropbox的专有客户端做得很好。参见forums.dropbox.com/topic.php?id=17631
Johan Allgoth 2010年

--inplace暗示--partial参见:linux.die.net/man/1/rsync
Ray

Answers:


12

它永远不会很快,因为rsync必须读取/校验整个文件,并且读取500GB会花费很长时间,除非您将其存储在SSD或其他东西上。

尝试rsync -vhz --partial --inplace <file/server stuff>

-c表示它在执行任何传输之前对整个文件进行校验和,而不是使用时间戳记是否已更改,这意味着将整个文件读取两次。如果时间戳没有更改(应该更改),那么您可以touch在运行rsync之前先保存文件。

如果未编写脚本,则可以添加它,--progress以便可以查看其运行时的运行情况。


是的,我知道“大文件==长时间处理”。但是我觉得我这里缺少什么,请看上面的评论。如果Dropbox可以做到,我们也可以!=)我没有说,但是我也尝试了不使用-c的情况,但仍然很慢。
Johan Allgoth 2010年

2
--inplace暗示--partial

2

尽管它不是rsync,但根据您要执行的操作,它可能会更好。我当时正在执行类似的备份任务,而且肯定更快。

使用netcat将tar管道从一台机器连接到另一台机器。

在您的源计算机上:

tar -cpv --atime-preserve=system . | nc -q 10 -l -p 45454

您正在创建一个压缩包,保留了权限和时间,然后将其通过管道输送到端口45454上的netcat

在您的备份机器上

nc -w 10 X.X.X.X 45454 | tar -xpv

X.X.X.X =源计算机的本地IP地址。

对我来说,这很好。它通过有线LAN的速度为25-30 MB / s,而使用rsync的速度为2-3 MB / s。缺点是:它不同步,仅复制源代码中的内容。对于您所描述的备份-一个500GB的文件-可以很好地工作。

您可能必须以root用户身份执行此操作,以避免权限问题,否则您可能会很幸运。

FWIW,我最初是在这里了解到的:http : //www.screenage.de/blog/2007/12/30/using-netcat-and-tar-for-network-file-transfer/


1
tarrsync要传输大量小文件时要好。nc在快速连接时使用,还可以提高传输速率,因为您没有SSH加密的开销(我在对等连接中不需要)
jornane

0

为了避免网络开销,只需使用rsync协议,而不要使用SSH。默认情况下,rsync在指定诸如hostname:/ path之类的URL时使用SSH。请改用rsync:// hostname / path来使用更快的rsync协议。这样就不需要使用tar / netcat了。rsync delta算法应该更快。

另请参阅https://gergap.wordpress.com/tag/rsync/以获取更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.