ssh + tar 加速远程拷贝

来源:互联网 发布:并查集算法属于什么 编辑:程序博客网 时间:2024/06/16 03:43

        在远程拷贝目录(尤其是包含很多小文件的目录)的时候,使用 scp 命令显得十分无力。对于这种情况,通常我们会先用 tar 命令进行打包,然后使用 scp 命令进行拷贝,这样固然可以大幅度提高速度,不过这将经历以下步骤(这将带来很大的额外开销:红色标记的步骤):

    1. 在源机器上打包
    2. 使用 scp 进行远程拷贝
    3. 在目标机器上解包
    4. 删除两台机器上的包
        我们可以使用 ssh 和 tar 命令的组合来完成这一操作,同时最大程度上减小额外开销,提高拷贝效率。
        比如,我们需要从 10.10.0.1 拷贝目录 /home/anke/test 到当前机器的 /tmp 目录,可以使用以下命令:
ssh anke@10.10.0.1 "cd /home/anke; tar zcf - test" | tar zxf - -C /tmp
        同样,如果我们想把 /tmp/test 目录拷贝回去,可以使用以下命令:
cd /tmp
tar zcf - test | ssh anke@10.10.0.1 tar zxf - -C /home/anke
        我把几种不同的远程拷贝策略进行了一个对比(测试的目录大小为 607M ,共有 7394 个小文件组成),测试结果如下:

使用方案耗时直接scp8m27star打包 + scp拷贝打包:0m17s  拷贝:0m15sssh + tar0m19s

        由上表可见,ssh + tar 拷贝在速度的提升上效果是很明显的,“直接 scp” 就不说了,“tar打包 + scp拷贝”方案即使没有考虑解包和删包也是要比 ”ssh + tar“方案慢的。
        另外,对于大文件来说,尤其是压缩比较高的大文件,也可以使用这种方法来实现加速拷贝。

原创粉丝点击