我正在尝试转移大约100k个文件,总计90gb。现在,我正在使用rsync守护程序,但它的速度为3.4mb / s,我需要执行多次。我想知道我有什么选择可以使Internet上的最大100mbit连接变得非常可靠。
我正在尝试转移大约100k个文件,总计90gb。现在,我正在使用rsync守护程序,但它的速度为3.4mb / s,我需要执行多次。我想知道我有什么选择可以使Internet上的最大100mbit连接变得非常可靠。
Answers:
您考虑过Sneakernet吗?对于大数据集,通宵运送通常比通过Internet传输更快,更便宜。
我发现最快的方法是组合tar
,mbuffer
和ssh
。
例如:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
使用此工具,我已经在1Gb链路上实现了950 Mb / s的持续本地网络传输。替换每个tar命令中的路径以适合您要传输的内容。
到目前为止,通过网络传输大文件的最大瓶颈是磁盘I / O。答案是mbuffer
或buffer
。它们在很大程度上相似,但mbuffer
具有一些优势。的默认缓冲区大小是2MB mbuffer
和1MB buffer
。较大的缓冲区更有可能永远不会为空。选择一个块大小,它是目标文件系统和目标文件系统上本机块大小的最小公倍数,将提供最佳性能。
缓冲才是一切的关键!如果有,请使用它!如果您没有它,那就去!使用(m}?buffer
plus胜过任何事物本身。从字面上看,它几乎是缓慢的网络文件传输的灵丹妙药。
如果您要传输多个文件,则可以tar
将它们“集中”在一起成为一个数据流。如果是单个文件,则可以使用cat
或I / O重定向。tar
vs. 的开销在cat
统计上是微不足道的,因此,除非它已经是tarball,否则我总是使用tar
(或zfs -send
在可能的地方)。这些都不能保证为您提供元数据(特别是不会)。如果您需要元数据,我将保留它作为练习。cat
最后,ssh
用于传输机制既安全又几乎没有开销。同样,ssh
vs nc
。的开销在统计上微不足道。
tar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
ssh
使事情变得简单。使用stunnel
,socat
或openssl
工作过,但他们更复杂的设置简单转移。
您提到“ 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)文件。
您可以使用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等。
我是SFTP的忠实拥护者。我使用SFTP将媒体从主计算机传输到服务器。通过局域网,我的速度很快。
SFTP是可靠的,我会尝试一下,因为它很容易设置,并且在某些情况下可能会更快。