Wie beschleunigt man rsync?

Ich verwende rsync, um ein Verzeichnis auf meiner externen USB-Festplatte zu synchronisieren. Es geht um 150 Gigs Daten. 50000 + Dateien würde ich vermuten.

Es läuft derzeit die erste Synchronisierung, aber das Kopieren von Dateien mit einer Geschwindigkeit von nur 1-5 MB/s. Das scheint für ein USB 2.0-Gehäuse unglaublich langsam zu sein. Es gibt auch keine anderen Übertragungen auf dem Laufwerk.

Hier sind die Optionen, die ich verwendet habe:

rsync -avz --progress /mysourcefolder /mytargetfolder

Ich verwende Ubuntu Server 9.10.

Author: Jake Wilson, 2010-02-16

8 answers

Verwenden Sie für die erste Synchronisierung einfach

cp -a  /mysourcefolder /mytargetfolder

Rsync fügt nur Overhead hinzu, wenn das Ziel leer ist.

Auch.. die Option-z beendet wahrscheinlich Ihre Leistung, Sie sollten sie nicht verwenden, wenn Sie keine Daten über eine langsame Verbindung übertragen.

 40
Author: user23307,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-02-17 00:13:13

Wenn Sie rsync mit einem schnellen Netzwerk oder Disk to Disk auf demselben Computer verwenden,

nicht mit compression-z

Und mit --inplace -

Beschleunigt es auf die Leistung der Festplatten oder des Netzwerks

Kompression verwendet viel CPU

not mit inplace macht die Festplatte thrash alot (es verwendet einen temp-Datei vor dem erstellen des endgültigen)

Komprimierung und Nichtverwendung von inplace ist besser, um dies über das Internet zu tun (langsam Netzwerk)

NEU: Achten Sie auf das Ziel... wenn NTFS" Komprimierung " aktiviert ist... dies verlangsamt stark große Dateien (ich würde sagen, 200MB+) rsync scheint fast ins Stocken geraten, es ist dadurch verursacht.

 51
Author: Scott Kramer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-06-03 03:50:19

Verwenden Sie die Option -W. Dies deaktiviert delta/diff vergleichen. Wenn die Dateizeit/ - größe unterschiedlich ist, kopiert rsync die gesamte Datei.

Entfernen Sie auch die Option -z. Dies ist nur zum Komprimieren des Netzwerkverkehrs nützlich.

Jetzt sollte rsync so schnell sein wie cp.

 34
Author: vdboor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-06-19 10:13:14

Erstens-die Anzahl der Dateien wird in diesem Fall ein wichtiger Faktor sein. Es ist eine durchschnittliche Größe von jeweils 3 MB. Es gibt wahrscheinlich einen Io-Engpass, der die Geschwindigkeit im Fall des OP beeinflusst. Mehr hier - das ist eine ziemlich trockene Lektüre, aber das Titelbild ist es wert.

Also, mit rsync in ein leeres Verzeichnis kopieren? Hier sind einige Möglichkeiten, es zu beschleunigen:

  1. Kein -z - definitiv nicht verwenden-z als in den OP.
  2. --no-compress könnte dich beschleunigen. Dies könnte die größte Auswirkung... mein Test bestand aus 13.000 Dateien mit einer Gesamtgröße von 200 MB und rsync 3.1.3. Ich habe mit einer anderen Partition auf demselben internen SSD-Laufwerk synchronisiert. Mit --no-compress bekomme ich 18 MBps und ohne es bekomme ich 15 MBps. cp bekommt übrigens 16 MBps. Das ist jedoch eine viel kleinere durchschnittliche Dateigröße. Außerdem-ich kann keine Dokumentation für --no-compress finden. Ich habe von diesem Beitrag erfahren stackexchange.com.
  3. - W to Kopieren Sie Dateien ganz - verwenden Sie dies immer, wenn Sie ich möchte nicht, dass es Unterschiede vergleicht; Egal, dass der Sinn von rsync darin besteht, Unterschiede zu vergleichen und nur die Änderungen zu aktualisieren.
  4. - S zum Behandeln von spärlichen Dateien nun-kann nicht schaden, wenn Sie keine spärlichen Dateien haben.
  5. --exclude-from oder etwas ähnliches zum ausschließen von Dateien, die Sie möglicherweise nicht benötigen verringert die Zeit, aber es wird nicht erhöhen Sie Ihre Geschwindigkeit übertragen.
  6. Es ist möglich wenn Sie die Ausgabe an eine Datei wie diese senden rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err - die erste > im Grunde druckt eine Datei mit all den Dingen, die Sie normalerweise sehen würden, und das 2> bezieht sich auf Fehlermeldungen.
  7. Schließlich könnte das Ausführen mehrerer Instanzen von rsync für verschiedene Teile Ihrer Übertragung eine große Hilfe sein.

Mein Befehl wäre:

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

Wenn alles gut aussähe, würde ich "--dry-run " löschen und loslassen. A, X und E decken erweiterte Attribute und Berechtigungen ab, die nicht von-a, l ist für Softlinks, H ist für Hardlinks und h ist für menschenlesbar.

