Übertragen von ca. 300 GB in Dateien von einem Server auf einen anderen

20

Ich habe ungefähr 200.000 Dateien, die ich heute auf einen neuen Server übertrage. Ich habe noch nie so viel unternommen und wollte Ratschläge dazu bekommen, wie ich vorgehen soll. Ich bewege sie zwischen zwei Centos 6-Distributionen und sie befinden sich an verschiedenen Orten im Land. Ich habe nicht genügend Festplattenspeicher auf dem ursprünglichen Server, um alle Verzeichnisse und Dateien in einem großen Tarball zu speichern. Meine Frage ist also, wie ich all diese Dateien übertragen soll. rsync? eine spezielle Art der Verwendung von Rsync? Irgendwelche Eingaben / Vorschläge, wie man es macht, wären erstaunlich.

Vielen Dank

BEARBEITEN: Für diejenigen, die sich fragen, empfehle ich dringend die Verwendung eines, screenwenn Sie einen großen rsyncBefehl wie diesen ausführen . Besonders wenn etwas Dummes passieren kann und Sie die Verbindung zu dem Server A verlieren, von dem Sie den rsyncBefehl ausführen. Nehmen Sie dann einfach den Bildschirm ab und setzen Sie ihn später fort.

MasterGberry
quelle
4
Hast du es schon versucht rsync? Vielleicht auf einer kleinen Reihe von Dateien oder so? Sollte das ideale Werkzeug dafür sein.
Slhck
Es ist mit ziemlicher Sicherheit nicht das beste Tool für diesen Job, aber es könnte Sie interessieren, dass Sie tar über eine ssh-Verbindung streamen können, anstatt vor dem Verschieben der Datei in eine Datei komprimieren zu müssen:tar cz | ssh [email protected] tar xz
Aesin
2
es könnte nicht zum Thema gehören, aber (insbesondere beim erstmaligen Laden und anschließenden Verwenden rsyncfür spätere Aktualisierungen): "Unterschätzen Sie niemals die Bandbreite eines Kombis voller Bänder" (z. B .: Haben Sie darüber nachgedacht, eine 2. Festplatte zu platzieren (oder einen USB2 anzuschließen)? / usb3 disk), ein Backup darauf erstellen und dieses über fedex an den Remote-Standort senden? Es könnte VIEL schneller als alles andere sein und Bandbreite für andere Zwecke sparen.
Olivier Dulac
Ich habe keine BW-Beschränkungen für einen Anbieter und den anderen werde ich diesen Monat nicht erreichen. Ich habe also nicht wirklich ein Problem damit, es zu verschwenden: P
MasterGberry
1
@OlivierDulac what-if.xkcd.com/31
Bob

Antworten:

24

Nur um die Antwort von Simon zu verdeutlichen , rsyncist es das perfekte Werkzeug für diesen Job:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

Angenommen, Sie haben ssh-Zugriff auf den Remote-Computer, möchten Sie Folgendes tun:

rsync -hrtplu path/to/local/foo [email protected]:/path/to/remote/bar

Dadurch wird das Verzeichnis kopieren , path/to/local/fooum /path/to/remote/barauf dem Remote - Server. Ein neues Unterverzeichnis mit dem Namen bar/foowird erstellt. Wenn Sie nur den Inhalt eines Verzeichnisses kopieren möchten , ohne ein Verzeichnis mit diesem Namen auf dem Ziel zu erstellen, fügen Sie einen abschließenden Schrägstrich hinzu:

rsync -hrtplu path/to/local/foo/ [email protected]:/path/to/remote/bar

Dadurch wird der Inhalt von foo/in das Remote-Verzeichnis kopiert bar/.

Einige relevante Optionen:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats
terdon
quelle
Könnte ich das auch tun, rsync -hrtplu --progresswenn ich den Fortschritt so sehen wollte, wie er vor sich geht?
MasterGberry
@ MasterGberry yup, genau. Ich habe ein Backup-Skript, das ausgeführt wird rsync --progress --stats -hrtl --update source destination.
Terdon
Ich habe anscheinend Probleme, es zum Laufen zu bringen. rsync -hrtplu --progress --rsh='ssh -p2202'ist das, was ich benutze und es kann keine Verbindung herstellen. Immer 255 Fehler. Aber ich bin begeistert. Also ich weiß, dass es nicht die Firewall ist ... muss ich das Passwort auch über das cmd eingeben? oder würde es mich nicht danach fragen?
MasterGberry
Derp, nvm. Ich habe den ausgehenden Datenverkehr auf meiner Firewall vergessen. Danke
MasterGberry
Wichtiger Hinweis: Seien Sie mit rsync besonders vorsichtig, wenn Sie "--delete" verwenden: Lesen Sie viel darüber, testen Sie andere (/ tmp / ...) Ordner und achten Sie auf die Änderungen, wenn Sie ein "/" hinzufügen oder nicht. am Ende des Quell- oder Zielverzeichnisses.
Olivier Dulac
14

Dies hängt davon ab, wie schnell kopiert werden muss und wie viel Bandbreite zur Verfügung steht.

Berücksichtigen Sie bei einer schlechten Netzwerkverbindung die Bandbreite eines mit Bändern gefüllten Lastwagens. (Lesen Sie: Senden Sie eine 2,5-Zoll-Festplatte per Post oder fahren Sie sie dort selbst. 300-Gigabit-Laufwerke sollten leicht zu finden sein.)

