传输大量文件的最快,最可靠的方法是什么?


10

我正在尝试转移大约100k个文件,总计90gb。现在,我正在使用rsync守护程序,但它的速度为3.4mb / s,我需要执行多次。我想知道我有什么选择可以使Internet上的最大100mbit连接变得非常可靠。


2
您将获得近三分之一的连接-这是可以接受的,但效果并不理想。电子飞离文件的距离有多远?
Shane Madden

两台服务器之间的延迟为50毫秒。
incognito2

5
我看到的文件一旦很多hyperboleandahalf.blogspot.com/2010/04/...
涂抹

如果您使用的是rsync守护程序,则不涉及ssh,对吗?然后的解释可能是主机之间的基础结构。您可以尝试使用netperf或iperf或flowgrind来测试主机之间的速度。如果这个测试给你一个更高的传输速率,那么你应该看看如何Rsync是缓慢使事情:读取I / O服务器上的慢,写I / O上的客户端,许多小文件,文件系统等。
AndreasM

Answers:


11

您考虑过Sneakernet吗?对于大数据集,通宵运送通常比通过Internet传输更快,更便宜。


10
“永远不要低估一辆载满胶带的旅行车的带宽。” - AST
voretaq7

1
好吧,考虑到千兆位LAN硬件的价格合理,如果能够进行LAN传输,那么通过eSATA向单个主轴写入数据所花费的时间并不是那么吸引人。
memnoch_proxy

10

怎么样?或TL; DR

我发现最快的方法是组合tarmbufferssh

例如:

tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"

使用此工具,我已经在1Gb链路上实现了950 Mb / s的持续本地网络传输。替换每个tar命令中的路径以适合您要传输的内容。

为什么?mbuffer!

到目前为止,通过网络传输大文件的最大瓶颈是磁盘I / O。答案是mbufferbuffer。它们在很大程度上相似,但mbuffer具有一些优势。的默认缓冲区大小是2MB mbuffer和1MB buffer。较大的缓冲区更有可能永远不会为空。选择一个块大小,它是目标文件系统和目标文件系统上本机块大小的最小公倍数,将提供最佳性能。

缓冲才是一切的关键!如果有,请使用它!如果您没有它,那就去!使用(m}?bufferplus胜过任何事物本身。从字面上看,它几乎是缓慢的网络文件传输的灵丹妙药。

如果您要传输多个文件,则可以tar将它们“集中”在一起成为一个数据流。如果是单个文件,则可以使用cat或I / O重定向。tarvs. 的开销在cat统计上是微不足道的,因此,除非它已经是tarball,否则我总是使用tar(或zfs -send在可能的地方)。这些都不能保证为您提供元数据(特别是不会)。如果您需要元数据,我将保留它作为练习。cat

最后,ssh用于传输机制既安全又几乎没有开销。同样,sshvs nc。的开销在统计上微不足道。


有时使用SSH作为传输方式会产生加密开销。请参阅:在具有强认证的Linux计算机之间复制文件而不进行加密
ewwhite

2
如果需要,可以使用更快的加密机制。但是,您不一定需要通过ssh来传递它。我更喜欢在两侧的mbuffer上设置-O和-I端口。即使现在是两个命令,您也可以通过缓冲两端来跳过加密并最大化网络带宽。我正在本地局域网上以720 + Mbps的速度发送tar流,相当于tar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
memnoch_proxy 2013年

2
@memnoch_proxy:这是一个好建议(我投了赞成票),但在当今的时代,NSA甚至使用IMO加密数据中心(例如Google和Yahoo)之间的私有数据线,这始终是一个好习惯。使用ssh使事情变得简单。使用stunnelsocatopenssl工作过,但他们更复杂的设置简单转移。
bahamat

1
@bahamat谢谢您让我再次关注这个问题。我的建议似乎只有在可以通过VPN进行传输的情况下才是合适的。对于Internet传输,我当然也会使用ssh。
memnoch_proxy

8

您提到“ rsync”,所以我假设您使用的是Linux:

为什么不创建tar或tar.gz文件?一个大文件的网络传输时间比许多小文件要快。如果愿意,您甚至可以压缩它...

不压缩的Tar:

在源服务器上:

tar -cf file.tar /path/to/files/

然后在接收端:

cd /path/to/files/
tar -xf /path/to/file.tar

压缩焦油:

在源服务器上:

tar -czf file.tar.gz /path/to/files/

然后在接收端:

cd /path/to/files/
tar -xzf /path/to/file.tar.gz

您只需使用rsync来实际传输(tar | tar.gz)文件。


-只有在有地方可以存储档案的情况下。
Tebe

5

你可以尝试tarssh描述的伎俩在这里

tar cvzf - /wwwdata | ssh root@192.168.1.201 "dd of=/backup/wwwdata.tar.gz"

应该可重写为以下内容

tar cvzf - /wwwdata | ssh root@192.168.1.201 "tar xvf -"

但是,您会在此过程中失去的--partial功能rsync。如果文件更改不是很频繁,那么以缓慢的初始状态生活rsync可能是非常值得的,因为将来它的运行速度会更快。


2

您可以使用rsync的各种压缩选项。

-z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with suffix in LIST

二进制文件的压缩率非常低,因此您可以使用--skip-compress跳过这些文件,例如iso,已存档和压缩的tarball等。


-6

我是SFTP的忠实拥护者。我使用SFTP将媒体从主计算机传输到服务器。通过局域网,我的速度很快。

SFTP是可靠的,我会尝试一下,因为它很容易设置,并且在某些情况下可能会更快。


5
FTP需要死亡。它是未加密的,不能很好地处理中断,并且至少有六种可行的替代方案不能完全解决问题。
MDMarra

1
听说过SFTP吗?
Tillman32

8
是的,你有吗?它与FTP协议没有任何关系,除了名称和它可以移动文件的事实以外。
MDMarra

5
众所周知,FTP在穿越防火墙时也不可靠(它可以追溯到让客户端打开一个随机端口以接受反向连接的防火墙之前很酷的时间,而被动式和扩展式被动式FTP可以解决该限制的原因仅在于:黑客)
voretaq7
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.