Das Aktualisieren eines bereits synchronisierten Verzeichnisses auf einem USB-Laufwerk oder demselben Laufwerk oder über ein Netzwerk erfordert unterschiedliche rsync-Befehle, um die Übertragungsgeschwindigkeit zu maximieren.

Bonus - hier ist die rsync Manpage, und wenn Sie Ihre Festplattengeschwindigkeit testen möchten, ist bonnie++eine gute Option, und für Ihre Netzwerkgeschwindigkeit versuchen Sie es mit iperf .


*Die post ist schon fast zehn Jahre alt, aber von Suchmaschinen sicher, wie es, und ich halte es sehen. Es ist eine gute Frage, und ich denke nicht, dass die beste Antwort auf "Wie man rsync beschleunigt" "stattdessen cp verwenden" sein sollte."

 27
Author: Fin Hirschoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-09-26 21:49:16

Sie möchten definitiv rclone ausprobieren. Dieses Ding ist verrückt schnell :

$ tree /usr [...] 26105 Verzeichnisse, 293208-Dateien

$ sudo rclone sync /usr /home/fred/temp -P -L -- - transfers 64

Übertragen: 17.929 G / 17.929 GByte, 100%, 165.692 MByte/s, ETA 0s Fehler: 75 (Wiederholung kann helfen) Schecks: 691078 / 691078, 100% Übertragen: 345539 / 345539, 100% Verstrichene Zeit: 1m50.8s

Dies ist eine lokale Kopie von und ein LITEONIT LCS-256 (256 GB) SSD.

Sie können --ignore-checksum beim ersten Lauf hinzufügen, um es noch schneller zu machen.

 3
Author: Frédéric N.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-07-15 12:52:44

Vermeiden

  • -z/--compress: durch die Komprimierung wird nur die CPU geladen, da die Übertragung nicht über ein Netzwerk, sondern über RAM erfolgt.
  • --append-verify: unterbrochene Übertragung fortsetzen. Das klingt nach einer guten Idee, hat aber den gefährlichen Fehlerfall: Jede Zieldatei mit der gleichen Größe (oder größer) als die Quelle wird ignoriert. Außerdem wird die gesamte Datei am Ende überprüft, was bedeutet, dass --no-whole-file nicht signifikant beschleunigt wird, während ein gefährlicher Fehlerfall hinzugefügt wird.

Benutze

  • -S/--sparse: in der Folge wurden die Nullen zu spärlichen Blöcken.]}
  • --partial oder -P was --partial --progress ist: Speichern Sie alle teilweise übertragenen Dateien für die zukünftige Wiederaufnahme. Hinweis: Dateien haben keinen temporären Namen, stellen Sie also sicher, dass nichts anderes erwartet, das Ziel zu verwenden, bis die gesamte Kopie abgeschlossen ist.
  • --no-whole-file damit alles, was zurückgewiesen werden muss, Delta Transfer verwendet. Das Lesen der Hälfte einer teilweise übertragenen Datei ist oft viel schneller als schreiben Sie es wieder.
  • --inplace um Dateikopien zu vermeiden (aber nur, wenn nichts das Ziel liest, bis die gesamte Übertragung abgeschlossen ist)
 3
Author: Tom Hale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-09-13 07:27:22

Sie sagen nicht, welche Größenverteilung Ihre Dateien haben. Wenn es viele kleine Dateien gibt, verringert dies die Gesamtübertragungsrate, indem die Kopfbewegungslatenz sowohl im Quell-als auch im Ziellaufwerk erhöht wird, da das Tool neue Dateien öffnet und das Betriebssystem Verzeichniseinträge und andere Metadaten (wie das Journal des Dateisystems, wenn Sie Meta-Datenjournalisierung wie ext3/ext4 und NTFS standardmäßig verwenden) während der Übertragung auf dem neuesten Stand hält. Ein Dateikopierprozess wird nur "in seinen Schritt kommen" für größere Objekte, wenn eine einfache Massenübertragung stattfindet.

 2
Author: David Spillett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-02-17 01:15:26

Ich fand dies als meine Antwort

Https://gist.github.com/KartikTalwar/4393116

rsync -aHAXxv --numeric-ids  --progress -e 'ssh -T -c [email protected] -o Compression=no -x ' <source_dir> user@<host>:<dest_dir>

Einige Erklärungen zu den Schaltern unten

Rsync (Jeder scheint-z zu mögen, aber es ist viel langsamer für mich)

a: archive mode - rescursive, preserves owner, preserves permissions, preserves modification times, preserves group, copies symlinks as symlinks, preserves device files.
H: preserves hard-links
A: preserves ACLs
X: preserves extended attributes
x: don't cross file-system boundaries
v: increase verbosity
--numeric-ds: don't map uid/gid values by user/group name
--progress: show progress during transfer

Ssh -

T: turn off pseudo-tty to decrease cpu load on destination.
c [email protected]: use the weakest but fastest SSH encryption.
o Compression=no: Turn off SSH compression.
x: turn off X forwarding if it is on by default.
 -1
Author: matson kepson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2021-01-29 09:22:37