Beschleunigung von rsync über jdm


8

Ich sichere eine Linux-Box über SMB auf einem NAS. Ich mounte den NAS lokal und synchronisiere dann viele Daten (ca. 100 GB). Ich glaube, es dauert furchtbar lange: mehr als 12 Stunden. Ich würde erwarten, viel schneller zu sein, wenn alles kopiert ist, da sich von Tag zu Tag fast nichts ändert.

Gibt es eine Möglichkeit, dies zu beschleunigen?

Ich dachte, dass rsync vielleicht denkt, dass es mit lokalen Festplatten funktioniert und Prüfsumme anstelle von Zeit- / Größenvergleichen verwendet? Aber ich habe keine Möglichkeit gefunden, Zeit- und Datumsvergleiche zu erzwingen. Kann ich sonst noch etwas überprüfen?


Ich würde auch vorschlagen, NFS anstelle von SMB zu betrachten - ich habe bemerkt (und vielleicht bin es nur ich), dass es schneller ist als Samba
warren

Leider hat dieser NAS kein NFS und im Moment bleibe ich dabei.
Pupeno

Überprüfen Sie die Funktionen des NAS mit einem Port-Mapper wie nmap. Ich bin auf mehrere NAS-Einheiten gestoßen, auf denen ein nativer Rsync-Dienst ausgeführt wurde, obwohl dies in der Dokumentation und in der Konfiguration nicht erwähnt wurde.
Kyle__

Bitte überprüfen Sie auch diesen Thread ["rsync to NAS kopiert jedes Mal alles"] [1] [1]: serverfault.com/questions/262411/…
dtoubelis

Bitte überprüfen Sie auch diesen Thread [rsync to NAS kopiert jedes Mal alles] [1] [1]: serverfault.com/questions/262411/…
dtoubelis

Antworten:


28

Ich denke, Sie haben ein Missverständnis des Rsync-Algorithmus und der Art und Weise, wie das Tool angewendet werden sollte.

Der Leistungsvorteil von Rsync ergibt sich aus Delta-Übertragungen, dh dem Verschieben nur der geänderten Bits in einer Datei. Um die geänderten Bits zu bestimmen, muss die Datei von den Quell- und Zielhosts gelesen und die Prüfsummen blockiert werden, um festzustellen, welche Bits geändert wurden. Dies ist der "magische" Teil von rsync - der rsync-Algorithmus selbst.

Wenn Sie das Zieldatenträger mit SMB bereitstellen und rsync verwenden, um Dateien von dem zu kopieren, was Linux als lokale Quelle und lokales Ziel "ansieht" (beide auf diesem Computer bereitgestellt), wechseln die meisten modernen rsync-Versionen in den Kopiermodus "Ganze Datei" und schalten Sie den Delta-Kopieralgorithmus aus. Dies ist ein "Gewinn", da rsync bei aktiviertem Delta-Copy-Algorithmus die gesamte Zieldatei (über die Leitung vom NAS) lesen würde, um festzustellen, welche Bits der Datei sich geändert haben.

Der "richtige Weg" zur Verwendung von rsync besteht darin, den rsync-Server auf einem Computer und den rsync-Client auf dem anderen auszuführen. Jeder Computer liest Dateien aus seinem eigenen lokalen Speicher (was sehr schnell sein sollte), stimmt zu, welche Bits der Dateien sich geändert haben, und überträgt nur diese Bits. Auf diese Weise verwenden Sie rsync-Beträge eines erfundenen 'cp'. Sie könnten das gleiche mit 'cp' erreichen und es wäre wahrscheinlich schneller.

Wenn Ihr NAS-Gerät die Ausführung eines rsync-Servers (oder Clients) unterstützt, sind Sie im Geschäft. Wenn Sie es nur über SMB auf dem Quellcomputer bereitstellen möchten, können Sie die Dateien auch einfach mit 'cp' kopieren.


7
Ooo! Downvotes! Ich wäre gespannt, warum Sie die Antwort abgelehnt haben, da sie technisch korrekt ist.
Evan Anderson

Ich kann den rsync-Server nicht auf dem NAS ausführen, sonst würde ich dies tun. Wenn Sie keinen rsync-Server verwenden, kann rsync anhand der Prüfsumme oder der Größe und der Uhrzeit ermitteln, ob sich eine Datei geändert hat oder nicht. Laut der Manpage werden standardmäßig Größe und Datum / Uhrzeit verwendet, aber meiner Erfahrung nach funktioniert dies nicht und ich sehe keinen Weg, dies zu erzwingen. Ich sehe nur einen Weg, die Prüfsumme zu erzwingen. --checksum: Ohne diese Option verwendet rsync eine "Schnellprüfung", die (standardmäßig) prüft, ob die Größe und der Zeitpunkt der letzten Änderung jeder Datei zwischen Sender und Empfänger übereinstimmen.
Pupeno

Evan, gib mir ein paar Minuten, um meinen Kommentar zu schreiben.
Pupeno

2
Welches Verhalten sagt Ihnen, dass es die Dateien prüft? Das Verhalten "Schnellprüfung" ist das Standardverhalten, daher gibt es keine Möglichkeit, es zu "erzwingen". Wenn Sie rsync nicht auf dem NAS ausführen können, verwenden Sie einfach 'cp'. Es wird genauso schnell oder schneller sein.
Evan Anderson

Je nachdem, wie ich die rsync-Arbeit verstehe, sollte sie das lokale Datum und die Uhrzeit, das entfernte Datum und die Uhrzeit überprüfen und die Datei nicht kopieren, wenn sie übereinstimmen. Das heißt, es sollte nicht 99% der Dateien kopieren, aber die Tatsache, dass es für 60 GB mehr als 12 Stunden dauert, sagt mir, dass entweder alles kopiert wird (was zu implizieren scheint, wenn Sie sagen, dass cp schneller sein wird). oder dass es sich tatsächlich um eine Prüfsumme handelt, was bedeutet, dass nicht alles kopiert wird, sondern alles heruntergeladen wird.
Pupeno