Wenn es weniger zeitkritisch ist oder Sie viel Bandbreite haben, ist rsync großartig. Wenn ein Fehler auftritt, können Sie einfach fortfahren, ohne die früheren Dateien erneut zu kopieren.

[Bearbeiten] Ich habe vergessen hinzuzufügen, dass Sie rsync mehrmals ausführen können, wenn Ihre Daten während des Kopierens verwendet werden.

Beispiel:
1) Verwendete Daten. Rsync -> Alle Daten werden kopiert. Das kann ein bisschen dauern.
2) Führen Sie rsync erneut aus. Es werden nur die geänderten Dateien kopiert. Das sollte schnell gehen.

Sie können dies mehrmals tun, bis keine Änderungen mehr vorgenommen wurden, oder Sie können dies auf intelligente / sichere Weise tun, indem Sie die Daten während des Kopiervorgangs schreibgeschützt machen. (Wenn es sich beispielsweise um ein verwendetes freigegebenes Set handelt, dessen Freigabe schreibgeschützt ist. Oder synchronisieren Sie die Daten, und legen Sie nachts die Freigabe schreibgeschützt fest, während Sie sie ein zweites Mal ausführen.)

Hennes
quelle
1
Kein Server sollte irgendwo leben, wo die Bandbreite nicht in angemessener Zeit 300 G bewältigen kann ...
Dan
1
Das hängt davon ab, was "vernünftig" ist. Angenommen, das schwächste Glied ist 100 MBit (es ist mir egal, ob dies das Upload-Limit im Büro oder das Download-Limit auf der anderen Seite ist). Dies ermöglicht ungefähr 10 MB / s. (Div durch 10 scheint vernünftig, ich weiß, dass Sie etwas mehr bekommen können, wenn alles perfekt läuft. ZB benutzt niemand die Leitung für irgendetwas). 10 MB / s ~ ~ 600 MB / min ~ ~ 36000 MB / h ~ ~ 36 GB / h ~ ~ 300 GB sind 8h20min. Das geht über Nacht. Das macht auch viele Annahmen. Wenn der Upload beispielsweise nur 2 MBit beträgt (wir haben Büros mit diesen Geschwindigkeiten), dauert er 50-mal so lang (415 Stunden oder 17,3 Tage).
Hennes
Huch! Ja, 8-10 ist vernünftig, aber ich habe tatsächlich eine Reihe von Annahmen getroffen.
Dan
2
@Dan Wenn es erforderlich ist, dass der Server aktiv ist und Anforderungen bedient, ist die Auslastung der Upstream-Bandbreite wahrscheinlich eine schlechte Idee. Sie müssten also die Übertragungsgeschwindigkeit künstlich drosseln, um dies zu berücksichtigen.
Bob
6

Ich würde für Rsync gehen! Ich verwende es, um meinen Server auf einem externen Server zu sichern, und es funktioniert einwandfrei. Normalerweise müssen ein paar MB kopiert werden, aber an manchen Tagen sind es 20 bis 30 GB, und es hat immer problemlos funktioniert.

Simon
quelle
0

Rsync über NFS mit Gigabit-Verbindung dauert fast 10 Stunden. Es ist besser, Daten auf die Festplatte zu kopieren und zwischen den Servern zu verschieben. Wenn Sie eine Eins-zu-Eins-Kopie der tatsächlichen Festplatte erstellen müssen, verwenden Sie dd oder ähnliches, um ein unformatiertes Image der Festplatte zu erstellen. Die Verwendung von ssh (scp) verursacht einen enormen Overhead. Empirisch getestet auf Gigabit-Verbindung. Mit rsync kann eine inkrementelle Synchronisierung zwischen zwei Servern durchgeführt werden, die im Hochverfügbarkeitsmodus oder im Sicherungsmodus verwendet werden. Ich vermute.

Pawel
quelle
Die Sprache und der Stil dieser Antwort müssen verbessert werden.
FSMaxB
Rsync ist besonders gut, wenn sich Dateien während des Kopierens ändern können. Führe es einfach ein paar Mal aus. Erstmals werden alle Daten kopiert. Zum zweiten Mal nur das, was während der ersten (langen) Kopie geändert wurde. Ein drittes Mal würde nachts oder mit den Aktien nur zum Lesen erfolgen.
Hennes
will took nearly about 10h. It will be better to copy data on HDD and move them between server.außer dass es im ganzen Land ist, also würde es länger dauern.
Rob
@FSMaxB: Das mache ich später, danke.
Pawel
@Rob: Ich habe dies gelesen;) Dass sich die Server an zwei verschiedenen Orten befinden. Sie müssen also kalkulieren, was für Sie besser ist. Eine Reise quer durch das Land unternehmen (Kraftstoffkosten überprüfen usw.) oder eine Netzwerkverbindung verwenden. Was wird vorteilhafter sein.
Pawel
0

Erstmalige Verwendung von NFS und tar / untar (NFS ist in diesem Fall das schnellste Protokoll, tar, um Netzwerkbandbreite durch höhere CPU-Auslastung zu sparen.)

tar cf - * | ( cd /target; tar xfp -)

Verwenden Sie das nächste Mal / s rsync

Jet
quelle
Wenn Sie über genügend CPU-Leistung verfügen, können Sie dies verbessern, indem Sie der Schleife gzip hinzufügen. Und ohne NFS können Sie Netcat verwenden. (Oder auch beides: tar -cf - * | gzip | nc -p 4567und nc -l 4567 | gunzip | tar xf -.
Hennes
danke hennes, das war meine idee, aber ich habe gzip in den pipes vergessen
jet