暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

局域网内文件传输效率

生有可恋 2022-07-20
1634

不管是备份还是数据迁移都涉及到局域网内的文件传输,当数据量大了之后,传输效率是优先需要考虑的事。


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的数字进行编号

          • 第一个文件是被拆分的文件名

          • 第二个是拆分后的文件前缀


          命令执行的效果如下:

            $ ls
            CentOS-7.iso
            CentOS-7.iso.part000
            CentOS-7.iso.part001
            CentOS-7.iso.part002
            CentOS-7.iso.part003
            CentOS-7.iso.part004
            CentOS-7.iso.part005
            CentOS-7.iso.part006
            CentOS-7.iso.part007
            CentOS-7.iso.part008
            CentOS-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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论