6

Es hört sich so an, als wären Zeitstempel Ihr Problem, da diese Seite Folgendes betrifft:

http://www.goodjobsucking.com/?p=16

Die vorgeschlagene Lösung besteht darin, hinzuzufügen

--modify-window=1

zu den rsync-Parametern.


4

Ja, Sie können es beschleunigen. Sie müssen entweder die Quelle oder das Ziel wie einen Remote-Computer aussehen lassen, indem Sie ihn beispielsweise als " localhost:" adressieren .

Sie haben angegeben, dass Sie die SMB-Freigabe lokal bereitstellen. Dadurch sieht die Quelle oder das Ziel wie ein lokaler Pfad zu rsync aus. Die Manpage rsync gibt an, dass Kopien, bei denen Quelle und Ziel lokale Pfade sind, die gesamte Datei kopieren. Dies wird im Absatz für die Option "--whole-file" in der Manpage angegeben. Daher wird der Delta-Algorithmus nicht verwendet. Die Verwendung der localhost:Problemumgehung " " stellt die Funktionalität des Delta-Algorithmus wieder her und beschleunigt die Übertragung.


1
Ich frage mich, welchen Sinn das machen sollte ... rsyncverwendet Zeit- und Datumsstempel, um zu prüfen, ob eine Datei aktualisiert werden muss oder nicht. Wenn ein Update erforderlich ist, teilt rsync die Datei in Blöcke auf und vergleicht die Prüfsummen. Das heißt, es wird die gesamte Datei gelesen, um dies zu tun. Wenn Sie also keinen rsync-Daemon haben, der remote ausgeführt wird, müssen Sie die gesamte Datei trotzdem übertragen, um das Chunking und die Prüfsumme durchzuführen, damit Sie sie genauso gut sofort übertragen können. Die hier beschriebene "Problemumgehung" verschafft Ihnen in diesem Szenario tatsächlich nichts.
TylerDurden

3

Ich dachte, ich würde meine 2p hier reinwerfen.

Mein Bruder hat gerade ein Buffalo NAS in seinem Büronetzwerk installiert. Er prüft derzeit Backups außerhalb des Standorts, sodass er im Falle eines Brandes im Büro zumindest noch alle seine Geschäftsdokumente an einem anderen Ort (viele hundert Kilometer entfernt) hat.

Meine erste Hürde bestand darin, den VPS, den er hat (einen kleinen virtuellen privaten Linux-Server, nichts zu bulliges), als VPN-Benutzer in seinen Breitband-Router einzuwählen (er verwendet dafür einen DrayTek), damit er selbst Teil davon sein kann sein VPN, und so kann es dann auf sichere Weise direkt auf den NAS zugreifen. Habe das sortiert und arbeite hervorragend.

Das nächste Problem bestand darin, die Dateien vom NAS auf den VPS-Server zu übertragen. Ich begann mit einem Samba-Mount und stieß auf genau das gleiche (oder noch schlimmere) Problem, das Sie beschrieben haben. Ich habe einen Trockenlauf-Rsync durchgeführt und es dauerte über 1 Stunde und 30 Minuten, um herauszufinden, welche Dateien übertragen werden sollten, da, wie Evan sagt, bei dieser Methode das andere Ende nicht rsync ist und daher viele Dateien abgelegt werden müssen System ruft / liest auf dem Samba-Mount (über eine PPTP / Tunnel-Verbindung mit einer Roundtrip-Zeit von ca. 40 ms). Völlig unbrauchbar.

Ich wusste nicht, dass auf dem Buffalo tatsächlich ein rsync-Daemon ausgeführt wird. Wenn Sie diesen stattdessen verwenden, dauert der gesamte Trockenlauf für 87.000 Dateien mit insgesamt 50 GB nur 1 Minute 30 Sekunden. Das Übertragen von 50 GB Dateien (von einem NAS, der sich auf einer Breitbandverbindung mit nur 100 k / s ausgehender Bandbreite befindet) ist natürlich eine ganz andere Sache (dies dauert mehrere Tage), aber sobald die anfängliche Rsync abgeschlossen ist, sollten alle inkrementellen Sicherungen durchgeführt werden Fettaufhellung (seine Daten werden sich täglich nicht wesentlich ändern).

Mein Vorschlag ist, aus den oben genannten Gründen ein anständiges NAS zu verwenden, das rsync unterstützt. Es wird alle Ihre Probleme lösen.


+1, um mich darauf aufmerksam zu machen, dass Buffalo NASes rsync ausführen - danke!
Michael

0

Es riecht nach einem günstigeren NAS. Es könnte auch von Ihrer Netzwerkbandbreite sein ...

"Standard" -Konsumenten-NAS sind sehr schwach, wenn es um schwere E / A geht, was Sie hier versuchen. Es könnte auch ein billiger Switch sein, der Ihren PC und Ihr NAS verbindet und nicht stark genug ist, um alle Pakete korrekt zu verarbeiten.


Das gleiche NAS, der gleiche Switch, ein anderer Computer, auf dem Windows ausgeführt wird, und viel mehr Informationen in weniger als vier Stunden.
Pupeno


0

Es gibt zwei mögliche Ursachen für das Problem: Entweder verwenden Sie falsche Kommandozeilenoptionen oder Ihr NAS hat Probleme mit der Zeitstempelung (oder beides :-). Weitere Informationen finden Sie in diesem Thread "rsync to NAS kopiert jedes Mal alles" .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.