So beschleunigen Sie rsync für kleine Dateien

15

Ich versuche, mit dem folgenden Befehl Tausende kleiner Dateien von einem Server auf einen anderen zu übertragen:

rsync -zr --delete /home/user/ [email protected]::backup

Derzeit dauert die Übertragung sehr lange (ich habe sie nicht zeitlich festgelegt). Gibt es eine Möglichkeit, dies zu beschleunigen? Sollte ich ein anderes Tool verwenden? Sollte ich rsync über ssh verwenden, anstatt das rsync-Protokoll zu verwenden?

Nudeln
quelle
Sind es wirklich nur Hunderte? Wie in weniger als ein paar tausend?
Zoredache
Ein paar mehr als das ... 475.576 insgesamt 9,3 GB
Nudeln
Das wird mit fast jedem Tool, das auf Dateisystemebene funktioniert, scheitern. Ich vermute, wenn Sie ein Profil erstellen würden, würde ein erheblicher Zeitaufwand für Anrufe entstehen stat().
Zoredache
Warum nicht -aaber -r?
kamae

Antworten:

13

Sie müssen den Engpass ermitteln. Es ist kein Rsync. Es ist wahrscheinlich nicht Ihre Netzwerkbandbreite. Wie @Zoredache angedeutet hat, ist es höchstwahrscheinlich die große Anzahl von Iops, die von allen stat()Aufrufen generiert werden . Jedes Synchronisierungstool muss die Dateien angeben. Während der Synchronisierung ausführen iostat, um zu überprüfen.

So wird die Frage; wie optimiere ich stat? Zwei einfache Antworten:

  1. Holen Sie sich ein schnelleres Disk-Subsystem (auf beiden Hosts, wenn nötig) und
  2. stelle dein Dateisystem ein (zB für ext3 mount mit noatimeund füge a hinzu dir_index).

Wenn die Beschränkung zufällig nicht auf Ihrer Festplatte liegt, können Sie versuchen, den Verzeichnisbaum in mehrere unterschiedliche Bäume aufzuteilen und mehrere rsyncs auszuführen.

Mark Wagner
quelle
1
Danke, ich schaue in dir_index nach und sehe, wie ich zurechtkomme (wir verwenden bereits noatime). Anscheinend ist die Festplatte der Engpass, aber wir betreiben bereits 15.000 SAS-Laufwerke in RAID 5. Der nächste Schritt wäre SSD, aber unser Hosting-Unternehmen bietet uns diese Option noch nicht an.
Nudeln
5

Die Komprimierung ist für kleine Dateien (z. B. weniger als 100 Byte) nicht sehr nützlich. Bei kleinen Dateien kann die komprimierte Version manchmal sogar größer sein als das Original. Versuchen Sie den rsyncBefehl ohne die -zFlagge.

sshist gut für die Sicherheit, wird aber die Übertragung nicht schneller machen. Tatsächlich würde dies die Übertragung verlangsamen, da eine Ver- / Entschlüsselung erforderlich ist.

rsyncscheint beim ersten Start möglicherweise nicht schnell zu sein, da viele Daten übertragen werden müssen. Wenn Sie diesen Befehl jedoch in regelmäßigen Abständen ausführen möchten, sind nachfolgende Ausführungen möglicherweise viel schneller, da rsynces sinnvoll ist, unveränderte Dateien nicht zu übertragen.

unutbu
quelle
Wenn Sie nur den rsyncClient verwenden, wird hinter den Kulissen SSH verwendet. Sie müssen sich sehr viel Mühe geben, um die Verschlüsselung zu deaktivieren, wenn Sie rsync verwenden. Siehe: stackoverflow.com/a/1821574/64911
mlissner
1

Welche Version von rsync verwenden Sie? Alles, was älter als 3.0.0 ist (an beiden Enden), verfügt nicht über die Funktion für inkrementelle Dateilisten, die große Übertragungen beschleunigt.

Gerät
quelle
Verwenden von rsync 3.0.5 auf beiden Servern.
Nudeln
1

Fügen Sie -v --progressIhrer rsync-Befehlszeile hinzu

rsync erfolgt in 2 Schritten:

  1. Durchsuchen Sie alle Dateien auf beiden Plattformen, um Größe und Datum zu vergleichen
  2. mach den eigentlichen transfer

Wenn Sie Tausende kleiner Dateien in verschachtelten Verzeichnissen synchronisieren, verbringt rsync die meiste Zeit damit, in Unterverzeichnisse zu gehen und alle Dateien zu finden

Wenn keine Zeit für das Durchsuchen aufgewendet wird, kann dies einfach daran liegen, dass bei jeder neuen Dateiübertragung alle Latenzen hinzugefügt werden.

Alex F
quelle
1

Wenn ext3- oder ext4-Dateisysteme betroffen sind, überprüfen Sie, ob bei beiden die Funktion dir_index aktiviert ist! Dieser verdreifachte Rsync-Durchsatz in meinem Fall.

Details finden Sie in meiner Antwort unter: /server//a/759421/80414

Alfonx
quelle