您的浏览器不支持CSS3,建议使用Firfox、Chrome等浏览器,以取得最佳显示效果

Linux借助管道远程复制大量文件

开发技术 339℃ 0 3个月前 (03-03)

摘要

Linux借助管道远程复制大量文件。

遇到一个问题,转移网站图片,需要在Linux远程计算机之间复制大量文件(文件数量多,占用总空间也大),有多种方案。

1、下载到本地再上传到目标服务器。两个服务器都在国外,并且带宽很大,直接传输速度很快。但下载到本地的做法,大大受限于本机的网速,效率实在太低。

2、scp直接递归复制文件夹。貌似文件很多时,性能不是很好。

3、rsync复制。rsync最适合需要持续同步的情况,增量同步时可以自动对比差异,只同步差异的部分,并且会自动处理压缩、断点续传。对于直接复制的情况,根据网上一些人的观点,性能或许不太好。另外还需要安装rsync工具。

4、源主机上使用tar压缩后,使用scp复制,然后在目标主机上解压。这种方式有两个问题,一个问题是需要三个步骤,必须人工干预,而且耗时较多。第二个问题是硬盘可能会不够用,因为压缩和解压过程中,服务器上需要同时存下原始文件和压缩包,而如果其中一个服务器硬盘比较小,只能存一份文件,就没法处理了。例如假设服务器有20GB空间,系统占了5GB,图片原始文件又有10GB,压缩之后是8GB,服务器没法同时存下5+10+8GB的文件。

5、利用tar结合管道复制。源文件主机上执行tar打包,通过管道传输数据到目标主机,同时通过ssh调用目标主机的tar命令实时解包,只需要一条命令就可以解决问题。这种方法需要配置允许源文件主机用ssh登录目标主机。

我传输的是图片文件,之前本地测试过,压缩并不会节省多少数据量,因此直接使用了tar的打包和解包,没有用压缩(也就是参数z或者j)。如果是一些例如像代码这种压缩后会显著减小体积的情况,考虑到网络速度相对慢,启用压缩效果更佳。

命令如下,src_dir是源文件目录,dst_host是目标主机IP或者域名,/dst_dir是目标文件夹。

tar cf - src_dir | ssh [email protected]_host "cd /dst_dir && tar xvf -"

参考资料
https://serverfault.com/questions/18125/how-to-copy-a-large-number-of-files-quickly-between-two-servers
https://serverfault.com/questions/208300/quickest-way-to-transfer-55gb-of-images-to-new-server
https://unix.stackexchange.com/questions/10026/how-can-i-best-copy-large-numbers-of-small-files-over-scp

最后,欢迎扫码关注微信公众号。微软 / Shopee / Coupang / BAT等国内外企业内推、行业和技术交流,也可以加我微信 jzj2015(注明来自博客),拉你进技术群。

本文由原创,转载请注明来源:https://www.paincker.com/linux-copy-many-files
(标注了原文链接的文章除外)

0

暂无评论

评论前:需填写以下信息,或 登录

用户登录

忘记密码?