不管是备份还是数据迁移都涉及到局域网内的文件传输,当数据量大了之后,传输效率是优先需要考虑的事。
Windows 到 Windows 的文件传输没有太多好讨论的,一般效率都不高。可用的方案就是 445端口 smb目录共享和 FTP 这两种通用方案。以下主要讨论服务器是Linux的场景。
从服务器上下载文件,使用 python 的 http 模块,大文件传输基本上可以把网速跑满。
$ python3 -m http.server 10000$ python2 -m SimpleHTTPServer 20000
如果涉及到很多小文件的话,可以先打包再传输。
# 打包tar cvf test.tar testdir/# 查看压缩包内容tar tvf test.tar# 解压tar cvf test.tar -C testdir2
在使用 tar 解压时,默认会解压至当前目录。可以使用 -C 切换目标目录,也可以先新建一个目录再到新建的目录中执行解压命令。
# 在新建的目录中执行解压命令$ mkdir testdir2; cd testdir2$ tar cvf ../test.tar
大文件可以提高文件传输效率,但如果一个任务没法把带宽占完的情况下。大文件传输反而会造成性能瓶颈。这时可以考虑把大文件拆成多份小文件,通过并发提高文件传输效率。当拆分的文件传输完毕,再将拆分的文件合并,比较原文件和目标文件是否一致,从而确定任务是否正确执行。
文件拆分的命令
$ split -n 10 -d -a 3 CentOS-7.iso CentOS-7.iso.part
命令说明:
-n 10 拆成10等份
-d -a 3 以长度为3的数字进行编号
第一个文件是被拆分的文件名
第二个是拆分后的文件前缀
命令执行的效果如下:
$ lsCentOS-7.isoCentOS-7.iso.part000CentOS-7.iso.part001CentOS-7.iso.part002CentOS-7.iso.part003CentOS-7.iso.part004CentOS-7.iso.part005CentOS-7.iso.part006CentOS-7.iso.part007CentOS-7.iso.part008CentOS-7.iso.part009
文件合并:
$ cat CentOS-7.iso.part* > new.iso
文件传输完成后,将小文件合并,然后比较文件的md5值来验证文件的完整性。
$ md5sum new.iso$ md5sum CentOS-7.iso
对于多个小文件的传输可以多次执行 rsync 来提高并发。实际操作可以参考之前写的一篇贴子:
并行执行rsync
hyang0,公众号:生有可恋通过增加并发提高小文件传输速度
rsync 是双向的,既可下载又可上传。但缺点是它依赖 ssh,而 ssh 的传输速度不太高。当单任务速度不高的情况下,可以通过提高并发数将带宽提起来。
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。
文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




