rsync多进程方式

工作中经常会遇到数据拷贝或者数据同步事情。一般情况会使用 rsync 来做数据拷贝或者数据同步等。

问题

原生的 rsync 不能做并发同步,特别是需要拷贝上T数据时,rsync 一个进程拷贝有很大的瓶颈,不能把存储设备IO性能发挥的最好或者说把存储设备IO跑满。

有什么方法让 rsync 实现多进程同步,并且自动识别目录下有多少个文件或者目录,不会出现重复性同步。

解决方法

下面是一个 shell 脚本,实现 rsync 多进程同步。
原理也很简单,就是用find命令找出需要同步的子目录,再用rsync同时对多个子目录进行同步

注意改脚本只适用于本地2个目录同步,若要实现远程同步,只需做少量修改即可

#!/bin/bash

# 源目录
src=$1

# 目的目录
dest=$2

# find查找的目录层级
deepth=3

# 进程数控制
processnum=10


find $src -mindepth $deepth -maxdepth $deepth  -type d |while read line
do
  sourcedir=`echo $line`
  targetdir=`echo $line| sed "s#$src#$dest#g"`
  mkdir -p $targetdir
  echo "rsync -avzuP --delete $sourcedir $targetdir"
  echo "rsync -avzuP --delete $sourcedir $targetdir &"|bash
  while true
  do
    # 进程数控制
    if [ `ps -ef | grep -w [r]sync | awk '{print $NF}' | sort -nr | uniq | wc -l` -gt $processnum ];then
      sleep 5
    else
      break
    fi
  done
done

# last rsync all dir
# 最后再做一次全量同步
rsync -avzuP --delete $src $dest

你可能感兴趣的:(运维)