我正在尝试传输大约 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。答案是mbuffer
或buffer
。它们大致相似,但mbuffer
各有优势。默认缓冲区大小为 2MBmbuffer
和 1MB buffer
。较大的缓冲区更有可能永远不会为空。选择目标和目标文件系统上本机块大小的最小公倍数的块大小将提供最佳性能。
缓冲是让全部区别!如果有就用它!如果没有,就去买!使用(m}?buffer
任何工具都比单独使用任何工具要好。它几乎可以说是解决网络文件传输缓慢问题的灵丹妙药。
如果您要传输多个文件,请使用tar
“集中”将它们合并到单个数据流中。如果是单个文件,您可以使用或 I/O 重定向。 vs.cat
的开销在统计上微不足道,所以我总是使用(或尽可能使用),除非它已经是tar
cat
tar
zfs -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等。