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/s
wenn 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint dies einfacher:
InformationsquelleAutor der Antwort Manuel Riel
rsync
transfers von Dateien so schnell wie möglich über das Netzwerk. Zum Beispiel, versuchen Sie, es zu kopieren eine große Datei, die es gar nicht gibt auf das Ziel. Diese Geschwindigkeit ist die maximale Geschwindigkeit rsync Daten übertragen können. Vergleichen Sie es mit der Geschwindigkeit vonscp
(zum Beispiel).rsync
ist sogar langsamer beim raw-übertragung, wenn die Zieldatei existiert, weil beide Seiten haben eine zwei-Wege-chat über welche Teile der Datei geändert werden, aber zahlt sich durch die Ermittlung von Daten, die nicht übertragen werden müssen.Einen einfacheren Weg zu laufen
rsync
parallel wäre, die Nutzungparallel
. Den folgenden Befehl ausführen würde, bis zu 5rsync
s parallel, jeder kopiert ein Verzeichnis. Beachten Sie, dass der Engpass kann nicht dein Netzwerk, sondern die Geschwindigkeit der CPUs und Festplatten und die laufen Dinge parallel macht Sie alle langsamer, nicht schneller.InformationsquelleAutor der Antwort Stuart Caie
Gibt es eine Reihe alternativer tools und Ansätze für die dies aufgeführt arround the web. Zum Beispiel:
Den NCSA-Blog hat eine Beschreibung der Verwendung von
xargs
undfind
zu parallelisieren, rsync, ohne Installation neuer software für die meisten *nix-Systemen.Und parsync bietet eine feature-reiche Perl-wrapper für die parallele rync.
InformationsquelleAutor der Antwort Bryan P
Können Sie
xargs
unterstützt, laufen viele Prozesse gleichzeitig. Für Ihren Fall heißt es:InformationsquelleAutor der Antwort Nickolay
Habe ich entwickelt, ein python-Paket namens: parallel_sync
https://pythonhosted.org/parallel_sync/pages/examples.html
Hier ist ein Beispiel-code, wie es zu benutzen:
Parallelität von Standardwert ist 10; erhöhen Sie:
jedoch beachten Sie, dass ssh in der Regel hat der MaxSessions standardmäßig auf 10 festgelegt, so um Sie zu erhöhen über 10 ist, müssen Sie zum ändern der ssh-Einstellungen.
InformationsquelleAutor der Antwort max