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

我正在尝试传输总共90GB的大约10万个文件。 现在我正在使用rsync守护进程,但它的速度很慢,每秒3.4MB,我需要这么做。 我想知道我有什么select,最大限度地通过互联网的100mbit连接,是非常可靠的。

你有没有考虑过Sneakernet ? 对于大型数据集,隔夜运输通常比通过互联网传输更快,更便宜。

你提到“rsync”,所以我假设你正在使用Linux:

你为什么不创build一个tar或tar.gz文件? 一个大文件的networking传输时间比许多小文件快。 你甚至可以压缩它,如果你想…

焦油不压缩:

在源服务器上:

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)文件的实际传输。

怎么样? 或TL; DR

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

例如:

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

利用这个,我已经在1Gb链路上实现了超过950 Mb / s的持续本地networking传输。 replace每个tar命令中的path以适合您正在传输的内容。

为什么? mbuffer!

到目前为止,通过networking传输大文件的最大瓶颈是磁盘I / O。 答案是mbufferbuffer 。 他们很大程度上相似,但是mbuffer有一些优点。 mbuffer的默认缓冲区大小是2MB,缓冲区的默认缓冲区大小是1MB。 较大的缓冲区更可能永远不会是空的。 select目标文件系统和目标文件系统上原始块大小的最小公倍数的块大小将提供最佳性能。

缓冲是使所有差异的东西! 使用它,如果你有它! 如果你没有它,得到它! 使用(m}?buffer加上任何东西本身都比任何东西都好,这几乎就是缓慢的networking文件传输的万能药。

如果您要传输多个文件,请使用tar将它们“汇集”成一个数据stream。 如果是单个文件,则可以使用cat或I / Oredirect。 tarcat的开销在统计学上是微不足道的,所以我总是使用tar (或zfs -send ,我可以),除非它已经是tarball了 。 这些都不保证给你元数据(特别是cat不会)。 如果你想要元数据,我会把它作为一个练习。

最后,使用ssh作为传输机制是安全的,并且带来很less的开销。 同样, sshnc的开销在统计上是不重要的。

你可以试试这里描述的tarssh技巧:

 tar cvzf - /wwwdata | ssh [email protected] "dd of=/backup/wwwdata.tar.gz" 

应该是可重写的以下内容 :

 tar cvzf - /wwwdata | ssh [email protected] "tar xvf -" 

--partial ,你会失去rsync--partialfunction。 如果这些文件没有经常变化,那么使用慢速的rsync可能是非常值得的,而在将来它会变得更快。

你可以使用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),已经存档和压缩的压缩包等来跳过这些文件。

我是SFTP的忠实粉丝。 我使用SFTP将介质从主计算机传输到我的服务器。 我通过LAN获得了很好的速度。

SFTP是可靠的,我会给你一个镜头,因为它很容易设置,而且在某些情况下可能会更快。