我使用scp并行地复制文件,使用GNU并行我下面的shell脚本,它工作得很好。
我不知道如何在下面的shell脚本中使用rsync来代替scp。我想看看rsync在传输速度上是否会比scp有更好的性能。
下面是我的问题描述-
我正在将文件从machineB和machineC复制到machineA中,因为我在machineA上运行下面的shell脚本。
如果machineB中没有这些文件,那么它肯定在machineC中,所以我将首先尝试从machineB复制文件,如果它不在machineB中,那么我将尝试从machineC复制相同的文件。
我正在使用GNU并行库并行复制文件,而且它工作得很好。目前,我正在并行复制5个文件,包括主文件和二级文件。
下面是我的shell脚本,我有-
#!/bin/bash
export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
readonly FILERS_LOCATION=(machineB machineC)
export FILERS_LOCATION_1=${FILERS_LOCATION[0]}
export FILERS_LOCATION_2=${FILERS_LOCATION[1]}
PRIMARY_PARTITION=(550 274 2 546 278) # this will have more file numbers
SECONDARY_PARTITION=(1643 1103 1372 1096 1369 1568) # this will have more file numbers
export dir3=/testing/snapshot/20140103
do_Copy() {
el=$1
PRIMSEC=$2
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/.
}
export -f do_Copy
parallel --retries 10 -j 5 do_Copy {} $PRIMARY ::: "${PRIMARY_PARTITION[@]}" &
parallel --retries 10 -j 5 do_Copy {} $SECONDARY ::: "${SECONDARY_PARTITION[@]}" &
wait
echo "All files copied."是否有任何方法将上述scp命令替换为rsync,但我仍然希望同时复制PRIMARY和SECONDARY的5个文件?
发布于 2014-05-24 20:05:00
rsync旨在有效地同步文件夹和文件的两个层次结构。
虽然它可以用来传输单独的文件,但是它不会帮助您很好地使用这样的文件,除非您已经在每个端都有一个文件的版本,它们之间的差别很小。在层次结构中的单个文件上并行运行多个rsync实例,会使工具的用途落空。
虽然triplee是对的,您的任务是I/O绑定的,而不是CPU绑定的,所以在典型的情况下,不管您使用的是rsync还是scp,并行任务都不会有帮助,但是有一种情况可以帮助并行化网络传输:如果发送方正在抑制请求。在这种情况下,为多个不同的文件夹中的每一个运行一个rsync实例可能有一定的价值,但这将使代码复杂化,您必须对这两种解决方案进行概要分析,以发现您是否真正获得了任何好处。
简而言之:只运行一个rsync实例;从另一种方法获得的任何性能提升都不太值得。
发布于 2014-05-28 08:37:54
您还没有给我们足够的信息来知道您是否在一条明智的道路上,但我怀疑您应该查看合唱,甚至可能是GlusterFS。这与您所做的不同,因为它们是连续同步工具,而不是定期运行的,不过我怀疑,如果您真的想要这样的话,可以定期运行lsyncd。我还没有尝试lsyncd 2.x,但我发现它们增加了并行同步过程。如果您的实际场景所涉及的不仅仅是您所描述的三台机器,那么查看一些对等文件共享协议甚至可能是有意义的。
在当前的方法中,除非文件非常大,否则大多数延迟可能与建立连接和验证连接的开销有关。对每个文件单独执行这些操作是很昂贵的,特别是在基于ssh的协议上。最好将文件列表分解为批处理,并将这些批处理传递到复制机制中。是否为此使用rsync可能不太重要,但如果您首先为rsync进程创建要处理的文件列表,则可以通过--files-from选项将其传递给rsync。
你想弄清楚同步速度的限制因素是什么。大概是网络带宽,网络延迟,文件IO,或者CPU (校验和或压缩,但可能只有当你有低端硬件)。
了解文件从一个同步运行到另一个同步的模式可能也很重要。上一次运行时是否有许多未修改的文件?现有文件会改变吗?这些更改是否会使大量的块保持不变(例如数据库文件),还是只被附加(例如日志文件)?您能安全地依赖像文件修改时间和大小这样的元数据来确定更改的内容,还是需要检查整个内容?
您的文件内容可压缩吗?如果你在复制纯文本,你可能想在scp或rsync中使用压缩选项,但是如果你已经压缩了图像或视频文件,那么再次压缩只会减慢你的速度。如果您的文件只有部分文件更改,则rsync最有帮助。
发布于 2014-05-31 13:03:00
您可以使用rsync下载单个文件,就像使用scp一样。只需确保不使用调用守护进程的rsync://或hostname::path格式。
它至少可以使两个远程主机同时工作。此外,如果文件位于不同的物理磁盘上或恰好在缓存中,那么即使在单个主机上并行处理也会有所帮助。这就是为什么我不同意另一种说法,即单一实例必然是可行的。
https://stackoverflow.com/questions/23800094
复制相似问题