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

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

我正在尝试传输大约 100k 个文件,总计 90gb。现在我正在使用 rsync 守护进程,但它的速度很慢,只有 3.4mb/s,我需要多次执行此操作。我想知道我有什么选择可以让互联网上的连接速度达到 100mbit 并且非常可靠。

答案1

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

答案2

怎么做?或者 TL;DR

tar我发现最快的方法是、mbuffer和的组合ssh

例如:

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

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

为什么?mbuffer!

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

缓冲是让全部区别!如果有就用它!如果没有,就去买!使用(m}?buffer任何工具都比单独使用任何工具要好。它几乎可以说是解决网络文件传输缓慢问题的灵丹妙药。

如果您要传输多个文件,请使用tar“集中”将它们合并到单个数据流中。如果是单个文件,您可以使用或 I/O 重定向。 vs.cat的开销在统计上微不足道,所以我总是使用(或尽可能使用),除非它已经是tarcattarzfs -send压缩包。这些都不能保证为您提供元数据(特别是cat不会)。如果您想要元数据,我将把它留给您作为练习。

最后,使用ssh传输机制既安全又开销很小。同样,与ssh相比,开销nc在统计上微不足道。

答案3

您提到“rsync”,因此我假设您正在使用 Linux:

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

未进行压缩的 Tar:

在源服务器上:

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

然后在接收端:

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

压缩后的 Tar:

在源服务器上:

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

然后在接收端:

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

您只需使用 rsync 即可执行 (tar|tar.gz) 文件的实际传输。

答案4

您可以使用 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等。

相关内容