Ich verwende rsync 3.1.1, um zwei Discs synchron zu halten, von denen sich eine im Netzwerk befindet und als Samba-Freigabe bereitgestellt wird /mnt/ROUTER_WD_2TB/
. Dies ist die Quelle mit einer Geschwindigkeit von maximal 30-40 MB / s aufgrund von Netzwerkbeschränkungen. Das andere, das Ziel, wird lokal gemountet (Peak 110 MB / s) und ist /mnt/BACKUP_HITACHI_2TB/
.
Ich benutze den folgenden rsync-Befehl:
rsync -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.
Die Datenträger enthalten viele Dateien, von denen die meisten klein sind.
Das Problem ist, dass rsync ziemlich lange dauert (10-20 m), bevor mit dem Verschieben von Dateien begonnen wird. Ich denke, weil es Dateilisten für eine sehr große Anzahl kleiner Dateien berechnen muss. Während dieses Zeitraums liegt die Newtwork-Auslastung bei niedrigen 200-500 KB / s, während beim Übertragen von Dateien die Geschwindigkeit etwa 40 MB / s beträgt.
Es kommt normalerweise vor, dass rsync ungefähr 15 m benötigt, um endlich etwas zu finden, das kopiert werden muss, dann 5 Sekunden benötigt, um es zu kopieren, und dann weitere 5 Minuten nach anderen zu kopierenden Dateien sucht. Alles in allem dauert eine 5-Sekunden-Kopie 20 Minuten!
Gibt es Maßnahmen, die ich ergreifen könnte, um diesen langen Zeitraum vor dem Kopieren der Dateien zu vermeiden, außer Ordner auszuschließen? Welche Art von "Cache" kann ich implementieren, damit rsync nicht die gesamte Dateiliste von Grund auf neu erstellen muss?
Antworten:
Wenn
rsync
Sie zwischen zwei lokalen Dateibäumen kopieren, werden die meisten Optimierungen deaktiviert (einschließlich des Delta-Algorithmus, für den es bekannt ist). Wenn Sie einrsync
auf Ihrem Remote-Server ausführen können (sodass Sie ein echtes Client-Server-Szenario in Ihrem Netzwerk erhalten), erhalten Sie eine erhebliche Traktion.Dennoch sind hier andere Optionen zu berücksichtigen
Kopieren, ohne sich Gedanken über das Löschen alter Dateien machen zu müssen. Auf diese Weise können Sie möglicherweise häufiger eine schnellere Übertragung durchführen und die langsamere Bereinigung nur einmal am Tag ablehnen:
Verwenden Sie eine Variante des
rsync
Standardlöschalgorithmus, um zu vermeiden, dass vor der Übertragung eine vollständige Liste der Dateien erstellt wird:Teilen Sie die Verzeichnisse der obersten Ebene in separate Aufgaben auf und führen Sie sie parallel aus. Sie werden vielleicht feststellen, dass dies nicht wirklich hilft, wenn Sie an die Festplatten-E / A gebunden sind, und beim Drehen von Platten wird dies mit ziemlicher Sicherheit die Situation verschlimmern.
Wenn keiner dieser Vorschläge hilft, lohnt es sich, einen weiteren hinzuzufügen,
--verbose
umrsync
zu sehen, was er tut. Ich vermute, es klappert durch alle unveränderten Dateien, und wenn Sie genug Dateien haben, dauert dies einfach lange.quelle
--delete --delete-during
Ich habe es nicht für mich getan - das hat immer noch eine inkrementelle Dateiliste gesendet -, sondern bin--delete --delete-before
direkt zu: gegangenbuilding file list
, was ein großer Fortschritt zu sein scheint. Meiner Ansicht nach.--delete-before
, werdenrsync
zwei Durchgänge im Dateibaum ausgeführt: einer zum Löschen und der nächste zum Kopieren.Sie können verwenden
-vv
, um das gesamte Protokoll von anzuzeigenrsync
.quelle