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

inc*_*to2 10 rsync file-transfer

我正在尝试传输大约 10 万个文件,总共 90GB。现在我正在使用 rsync 守护进程,但它的速度很慢,只有 3.4mb/s,我需要多次这样做。我想知道我有哪些选项可以最大程度地通过互联网实现 100 兆位的连接并且非常可靠。

cee*_*yoz 11

你考虑过Sneakernet吗?对于大型数据集,隔夜运输通常比通过 Internet 传输更快、更便宜。

  • “永远不要低估一辆装满磁带的旅行车在高速公路上疾驰的带宽。” - AST (10认同)

bah*_*mat 11

如何?或 TL;DR

我发现最快的方法是组合tar,mbufferssh

例如:

tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
Run Code Online (Sandbox Code Playgroud)

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

为什么?缓冲!

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

缓冲是让一切变得不同的东西!有的话就用吧!如果你没有它,得到它!使用(m}?bufferplus 任何东西都比任何东西本身都好。它几乎是解决慢速网络文件传输的灵丹妙药。

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

最后,ssh用于传输机制既安全又带来很少的开销。同样,sshvs nc.的开销在统计上是微不足道的。

  • 如果需要,您可以使用更快的加密机制。但是您不一定需要通过 ssh 来传输此信息。我更喜欢在两侧的 mbuffer 上设置 -O 和 -I 端口。即使现在这是两个命令,您也可以跳过加密并通过缓冲两端来最大化网络带宽。我在本地 LAN 上以 720+Mbps 的速度发送一个 tar 流,相当于 `tar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | 焦油 -xf -` (2认同)
  • @memnoch_proxy:这是一个很好的建议(我投了赞成票),但在当今时代,NSA 甚至使用加密技术在数据中心(例如 Google 和 Yahoo)之间窃听私人数据线,IMO,始终是一个好习惯. 使用 `ssh` 使这变得简单。使用`stunnel`、`socat` 或`openssl` 也可以,但它们对于简单传输的设置更加复杂。 (2认同)

Sov*_*ero 8

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

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

没有压缩的焦油:

在源服务器上:

tar -cf file.tar /path/to/files/
Run Code Online (Sandbox Code Playgroud)

然后在接收端:

cd /path/to/files/
tar -xf /path/to/file.tar
Run Code Online (Sandbox Code Playgroud)

带压缩的焦油:

在源服务器上:

tar -czf file.tar.gz /path/to/files/
Run Code Online (Sandbox Code Playgroud)

然后在接收端:

cd /path/to/files/
tar -xzf /path/to/file.tar.gz
Run Code Online (Sandbox Code Playgroud)

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


war*_*ren 5

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

tar cvzf - /wwwdata | ssh root@192.168.1.201 "dd of=/backup/wwwdata.tar.gz"
Run Code Online (Sandbox Code Playgroud)

应该可以重写为以下内容

tar cvzf - /wwwdata | ssh root@192.168.1.201 "tar xvf -"
Run Code Online (Sandbox Code Playgroud)

但是,您会在此过程中失去 的--partial功能rsync。如果文件不是很频繁地更改,那么使用缓慢的初始值rsync可能是非常值得的,因为它将来会变得更快。


Til*_*n32 -5

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

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

  • 是的,你有吗?除了名称和它移动文件的事实之外,它与 FTP 协议没有任何关系。 (8认同)
  • FTP 需要消亡。它没有加密,不能很好地处理中断,并且至少有六种可行的替代方案,但并不完全糟糕。 (5认同)
  • FTP 在穿越防火墙时也是出了名的不可靠(它可以追溯到防火墙之前的时代,当时让你的客户端打开随机端口来接受反向连接是很酷的,而被动和扩展被动 FTP 来解决该限制的黑客技术就是:黑客) (5认同)