我想同时复制多个文件以加快我目前使用以下
的流程scp -r root@xxx.xxx.xx.xx:/var/www/example/example.example.com .
但它一次只复制一个文件。我有一个100 Mbps的光纤,所以我有足够的带宽可以同时复制很多,请帮忙。
答案 0 :(得分:5)
您可以将后台任务与wait命令一起使用。 Wait命令确保在处理下一行之前完成所有后台任务。即所有三个节点的scp完成后,将执行echo。
#!/bin/bash
scp -i anuruddha.pem myfile.tar centos@192.168.30.79:/tmp &
scp -i anuruddha.pem myfile.tar centos@192.168.30.80:/tmp &
scp -i anuruddha.pem myfile.tar centos@192.168.30.81:/tmp &
wait
echo "SCP completed"
答案 1 :(得分:4)
SSH可以做所谓的"多路复用" - 一个(一个服务器)的更多连接。它可以是一种提供你想要的东西的方式。查找" ControlMaster"
等关键字第二种方式是使用更多连接,然后在后台发送每个工作:
for file in file1 file2 file3 ; do
scp $file server:/tmp/ &
done
但是,这是你的问题的答案 - "如何同时复制多个文件"。为了加快速度,您可以使用较弱的加密(rc4等),也不要忘记,瓶颈可能是您的硬盘 - 因为SCP不会隐含地限制传输速度。
最后一件事是使用rsync - 在某些情况下,它可能比scp快很多......
答案 2 :(得分:3)
我不确定这是否对您有所帮助,但我通常归档(压缩不是必需的。只需归档就足够了)源文件,下载它,提取它们。这将显着加快这一过程。 在归档之前,花了> 8小时下载1GB 归档后,它花了< 8分钟做同样的事情
答案 3 :(得分:1)
那就是说,如果你并行运行多个会话,你就不会看到提速。您可以自己尝试,只需运行两个并行的SCP会话复制两个大文件。我的猜测是你没有看到明显的加速。原因是:
解决方案:
rsync
这样的工具(在引擎盖下使用SSH)复制自上次运行命令以来已更改的文件。最后一个建议可以这样做:
ssh root@xxx "cd /var/www/example ; tar cf - example.example.com" > example.com.tar
或压缩:
ssh root@xxx "cd /var/www/example ; tar czf - example.example.com" > example.com.tar.gz
注意:bzip2
压缩效果更好但速度更慢。这就是我使用gzip
(z
)执行此类任务的原因。
答案 4 :(得分:1)
您可以使用parallel-scp(AKA pscp):http://manpages.ubuntu.com/manpages/natty/man1/parallel-scp.1.html
使用此工具,您可以同时将文件(或文件)复制到多个主机。
此致
答案 5 :(得分:0)
如果指定多个文件,scp将按顺序下载它们:
scp -r root@xxx.xxx.xx.xx:/var/www/example/file1 root@xxx.xxx.xx.xx:/var/www/example/file2 .
或者,如果您希望并行下载文件,则使用scp的多个调用,将每个调用放在后台。
#! /usr/bin/env bash
scp root@xxx.xxx.xx.xx:/var/www/example/file1 . &
scp root@xxx.xxx.xx.xx:/var/www/example/file2 . &