Folgende Schritte haben die Arbeit für mich erledigt:
- 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
- Ich habe die Ausgabe von
cat transfer.log
gefüttert bisparallel
um 5rsync
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.