您的位置:首页 > 理论基础 > 计算机网络

[机器迁移]如何通过网络快速传输海量(小)文件

2015-07-20 11:09 525 查看
最近公司组织了开发机迁移的活动,需要将个人用的开发机,从一个平台迁移到另外一个上面去。

由于开发机使用了一阵子,导致了机器的磁盘上积攒了大量的文件,其中,小文件占了大多数,一般都是程序,临时文件,日志文件,还有一些 virtualenv 里面的文件和库。

我们一般能够使用的,在两台服务器之间传送文件的服务,不外乎如下几类:

HTTP Server + Wget

FTP Server + Wget

scp

rsync

所有这些选项,在传输速度上都是可以满足需求的,毕竟是公司内网; 可是它们在处理众多小文件的时候又遇到了瓶颈,光是扫描磁盘上的文件列表,都会花去很长的时间。所以解决这个问题,我们分成两步:

处理海量小文件

快速传输

对于问题 1, 我们使用 tar 来合并(但不压缩) 文件,可以做到在传输文件的时候屏蔽文件数量多带来的困扰; 问题 2 ,在网络环境比较好,同时不需要加密传输的情况下,可以使用 nc 命令来完成。

NC (Net Cat)


nc - arbitrary TCP and UDP connections and listens



nc 是一个专门用来完成 点对点的 TCP/UDP 传输的工具,它可以通过 -l 参数来完成监听一个端口,将发送到端口上的数据读入; 同时可以指定 一个 IP+端口,将数据发送到指定的地址去。

结合我们提到的需求,我们需要将 home 目录,从机器 A 传输到机器 B 上面去,可以才去如下步骤:

机器 B : 监听本机端口 X,并且将数据解包之后写入磁盘


cd ~

nc -l -p X | tar xv


机器 A :打包磁盘上的工具,然后发送到机器 B 的端口 X 上


cd ~

tar cv . | nc IP-B X


经过我们的测试,使用 nc 传输文件,速率大概是使用 scp 的大概 4 倍左右; 当然,具体的表现会根据你机器、网络配置的不同有所波动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: