GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Parallelisieren Sie rsync mit GNU Parallel

Folgende Schritte haben die Arbeit für mich erledigt:

  1. Führen Sie rsync --dry-run aus zuerst, um die Liste der Dateien zu erhalten, die betroffen wären.
$ rsync -avzm --stats --safe-links --ignore-existing --dry-run \
    --human-readable /data/projects REMOTE-HOST:/data/ > /tmp/transfer.log
  1. Ich habe die Ausgabe von cat transfer.log gefüttert bis parallel um 5 rsync auszuführen s parallel wie folgt:
$ cat /tmp/transfer.log | \
    parallel --will-cite -j 5 rsync -avzm --relative \
      --stats --safe-links --ignore-existing \
      --human-readable {} REMOTE-HOST:/data/ > result.log

Hier, --relative Option (link) hat dafür gesorgt, dass die Verzeichnisstruktur für die betroffenen Dateien an Quelle und Ziel gleich bleibt (innerhalb von /data/ Verzeichnis), daher muss der Befehl im Quellordner ausgeführt werden (z. B. /data/projects ).


Ich persönlich benutze dieses einfache:

\ls -1 | parallel rsync -a {} /destination/directory/

Was nur nützlich ist, wenn Sie mehr als ein paar nicht nahezu leere Verzeichnisse haben, sonst haben Sie am Ende fast alle rsync beendet und der letzte erledigt die ganze Arbeit alleine.

Beachten Sie den umgekehrten Schrägstrich vor ls was dazu führt, dass Aliase übersprungen werden. So wird sichergestellt, dass die Ausgabe wie gewünscht ist.


Ich würde jedem dringend davon abraten, die akzeptierte Antwort zu verwenden. Eine bessere Lösung besteht darin, das Verzeichnis der obersten Ebene zu durchsuchen und eine proportionale Anzahl von rync-Vorgängen zu starten.

Ich habe ein großes ZFS-Volume und meine Quelle war ein CIFS-Mount. Beide sind mit 10G verbunden und können in einigen Benchmarks die Verbindung sättigen. Die Leistung wurde mit zpool iostat 1 bewertet .

Das Quelllaufwerk wurde folgendermaßen gemountet:

mount -t cifs -o username=,password= //static_ip/70tb /mnt/Datahoarder_Mount/ -o vers=3.0

Mit einem einzigen rsync Prozess:

rsync -h -v -r -P -t /mnt/Datahoarder_Mount/ /StoragePod

der io-meter zeigt:

StoragePod  30.0T   144T      0  1.61K      0   130M
StoragePod  30.0T   144T      0  1.61K      0   130M
StoragePod  30.0T   144T      0  1.62K      0   130M

In synthetischen Benchmarks (Crystal Disk) nähert sich die Leistung für sequentielles Schreiben 900 MB/s, was bedeutet, dass die Verbindung gesättigt ist. 130 MB/s ist nicht sehr gut und der Unterschied zwischen einem Wochenende und zwei Wochen warten.

Also habe ich die Dateiliste erstellt und versucht, die Synchronisierung erneut auszuführen (ich habe eine Maschine mit 64 Kernen):

cat /home/misha/Desktop/rsync_logs_syncs/Datahoarder_Mount.log | parallel --will-cite -j 16 rsync -avzm --relative --stats --safe-links --size-only --human-readable {} /StoragePod/ > /home/misha/Desktop/rsync_logs_syncs/Datahoarder_Mount_result.log

und es hatte die gleiche Leistung!

StoragePod  29.9T   144T      0  1.63K      0   130M
StoragePod  29.9T   144T      0  1.62K      0   130M
StoragePod  29.9T   144T      0  1.56K      0   129M

Als Alternative habe ich einfach rsync auf den Stammordnern ausgeführt:

rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/Marcello_zinc_bone /StoragePod/Marcello_zinc_bone
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/fibroblast_growth /StoragePod/fibroblast_growth
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/QDIC /StoragePod/QDIC
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/sexy_dps_cell /StoragePod/sexy_dps_cell

Dies hat die Leistung tatsächlich gesteigert:

StoragePod  30.1T   144T     13  3.66K   112K   343M
StoragePod  30.1T   144T     24  5.11K   184K   469M
StoragePod  30.1T   144T     25  4.30K   196K   373M

Abschließend schreiben Sie, wie @Sandip Bhattacharya angesprochen hat, ein kleines Skript, um die Verzeichnisse abzurufen und parallel dazu. Alternativ können Sie eine Dateiliste an rsync übergeben. Aber erstellen Sie nicht für jede Datei neue Instanzen.


Linux
  1. Gnu Parallel Vs &(ich meine Hintergrund) Vs Xargs -p?

  2. Verwenden von rsync zum Synchronisieren von Dateien

  3. Wie bekomme ich cpio (gnu, rhel 4) dazu, in ein bestimmtes Verzeichnis zu extrahieren?

  4. GNU parallel - zwei Parameter aus Array als Parameter

  5. Verwenden des Archiv-Flags von rsync, ohne symbolische Links zu kopieren

Setzen Sie teilweise übertragene Dateien über SSH mit Rsync fort

So sichern Sie Dateien und Verzeichnisse mit Rsync unter Linux

Lernen Sie Multithreading-Bash-Skripte mit GNU Parallel

So sichern Sie den lokalen Unix-Host mit dem Dienstprogramm rsnapshot rsync

So sichern Sie einen Remote-Linux-Host mit dem Dienstprogramm rsnapshot rsync

So begrenzen Sie die rsync-Geschwindigkeit und die Bandbreitennutzung mit –bwlimit