我们需要尽可能快地将15TB的数据从一个服务器传输到另一个服务器。我们目前正在使用rsync,但是当我们的网络能够达到900Mb / s(使用iperf进行测试)时,我们只能获得大约150Mb / s的速度。我已经完成了对磁盘,网络等的测试,并且认为只是rsync只是一次传输一个导致速度减慢的文件。
我发现一个脚本来为目录树中的每个文件夹运行一个不同的rsync(允许你限制x个数字),但是我无法使它工作,它一次只运行一个rsync。
我发现脚本here(下面复制)。
我们的目录树是这样的:
/main - /files - /1 - 343 - 123.wav - 76.wav - 772 - 122.wav - 55 - 555.wav - 324.wav - 1209.wav - 43 - 999.wav - 111.wav - 222.wav - /2 - 346 - 9993.wav - 4242 - 827.wav - /3 - 2545 - 76.wav - 199.wav - 183.wav - 23 - 33.wav - 876.wav - 4256 - 998.wav - 1665.wav - 332.wav - 112.wav - 5584.wav
所以我想要发生的是为/ main / files中的每个目录创建一个rsync,最多为一次,例如5个。所以在这种情况下,对于/ main / files / 1,/ main / files / 2和/ main / files / 3,将运行3个rsync。
我试过这样,但它只是运行1 rsync在/ main / files / 2文件夹:
#!/bin/bash # Define source,target,maxdepth and cd to source source="/main/files" target="/main/filesTest" depth=1 cd "${source}" # Set the maximum number of concurrent rsync threads maxthreads=5 # How long to wait before checking the number of rsync threads again sleeptime=5 # Find all folders in the source directory within the maxdepth level find . -maxdepth ${depth} -type d | while read dir do # Make sure to ignore the parent folder if [ `echo "${dir}" | awk -F'/' '{print NF}'` -gt ${depth} ] then # Strip leading dot slash subfolder=$(echo "${dir}" | sed 's@^\./@@g') if [ ! -d "${target}/${subfolder}" ] then # Create destination folder and set ownership and permissions to match source mkdir -p "${target}/${subfolder}" chown --reference="${source}/${subfolder}" "${target}/${subfolder}" chmod --reference="${source}/${subfolder}" "${target}/${subfolder}" fi # Make sure the number of rsync threads running is below the threshold while [ `ps -ef | grep -c [r]sync` -gt ${maxthreads} ] do echo "Sleeping ${sleeptime} seconds" sleep ${sleeptime} done # Run rsync in background for the current subfolder and move one to the next one nohup rsync -a "${source}/${subfolder}/" "${target}/${subfolder}/" </dev/null >/dev/null 2>&1 & fi done # Find all files above the maxdepth level and rsync them as well find . -maxdepth ${depth} -type f -print0 | rsync -a --files-from=- --from0 ./ "${target}/"
这似乎更简单:
ls /srv/mail | parallel -v -j8 rsync -raz --progress {} myserver.com:/srv/mail/{}