Hallo,
ich habe daheim ein kleines Backup Scriupt geschrieben. Meine Ubuntu-Maschine mountet ein Verzeichnis meines XP-Rechners nach /source, und gleicht den Inhalt davon mit dem Lokalen Ordner /srv/Backup ab.
Leider erreiche ich nur eine Datenübertragungsrate von 1,8 – 2 MB/s.
Wenn ich mit FTP Daten vom XP-Rechner auf die Linuxbüchse schiebe, komme ich auf 10MB/s. Wenn ich das Netzlaufwerk von Linux mit XP mounte, und im Windows Explorer Daten auf die Linuxmaschine kopiere, erreiche ich auch 10 – 12 MB/s. Nur mit RSYNC erreiche ich diesen niedrigen Wert.
Hat jemand eine Idee, woran das liegen kann? Bei einer Sicherungsmenge von 40 GB macht das ned wirklich Spaß.
Daten: XP SP2 Pro
Ubuntu 5.10 32Bit
100 MBIT Netzwerk
Bei ftp gibt es praktisch nur den Datenverkehr in eine Richtung. Ueber das Netzwerk kann die Verbindung manchmal auch Kompression einsetzen. Herauszufinden, wenn man einmal 1MB (50mal) als jpg oder 1MB (50mal) Text (mit zip oder arj kann man gut feststellen, dass sich das jpg nur wenig komprimieren laesst, die reine Textdatei sehr stark, eine verschluesselte Textdatei laesst sich auch kaum mehr komprimieren) verwendet und die Zeit vergleicht.
Linux verwendet SAMBA auf dem Netzwerk um mit Windows Rechnern/Laufwerken zu kommunizieren. Das bremst in einigen Faellen und ist eher warscheinlich, wenn noch andere Kommunikation parallel lauft. Bei RSYNC wird im Betrieb auch das Dateiinhaltsverzeichnis laufend auf Aenderung geprueft, das auch Datenverkehr erzeugt und auch Rechenzeit (und auch Speicher) braucht. Dann gibt es noch Ueberpruefungsdatenverkehr, ob alles richtig angekommen/geschrieben ist. Manchmal wird durch eine Verschluesselung der Datentraffik(overhead) hoeher, ob das RSYNC verwendet weiss ich nicht. Ein fuenftel der Geschwindigkeit ist schon etwas viel und ich heatte die Haelfte erwartet.
Auf dem Win PC Netzwerk geht das direkte Kopieren auch schneller als das Synchronisationtool von Win zu verwenden.
All dieser Traffik braucht auch Rechenzeit, so dass die Angabe der Rechnergeschwindigkeit und Hauptspeichergroesse benoetigt werden. Sonst kann man eigentlich nur Vermutungen anstellen. Bei Ubuntu muesste es auch einen System Monitor geben. Siehe dort die Prozessorauslastung nach. Im Terminal/Konsole muesste es den Befehl “top” geben, (als root, oft auch als user ausreichend) um die Auslastung zu sehen.
Wie sieht das Ganze den aus, wenn Du die Daten per rsync von der Windowskiste auf die Linux-Mühle schiebst statt die Windowsdaten über’s Netz dem rsync vorzuwerfen?
Ich denke das könnte was bringen, da rsync versucht das übertragene Datenvolumen zu minimieren. In Deinem Fall ist das die Datenmenge, die Rsync zwischen den Partitionen verschiebt und nicht diejenige, die zwischen den Rechnern übertragen wird! Um diese Minimierung zu erreichen bestimmt es, welche Bereiche einer Datei sich verändert haben… und muss dazu die Dateien ganz einlesen. In Deiner Versuchsanordnung muss rsync die gesamte Datei über’s Netz von der Windowskiste holen, bestimmen ob sich was geändert hat und wenn ja die veränderten Teile nochmal über’s Netz ranholen und kopieren. Besonders effektiv ist das nicht…
Besorg’ Dir doch einfach einen rsync Client für Windows und lass’ den mit einem rsync-Daemon auf der Linux-Machine reden.
Naja, ich habe halt einen cronjob gemacht. Die Linuxkoste schaltet sich täglich um 20 Uhr ein. Wenn die XP Kiste an ist, mappt sie sich ein paar Freigaben, sichert sie auf die lokale Platte, und fährt dann wieder runter. So muss ich auf der XP-Seite nicht zusätzliche Software installieren.
Mich wundert halt nur, dass das RSYNC so extrem langsam ist.
In deinem Setup ist rsync einfach das komplett falsche Tool. Das muss da langsam sein! Da gibt es garnichts zu wundern.
Okay, und was kann ich dann verwenden?
Ich habe erst unter XP mit robocopy.exe das Backup gemacht, ist auch ein Kommandozeilentool, was einfach schnell ist. Dann wollte ich das aber so machen, dass der Linuxserver das Backup ausführt, ohne Userinteraktion.
Was würdest du also empfehlen?
In Deinem Setup geht alles langsam, was versucht Dateiveränderungen zu finden. Du kannst versuchen anhand der Zugriffszeiten Veränderungen festzustellen, das geht so lala, alles andere “intelligentere” wird nicht funktionieren.
Damit kommen Tools wie cp and tar in Frage…
Alles andere liest die Datei um Veränderungen festzustellen (über das Netz) und kopiert die dann gegebenenfalls (wieder über’s Netz). Selbst bei unveränderter Platte ziehst Du Dir damit den gesamten Inhalt einmal über das Kabel… bei Veränderungen sogar noch mehr.
Wenn Du was besseres willst, dann wirst Du ein wenig Intelligenz auf die Windowsbüchse verlagern müssen (mit einem rsync-Client oder unison o.ä.). Ich lasse unison im als shutdown Skript in Windows laufen.
So, ich habe nun einmal folgende Tests gemacht:
Auf der Windowsmaschine habe ich einen RSYNC-Server (CWRSYNC) installiert.
Folgender Test1:
Dann habe ich ein Verzeichnis einmal über die bisherige Konstellation (Windows-Freigabe mit SMB gemountet, und dann per RSYNC gesichert.
Folgender Test2:
In der RSYND.conf auf der Windows-Maschine den Ordner freigegeben, und von der Linuxmaschine aus per rsync auf die lokale Platte kopiert.
Dabei ist mir folgendes aufgefallen:
Die Anbindung ist über WLAN. Bei Test1 ist die maximale Datentransferrate 1,2 MByte gewesen, bei Test2 nur 0,8 Mbyte.
Entgegen allen euren Empfehlungen ist also die Übertragung rein über RSYNC noch langsamer als mit Samba.
Jetzt bin ich da etwas ratlos, warum? Ich habe mal die Tests mit verschiedenen rsync-Optionen gemacht, am schnellsten war es noch mit
rsync -avug –delete –progress
Falls ich –partial oder –compress genommen habe, war es noch langsamer.
Hat jemand evtl. eine Idee?
Die Dateiliste im Speicher und vor allem die Blockprüfung können rsync langsam machen (siehe Link). Mit “-W” ist diese ggf. abschaltbar. Oft läuft rsync auch mit niedriger Priorität (“nice” Wert mal prüfen), wie auch viele cron jobs. Einige Router (WLAN) machen auch manchmal undokumentierte Priorisierungem von Ports (d.h. 80 für http), wenn mehrere Verbindugen grad aktiv Daten schaufeln.