Accélérer rsync avec traduction Simultanée/Simultanées Transferts de Fichiers?

Nous avons besoin de transférer 15TB de données d'un serveur à l'autre aussi vite que nous le pouvons. Nous sommes actuellement en utilisant rsync mais nous sommes seulement à obtenir des vitesses autour de 150Mb/s, lors de notre réseau est capable de 900+Mb/s (testé avec iperf). J'ai fait des tests de disques, réseau, etc ... et pensé que c'est juste que rsync est seulement le transfert d'un fichier à un moment qui est à l'origine du ralentissement.

J'ai trouvé un script à exécuter un autre rsync pour chaque dossier dans l'arborescence des répertoires (vous permettant de limiter à un nombre x), mais je ne peux pas le faire fonctionner, il reste juste exécute un rsync à la fois.

J'ai trouvé le script ici (copié ci-dessous).

Notre arborescence de répertoire est comme ceci:

/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

Donc ce que je voudrais arriver est de créer un rsync pour chacun des répertoires dans /main/fichiers, jusqu'à un maximum de, disons, 5 à la fois. Donc dans ce cas, 3 rsyncs irait, pour /main/files/1, /main/files/2 et /main/files/3.

J'ai essayé avec elle comme ça, mais il va juste 1 rsync à la fois pour la /main/files/2 dossier:

#!/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}/"
InformationsquelleAutor BT643 | 2014-06-05