Ich versuche, einen 75-Gigabyte-Gigabyte-Gigabyte-Gigabyte-Gigabyte-Gigabyte-Gigabyte-Gigabyte-Gigabyte-Gigabyte (mysql lvm snapshot) von einem Linux-Server in unserem Rechenzentrum in LA auf einen anderen Linux-Server in unserem Rechenzentrum in New York über eine 10-MB-Verbindung zu kopieren.
Ich erhalte ungefähr 20-30Kb / s mit rsync oder scp, das zwischen 200-300 Stunden schwankt.
Im Moment ist es eine relativ leise Verbindung, da das zweite Rechenzentrum noch nicht aktiv ist und ich durch kleine Dateiübertragungen hervorragende Geschwindigkeiten erzielt habe.
Ich habe verschiedene TCP-Tuning-Anleitungen befolgt, die ich vergeblich über Google gefunden habe (vielleicht lese ich die falschen Anleitungen, habe eine gute?).
Ich habe den tar + netcat-Tunneltipp gesehen, aber ich verstehe, dass er nur für VIELE kleine Dateien geeignet ist und Sie nicht aktualisiert, wenn die Übertragung der Datei effektiv abgeschlossen ist.
Hat jemand eine gute Eingabe, bevor ich eine Festplatte versende?
UPDATE: Naja ... es könnte der Link sein :( Siehe meine Tests unten ...
Transfers von NY nach LA:
Eine leere Datei abrufen.
[nathan@laobnas test]$ dd if=/dev/zero of=FROM_LA_TEST bs=1k count=4700000
4700000+0 records in
4700000+0 records out
4812800000 bytes (4.8 GB) copied, 29.412 seconds, 164 MB/s
[nathan@laobnas test]$ scp -C obnas:/obbkup/test/FROM_NY_TEST .
FROM_NY_TEST 3% 146MB 9.4MB/s 07:52 ETA
Den Snapshot-Tarball abrufen.
[nathan@obnas db_backup]$ ls -la db_dump.08120922.tar.gz
-rw-r--r-- 1 root root 30428904033 Aug 12 22:42 db_dump.08120922.tar.gz
[nathan@laobnas test]$ scp -C obnas:/obbkup/db_backup/db_dump.08120922.tar.gz .
db_dump.08120922.tar.gz 0% 56MB 574.3KB/s 14:20:40 ET
Transfers von LA nach NY:
Eine leere Datei abrufen.
[nathan@obnas test]$ dd if=/dev/zero of=FROM_NY_TEST bs=1k count=4700000
4700000+0 records in
4700000+0 records out
4812800000 bytes (4.8 GB) copied, 29.2501 seconds, 165 MB/s
[nathan@obnas test]$ scp -C laobnas:/obbkup/test/FROM_LA_TEST .
FROM_LA_TEST 0% 6008KB 497.1KB/s 2:37:22 ETA
Schnappschuss abrufen.
[nathan@laobnas db_backup]$ ls -la db_dump_08120901.tar.gz
-rw-r--r-- 1 root root 31090827509 Aug 12 21:21 db_dump_08120901.tar.gz
[nathan@obnas test]$ scp -C laobnas:/obbkup/db_backup/db_dump_08120901.tar.gz .
db_dump_08120901.tar.gz 0% 324KB 26.8KB/s 314:11:38 ETA
Ich nehme an, ich werde es mit den Leuten aufnehmen, die unsere Einrichtungen betreiben. Die Verbindung ist als MPLS / Ethernet 10MB-Verbindung gekennzeichnet. (zucken)
tcpdump
. Es kann Ihnen helfen herauszufinden, was die Übertragung verlangsamt.Antworten:
Sneakernet jemand?
Angenommen, es handelt sich um eine einmalige Kopie, ist es nicht möglich, die Datei einfach auf eine CD (oder ein anderes Medium) zu kopieren und über Nacht an den Zielort zu bringen.
Dies ist möglicherweise die schnellste Option, da eine Dateiübertragung dieser Größe über diese Verbindung möglicherweise nicht korrekt kopiert wird. In diesem Fall können Sie von vorne beginnen.
rsync
Meine zweite Wahl / mein zweiter Versuch wäre Rsync, da es fehlgeschlagene Übertragungen, teilweise Übertragungen usw. erkennt und dort weitermachen kann, wo es aufgehört hat.
Das Flag --progress gibt Ihnen ein Feedback, anstatt nur dort zu sitzen und sich selbst zu überlassen. :-)
Vuze (Bittorrent)
Die dritte Möglichkeit wäre wahrscheinlich, Vuze als Torrent-Server zu verwenden und Ihren Remote-Standort dann mit einem Standard-Bitorrent-Client herunterladen zu lassen. Ich kenne andere, die dies getan haben, aber Sie wissen schon ... als sie alles in Betrieb genommen haben, etc ... hätte ich die Daten über Nacht haben können ...
Kommt auf deine Situation an, denke ich.
Viel Glück!
AKTUALISIEREN:
Weißt du, ich habe ein bisschen mehr über dein Problem nachgedacht. Warum muss die Datei ein einziger riesiger Tarball sein? Tar ist perfekt in der Lage, große Dateien in kleinere zu teilen (zum Beispiel, um Medien zu überspannen). Warum also nicht das riesige Archiv in handlichere Teile aufteilen und die Teile stattdessen übertragen?
quelle
Ich habe das in der Vergangenheit mit einer 60-GB-TBZ2-Datei gemacht. Ich habe das Skript nicht mehr, aber es sollte leicht umzuschreiben sein.
Teilen Sie zuerst Ihre Datei in Stücke von ~ 2 GB auf:
Berechnen Sie für jedes Teil einen MD5-Hash (dies dient zur Überprüfung der Integrität) und speichern Sie ihn an einem beliebigen Ort. Beginnen Sie dann, die Teile und ihre md5 mit dem Tool Ihrer Wahl (me: netcat-tar-pipe in einem Bildschirm) auf die entfernte Site zu kopieren Session).
Überprüfen Sie nach einer Weile mit dem md5, ob Ihre Stücke in Ordnung sind, dann:
Wenn Sie auch eine MD5 der Originaldatei erstellt haben, überprüfen Sie diese ebenfalls. Wenn es in Ordnung ist, können Sie Ihre Datei entpacken, alles sollte in Ordnung sein.
(Wenn ich die Zeit finde, werde ich das Skript umschreiben)
quelle
Normalerweise bin ich ein großer Verfechter von rsync, aber wenn ich zum ersten Mal eine einzelne Datei übertrage, scheint das nicht viel Sinn zu machen. Wenn Sie jedoch die Datei mit nur geringen Unterschieden erneut übertragen würden, wäre rsync der klare Gewinner. Wenn Sie trotzdem rsync verwenden möchten, empfehle ich dringend, ein Ende im
--daemon
Modus auszuführen, um den leistungsbeeinträchtigenden ssh-Tunnel zu beseitigen. Die Manpage beschreibt diesen Modus recht ausführlich.Meine Empfehlung? FTP oder HTTP mit Servern und Clients, die die Wiederaufnahme unterbrochener Downloads unterstützen. Beide Protokolle sind schnell und unkompliziert, wodurch der ssh-Tunnel-Nachteil vermieden wird. Apache + wget würde schnell schreien.
Der netcat Pipe-Trick würde auch gut funktionieren. Tar ist nicht erforderlich, wenn eine einzelne große Datei übertragen wird. Und der Grund, warum es Sie nicht benachrichtigt, wenn es fertig ist, ist, dass Sie es nicht gesagt haben. Wenn Sie
-q0
der Serverseite ein Flag hinzufügen, verhält es sich genau so, wie Sie es erwarten würden.Der Nachteil des Netcat-Ansatzes besteht darin, dass Sie den Vorgang nicht fortsetzen können, wenn Ihre Übertragung auf 74 GB in ...
quelle
Geben Sie netcat (manchmal auch nc genannt) eine Chance. Das Folgende funktioniert in einem Verzeichnis, aber es sollte einfach genug sein, nur eine Datei zu kopieren.
Auf dem Zielfeld:
Auf der Quellbox:
Sie können versuchen, die Option 'z' in beiden Befehlen zu entfernen, um die Geschwindigkeit zu erhöhen, da die Datei bereits komprimiert ist.
quelle
Standard-SCP und Rsync (die SCP verwenden) sind für große Dateien sehr langsam. Ich denke, ich würde versuchen, ein Protokoll mit geringerem Overhead zu verwenden. Haben Sie versucht, einen einfacheren oder gar keinen Verschlüsselungscode zu verwenden? Schauen Sie sich die
--rsh
Option für rsync an, um die Übertragungsmethode zu ändern.Warum nicht FTP oder HTTP?
quelle
Obwohl dies die Situation ein wenig überfordert, ist BitTorrent eine wirklich gute Lösung für die Übertragung großer Dateien. BitTorrent hat viele nette Funktionen wie das native Chunking einer Datei und das Checksumming jedes Chunks, das bei Beschädigung erneut übertragen werden kann.
Ein Programm wie Azureus [jetzt bekannt als Vuze] enthält alle Teile, die Sie zum Erstellen, Servern und Herunterladen von Torrents in einer App benötigen. Ich denke, Azureus ist nicht die schlankste Lösung, die für BitTorrent verfügbar ist, und ich denke, es ist auch eine grafische Benutzeroberfläche erforderlich. Es gibt jedoch viele befehlszeilengesteuerte Torrent-Tools für Linux.
quelle
Nun, persönlich scheinen 20-30Kb / s für einen 10Mb-Link (unter der Annahme von 10Mb und nicht 10Mb) ziemlich niedrig zu sein.
Wenn ich Sie wäre, würde ich eines von zwei Dingen tun (vorausgesetzt, der physische Zugang ist nicht verfügbar) -
In beiden Fällen empfehle ich Ihnen, die große Datei in kleinere Blöcke zu unterteilen, die etwa 500 MB groß sind.
Wenn Sie die kleineren Chunks haben, verwenden Sie entweder wieder rsync oder ich persönlich bevorzuge eine private sichere FTP-Sitzung und dann CRC der Dateien nach Abschluss.
quelle
Ein paar Fragen könnten in den Diskussionen hilfreich sein: Wie kritisch sind die zu übertragenden Daten? Ist dies für Disaster Recovery, Hot Backup, Offline-Speicher oder was? Möchten Sie die Datenbank sichern, während sie hoch oder runter ist? Was ist mit dem Einrichten einer Datenbank auf dem Remote-System und dem Synchronisieren dieser Datenbanken mithilfe von Clustern oder Aktualisierungen über Änderungsprotokolle? Dies kann dazu beitragen, die Datenmenge zu reduzieren, die über den Link übertragen werden muss.
quelle
bbcp wird die Datei für Sie zerlegen und mit mehreren Streams kopieren.
quelle
Späte Antwort für Googler:
Beim Übertragen großer Datenmengen kann mit rsync die Quelle und das Ziel verglichen werden. Anschließend kann mit dem Flag --only-write-batch eine Stapeldatei auf ein lokales Wechselmedium geschrieben werden. Anschließend senden Sie den lokalen Datenträger an den Remote-Speicherort, schließen ihn an und führen rsync erneut aus. Verwenden Sie dazu --read-batch, um die Änderungen in das Remote-Dataset zu übernehmen.
Wenn sich die Quelldateien während des physischen Transports ändern oder das Transportmedium voll ist, können Sie einfach den Befehl --only-write-batch | wiederholen Schiff | --Batch-Lesezyklus, bis das Ziel erreicht ist.
(Ref: Ich war einer der Autoren dieses Features in rsync. Weitere Hintergrundinformationen und Anwendungsfälle finden Sie in der folgenden Diskussion zur Implementierung des Prototyps: https://lists.samba.org/archive/rsync/2005-March/011964 .html )
quelle