rsync – 在两台远程计算机之间复制大文件 – 高效

前端之家收集整理的这篇文章主要介绍了rsync – 在两台远程计算机之间复制大文件 – 高效前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 shell脚本,它不断在远程系统之间复制大文件(2 GB到5 GB).
基于密钥的身份验证与代理转发一起使用,一切正常.
例如:假设shell脚本在机器A上运行并将文件从机器B复制到机器C.
"scp -Cp -i private-key ssh_user@source-IP:source-path ssh_user@destination-IP:destination-path"

现在问题是进程sshd不断占用cpu负载.
例如:目的地机器上的顶部-c(即机器-C)显示

  PID USER      PR  NI  VIRT  RES  SHR S %cpu %MEM    TIME+  COMMAND                                                                         
14580 ssh_user  20   0 99336 3064  772 R 85.8  0.0   0:05.39 sshd: ssh_user@notty                                                            
14581 ssh_user  20   0 55164 1984 1460 S  6.0  0.0   0:00.51 scp -p -d -t /home/binary/instances/instance-1/user-2993/

这导致高负载平均值.

我相信scp因为加密/解密数据而占用了大量cpu.但我不需要加密数据传输,因为机器B和机器C都在局域网中.

我还有其他选择吗?我认为’rsync’.但是rsync手册页说:

GENERAL
       Rsync  copies files either to or from a remote host,or locally on the current host (it does not support copying files between two
       remote hosts).

编辑1:我已经在使用ssh cipher = arcfour128.虽然改善不大,但这并没有解决我的问题.

编辑2:在机器上运行的其他二进制文件(我的主应用程序)和高负载平均值导致它们表现不佳.

解决方法

使用rsync可以解决此问题.至少这种解决方案在性能方面应具有竞争力.

首先,可以从其中一个远程系统调用rsync,以克服无法直接在两个远程系统之间进行复制的限制.

其次,通过在守护程序访问模式而不是远程Shell访问模式下运行rsync,可以避免加密/解密.

在守护程序访问模式下,rsync不会通过ssh连接隧道传输流量.相反,它在TCP之上使用自己的协议.

通常,您从inet.d或独立运行rsync守护程序.无论如何,这需要root访问其中一个远程系统.假设根访问不可用,仍然可以启动守护程序.

将rsync守护程序作为目标计算机上的非特权用户启动

ssh -i private_key ssh_user@destination-IP \
       "echo -e 'pid file = /tmp/rsyncd.pid\nport = 1873' > /tmp/rsyncd.conf

ssh -i private_key ssh_user@destination-IP \
       rsync --config=/tmp/rsyncd.conf --daemon

实际上复制文件

ssh -i private_key ssh_user@source_ip \
       "rsync [OPTIONS] source-path \
              rsync://ssh_user@destination-IP:1873:destination-path"
原文链接:/linux/401698.html

猜你在找的Linux相关文章