Rsync mit simultanen / gleichzeitigen Dateiübertragungen beschleunigen?

Müssen wir übertragen 15TB von Daten von einem server zum anderen, wie schnell wie wir können. Wir sind derzeit mit rsync aber wir sind immer nur Geschwindigkeiten von rund 150Mb/swenn unser Netzwerk ist in der Lage 900+Mb/s (getestet mit iperf). Hab ich gemacht-tests der Festplatten, Netzwerk, etc und dachte, es ist nur so, dass rsync ist nur die übertragung einer Datei an eine Zeit, die Ursache der Verlangsamung.

Fand ich ein Skript ausführen, einen anderen rsync für jeden Ordner in einem Verzeichnis-Baum (so dass Sie die Begrenzung auf x-Nummer), aber ich kann Sie nicht arbeiten, es gerade noch läuft ein rsync auf ein mal.

Fand ich die script hier (unten kopiert).

Unserer Verzeichnisstruktur ist wie folgt:

/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

Also, was ich gerne sehen würde ist das erstellen eines rsync für jedes der Verzeichnisse in /main/files, bis zu einem maximum von sagen wir 5 auf einmal. Also in diesem Fall 3 rsyncs laufen würde, für /main/files/1/main/files/2 und /main/files/3.

Versuchte ich mit es wie diese, aber es läuft einfach 1-rsync an eine Zeit, die für die /main/files/2 Ordner:

#!/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 der Frage BT643 | 2014-06-05

Schreibe einen Kommentar