我需要通过封闭网络(LAN)将大量数据(超过 10 TB)从一台机器传输到另一台机器!有没有行之有效的方法可以做到这一点?
我正在考虑 FTP?这是正确的方法吗?
任何建议都会有帮助!
谢谢,Prashanth
答案1
任何协议都不存在海量数据的问题,问题在于你有多少文件以及需要传输什么(只是一堆数据或文件权限、所有者等)。FTP 对此来说是一个糟糕的解决方案,而且效率低下。rsync、glusterfs 是个好东西(tm)等等……取决于……
如果连接速度较低,则通过 LAN 传输 10 TB 数据将需要花费大量时间。
如果您可以扩展带宽 - 添加链路聚合,在服务器上使用绑定(尤其是 LACP) - 您将赢得一些传输时间。此外,请确保您的磁盘驱动器具有足够的能力以您需要的速度传输数据。
答案2
我认为 webdav 或 rsync 也不错。甚至 Cifs 或 NFS 也不错,在 Windows 环境中,我可能会使用 robocopy + cifs 和多线程来提高复制速度。
在Linux上可能是cp + NFS和GNU并行https://savannah.gnu.org/projects/parallel/
我希望它对你有用:)
答案3
FTP 可以工作,但我要确保客户端和服务器都合理高效,并且——最重要的是——提供恢复传输的能力。
我还建议看一下 rsync,因为它非常高效并且提供了许多用于控制带宽和持续同步的选项(如果有必要的话)。
答案4
在 Linux 上我通常在接收端执行以下操作:
nc -l 43210 | tar xf -
在发送方:
tar cf - . | dd bs=1M | nc receiving_hostname 43210
然后我在发送端的另一个终端运行以获取发送控制台上的实时传输统计信息:
while sleep 10; do killall -USR1 dd; done
这仅使用简单的原始 TCP 传输 — 无需配置 FTP/NFS/CIFS 服务器。这将传输大约1Gbps 网络,24 小时内 10TB如果两侧的磁盘都足够快的话。
您可能需要在接收端的防火墙中允许连接到使用的端口(在我的示例中为 43210)。它也应该适用于其他操作系统,如 OSX 或 FreeBSD。在 Windows 上,您可以使用我的“dot_nc” 和 “dot_nc_l”,它们是Windows 上用 C# 实现的简单等价物,我曾经用它们来对 Windows 上的原始 TCP 传输进行基准测试nc
。nc -l