So kopieren Sie eine große Anzahl von Dateien schnell zwischen zwei Servern


90

Ich muss eine Menge MP3s zwischen zwei Serves übertragen (Ubuntu). Mit "riesig" meine ich etwa eine Million Dateien, die durchschnittlich 300 KB groß sind. Ich habe es mit versucht, scpaber es hätte ungefähr eine Woche gedauert. (ca. 500 KB / s) Wenn ich eine einzelne Datei per HTTP übertrage, erhalte ich 9-10 MB / s, kann aber nicht alle übertragen.

Gibt es eine Möglichkeit, alle schnell zu übertragen?


1
Welche Art von Netzwerk haben Sie zwischen den Servern. Ich habe eine GB-Ethernet-Frequenzweiche zwischen 1 NIC in jeder Maschine verwendet. Ich habe es sehr gut überstanden, diese Konfiguration mit SCP
Jim Blizard am

Vielleicht möchten Sie untersuchen, warum scp so langsam ist. Es ist zwar langsamer als FTP, aber es sollte nicht so viel langsamer sein.
Zoredache

Ich habe 100 Mbit / s zwischen ihnen. scp ist langsamer auf die kleinen Dateien (die meisten von ihnen sind klein)
Nicudotro

Antworten:


115

Ich würde Teer empfehlen. Wenn die Dateibäume bereits ähnlich sind, funktioniert rsync sehr gut. Da rsync jedoch mehrere Analysedurchläufe für jede Datei ausführt und dann die Änderungen kopiert, ist es für die erste Kopie viel langsamer als tar. Dieser Befehl wird wahrscheinlich tun, was Sie wollen. Es kopiert die Dateien zwischen den Computern und behält sowohl die Berechtigungen als auch die Benutzer- / Gruppenrechte bei.

tar -c /path/to/dir | ssh remote_server 'tar -xvf - -C /absolute/path/to/remotedir'

Laut Mackintoshs Kommentar ist dies der Befehl, den Sie für rsync verwenden würden

rsync -avW -e ssh /path/to/dir/ remote_server:/path/to/remotedir

2
+1 Die tar-Option ist weitaus effizienter für eine große Anzahl kleiner Dateien, da sowohl scp als auch rsync viel mehr Roundtrips pro Datei über das Netzwerk haben.
Sekenre

3
rsync hat bei mir besser funktioniert als tar
nicudotro

4
Wenn Sie (auf beiden Seiten) über ausreichend CPU verfügen, aber (zumindest) eine langsame Verbindung zwischen den Hosts haben, kann es sinnvoll sein, die Komprimierung (gzip oder bzip) im Befehl tar zu aktivieren.
Vatine

1
@ Jamie: Wenn Sie ssh-agent verwenden, sollte es verwendet werden. Verwenden Sie andernfalls einfach die Option '-i', um anzugeben, wo sich der private Schlüssel befindet. Einzelheiten finden Sie auf der Manpage.
Scott Pack

3
@niXar Das ~Escape-Zeichen ist nur aktiviert, wenn SSH ein Terminal verwendet. Dies ist nicht der Fall, wenn Sie einen Remote-Befehl angeben (es sei denn, Sie übergeben die -tOption). Ihr Anliegen ist also ungültig.
Gilles

35

Externe Festplatte und Lieferung per Kurier am selben Tag.


10
Heh heh ... keine Netzwerktechnologie schlägt die Bandbreite eines mit Bändern beladenen Kombis mit 90 MPH, oder? (kichern) Ich nahm an, er war in einem LAN, weil er sagte, er würde 9-10 MB / s mit HTTP bekommen.
Evan Anderson

2
Ich bekomme diese Geschwindigkeit über das Internet, aber ich habe einfach Glück, wo ich wohne! Wenn es in einem LAN ist, dann immer noch billiger!
Adam

2
Ahh ... hab deinen Standort nicht angeschaut. Ja, ich habe gehört, dass die Internetverbindung in Korea ziemlich spektakulär ist. Ich stecke hier in den USA fest und bin froh, dass ich 900 KB / s über das Netz bekomme ...
Evan Anderson,

1
Ja, aber Sie können köstliche Burritos bekommen, während Sie auf den Download warten. Selbst in Seoul gibt es nur drei halbwegs anständige mexikanische Restaurants ...
Adam

17

Ich würde Rsync verwenden.

Wenn Sie sie über HTTP mit verfügbaren Verzeichnislisten exportieren lassen, können Sie auch wget und das Argument --mirror verwenden.

Sie sehen bereits, dass HTTP schneller ist als SCP, da SCP alles verschlüsselt (und somit Engpässe in der CPU verursacht). HTTP und Rsync werden sich schneller bewegen, weil sie nicht verschlüsseln.

Hier sind einige Dokumente zum Einrichten von rsync unter Ubuntu: https://help.ubuntu.com/community/rsync

In diesen Dokumenten wird über das Tunneln von rsync über SSH gesprochen. Wenn Sie jedoch nur Daten in einem privaten LAN verschieben, benötigen Sie kein SSH. (Ich gehe davon aus, dass Sie sich in einem privaten LAN befinden. Wenn Sie 9-10 MB / s über das Internet empfangen, möchte ich wissen, welche Art von Verbindungen Sie haben!)

Im Folgenden finden Sie einige sehr grundlegende Dokumente, mit denen Sie einen relativ unsicheren rsync-Server einrichten können (ohne Abhängigkeit von SSH): http://transamrit.net/docs/rsync/


Während SCP in der Tat etwas CPU zum Verschlüsseln der Daten verwendet, glaube ich nicht, dass er eine 100% ige CPU-Auslastung hat, so dass die CPU kein Engpass ist. Ich habe auch oft bemerkt, dass SCP ineffizient ist, wenn es um schnelle Übertragungen geht.
Cristian Ciupitu

Da er 300 KB für SCP und 9 MB für HTTP sah, nahm ich an, dass ein SCP-bedingter Engpass (normalerweise CPU) ins Spiel kam. Es könnte aber auch etwas anderes sein. Ohne die Hardware-Spezifikationen der fraglichen Maschinen zu kennen, ist es schwer zu sagen.
Evan Anderson

1
rsync wird mit ziemlicher Sicherheit ssh für den Transport verwenden, da dies das Standardverhalten ist. Daher ist der durch die Verschlüsselung in scp verursachte Overhead auch in rsync
Daniel Lawson,

3
"Sie sehen bereits, dass HTTP schneller als SCP ist, weil SCP alles verschlüsselt" → FALSCH. Sofern er keine 10 Jahre alten Server hat, ist er für diese Aufgabe nicht CPU-gebunden.
niXar

1
@RamazanPOLAT - Sie haben eine zu lange Befehlszeile. Geben Sie die Dateiauswahl anders an und es wird gut für Sie funktionieren. Normalerweise können Sie am Ende nur das Quellverzeichnis ohne Platzhalter angeben. Sie können auch die Argumente --includeund verwenden --exclude, um differenzierter zu werden.
Evan Anderson

15

Verwenden Sie netcat, network swissarmy knife, ohne viel Diskussion. Kein Protokoll-Overhead, Sie kopieren direkt auf den Netzwerk-Socket. Beispiel

srv1$ tar cfv - *mp3 | nc -w1 remote.server.net 4321

srv2$ nc -l -p 4321 |tar xfv -

2
Leider ist netcat, wie mir aufgefallen ist, sehr ineffizient, auch wenn es nicht so sein sollte.
Cristian Ciupitu

Ich stimme dich ab, weil das wirklich ein schrecklicher Rat ist. Es gibt eine richtige Antwort: rsync. Ich könnte alle Gründe auflisten, warum es besser ist, aber es würde nicht auf diese Seite passen, geschweige denn dieses winzige Kommentarfeld.
niXar

2
@niXar: Wenn Sie nur eine einzige Dateiübertragung durchführen möchten (keine weitere Synchronisierung erforderlich), ist Tarpipe wirklich alles, was Sie benötigen.
Witiko

2
@niXar Netcat ist in Ordnung, wenn Sie dies in einer sicheren Umgebung wie privatem VLAN und / oder über VPN tun.
Lester Cheung

Netcat eignet sich hervorragend für eine sichere Umgebung, bis Sie ein wenig gekippt werden und der gesamte 1-TB-Stream schlecht ist. Ich habe ein ausgeklügeltes Skript wie dieses mit paralleler Komprimierung, Fortschrittsausgabe (via pv) und Integritätsprüfung (via ) sha512sum, aber sobald ein bisschen umgedreht ist, ist der gesamte Stream schlecht, weil es keine Möglichkeit gibt, ihn wiederherzustellen. Was wir wirklich brauchen, ist ein leichtes Protokoll wie ein Streaming-Torrent für diese sicheren Umgebungen, wenn wir einen geringen Overhead benötigen - etwas, das die Integrität auf der Chunk-Ebene (z. B. 4 MB) überprüft und einen Chunk erneut senden kann, wenn einer ausfällt. TCP crc ist nicht leistungsfähig genug.
Daniel Santos

8

Wenn Sie mit rsync arbeiten, würde ich mit vielen Dateien versuchen, Version 3 oder höher an beiden Enden zu bekommen . Der Grund dafür ist, dass eine niedrigere Version jede Datei auflistet, bevor sie mit der Übertragung beginnt. Die neue Funktion heißt inkrementelle Rekursion .

Ein neuer inkrementeller Rekursionsalgorithmus wird jetzt verwendet, wenn rsync mit einer anderen 3.x-Version kommuniziert. Dadurch wird die Übertragung schneller gestartet (bevor alle Dateien gefunden wurden) und es wird viel weniger Speicher benötigt. Unter der Option --recursive in der Manpage finden Sie einige Einschränkungen.


7

rsync hat wie andere schon empfohlen. Wenn der CPU-Overhead durch die Verschlüsselung ein Engpass ist, verwenden Sie einen anderen weniger CPU-intensiven Algorithmus wie Blowfish. ZB sowas

rsync -ax -e 'ssh -c blowfish' /local/path user@host:/remote/path


+1 für Punkt über das Ändern der Chiffre
Daniel Lawson

Die CPU wird kein Engpass sein, es sei denn, Sie haben 10G Ethernet und eine 10 Jahre alte CPU.
NiXar

1
nur kommentieren: chiffre "-c arcfour" ist schneller.
Arman

@niXar: Wenn Sie jedoch bereits eine CPU-belastende Aufgabe auf Ihrem Computer haben, ist dies ein Problem.
Isaac

6

Als wir gestern 80 TB Daten (Millionen winziger Dateien) verschoben haben, erwies sich der Wechsel von rsynczu tar als viel schneller , als wir aufhörten, es zu versuchen

# slow
rsync -av --progress /mnt/backups/section01/ /mnt/destination01/section01

und wechselte tarstattdessen zu ...

# fast
cd /mnt/backups/
tar -cf - section01 | tar -xf - -C /mnt/destination01/ 

Da sich diese Server im selben LAN befinden, ist das Ziel auf dem Quellsystem, das den Push ausführt, NFS-gemountet. Nein, mach es noch schneller, wir haben beschlossen, die atimeDateien nicht zu speichern:

mount -o remount,noatime /mnt/backups
mount -o remount,noatime /mnt/destination01

Die folgende Grafik zeigt den Unterschied, den der Wechsel von rsync zu tar gemacht hat. Es war die Idee meines Chefs, und mein Kollege hat sie ausgeführt und die großartigen Aufzeichnungen in seinem Blog gemacht . Ich mag nur schöne Bilder . :)

rsync_vs_tar


Ein Hacker, dem ich vertraue, sagt mir, dass "Teer über TC anstelle von NFS sogar schneller sein könnte". dh tar cf - directory | ttcp -t dest_machinevon ftp.arl.mil/mike/ttcp.html
Philip Durbin

Unabhängige Frage, aber woher kommt diese Grafik?
CyberJacob

4

Beim Kopieren einer großen Anzahl von Dateien stellte ich fest, dass Tools wie tar und rsync ineffizienter sind, als es der Aufwand beim Öffnen und Schließen vieler Dateien erfordert. Ich habe ein Open-Source-Tool namens fast-archiver geschrieben, das für diese Szenarien schneller als tar ist: https://github.com/replicon/fast-archiver ; Es funktioniert schneller, indem mehrere Dateivorgänge gleichzeitig ausgeführt werden.

Hier ist ein Beispiel für Fast-Archiver vs. Tar bei einer Sicherung von über zwei Millionen Dateien. Das schnelle Archivieren dauert 27 Minuten, das Teer 1 Stunde 23 Minuten.

$ time fast-archiver -c -o /dev/null /db/data
skipping symbolic link /db/data/pg_xlog
1008.92user 663.00system 27:38.27elapsed 100%CPU (0avgtext+0avgdata 24352maxresident)k
0inputs+0outputs (0major+1732minor)pagefaults 0swaps

$ time tar -cf - /db/data | cat > /dev/null
tar: Removing leading `/' from member names
tar: /db/data/base/16408/12445.2: file changed as we read it
tar: /db/data/base/16408/12464: file changed as we read it
32.68user 375.19system 1:23:23elapsed 8%CPU (0avgtext+0avgdata 81744maxresident)k
0inputs+0outputs (0major+5163minor)pagefaults 0swaps

Um Dateien zwischen Servern zu übertragen, können Sie Fast-Archiver mit ssh wie folgt verwenden:

ssh postgres@10.32.32.32 "cd /db; fast-archive -c data --exclude=data/\*.pid" | fast-archiver -x

3

Ich benutze den Teer-Through- netcatAnsatz auch, außer ich bevorzuge es, socatviel mehr Leistung zu verwenden, um für Ihre Situation zu optimieren - zum Beispiel durch Optimieren von mss. (Lachen Sie auch, wenn Sie möchten, aber ich finde socatArgumente leichter zu merken, weil sie konsistent sind). Für mich ist dies in letzter Zeit sehr weit verbreitet, da ich Dinge auf neue Server verschoben habe:

host1$ tar cvf - filespec | socat stdin tcp4:host2:portnum

host2$ socat tcp4-listen:portnum stdout | tar xvpf -

Aliase sind optional.


2

Eine andere Alternative ist Unison . Könnte in diesem Fall etwas effizienter sein als Rsync, und es ist etwas einfacher, einen Listener einzurichten.


2

Es sieht so aus, als ob ein paar Tippfehler in der oberen Antwort stehen. Das könnte besser funktionieren:

tar -cf - /path/to/dir | ssh remote_server 'tar -xvf - -C /path/to/remotedir'

Ich habe festgestellt, dass der Befehl fehlgeschlagen ist, als ich die Option -f verwendet habe.
user11749

@ user11749: In diesem Befehl gibt es zwei -f-Optionen, die beide erforderlich sind. Sprechen Sie über die Übergabe von -f an ssh, damit es in den Hintergrund tritt?
Rückzug

2
  • Network File System (NFS) und kopieren Sie sie dann mit einem beliebigen Befehl, z. B. Midnight Commander (mc), Nautilus (von gnome). Ich habe NFS v3 mit guten Ergebnissen verwendet.
  • Samba (CIFS) und dann kopieren Sie die Dateien mit, was Sie wollen, aber ich habe keine Ahnung, wie effizient es ist.
  • HTTP mit, wget --mirrorwie Evan Anderson vorgeschlagen hat, oder einem anderen http-Client. Achten Sie darauf, keine bösen Symlinks oder irreführenden Indexdateien zu haben. Wenn Sie nur MP3s haben, sollten Sie sicher sein.
  • rsync . Ich habe es mit ziemlich guten Ergebnissen verwendet und eine der netten Eigenschaften ist, dass Sie die Übertragung später unterbrechen und fortsetzen können.

Ich habe bemerkt, dass andere Leute die Verwendung von Netcat empfohlen haben . Aufgrund meiner Erfahrung kann ich sagen, dass es im Vergleich zu den anderen Lösungen langsam ist.


2

Dank der wunderbaren Antwort von Scott Pack (ich wusste vorher nicht, wie man das mit ssh macht), kann ich diese Verbesserung anbieten (wenn bashes Ihre Shell ist). Dies fügt eine parallele Komprimierung, eine Fortschrittsanzeige und eine Überprüfung der Integrität über die Netzwerkverbindung hinzu:

tar c file_list |
    tee >(sha512sum >&2) |
    pv -prab |
    pigz -9 |
    ssh [user@]remote_host '
        gunzip |
        tee >(sha512sum >&2) |
        tar xC /directory/to/extract/to
    '

pvist ein nettes Progress-Viewer-Programm für Ihre Pipe und pigzein paralleles GZIP-Programm, das so viele Threads verwendet, wie Ihre CPU standardmäßig hat (ich glaube, bis zu 8 max). Sie können die Komprimierungsstufe abzustimmen , um besser das Verhältnis von CPU zu passen Bandbreite zu vernetzen und sie tauschen mit pxz -9eund pxz -dwenn Sie viel mehr CPU als Bandbreite. Sie müssen nur überprüfen, ob die beiden Summen nach Abschluss übereinstimmen.

Diese Option ist nützlich für sehr große Datenmengen sowie Netzwerke mit hoher Latenz, aber nicht sehr hilfreich, wenn die Verbindung instabil ist und ausfällt. In diesen Fällen ist rsync wahrscheinlich die beste Wahl, da es fortgesetzt werden kann.

Beispielausgabe:

6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e  -                     ]
 176MiB [9.36MiB/s] [9.36MiB/s] [                                            <=>                                                                        ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e  -

Für Blockgeräte:

dd if=/dev/src_device bs=1024k |
    tee >(sha512sum >&2) |
    pv -prab |
    pigz -9 |
    ssh [user@]remote_host '
        gunzip |
        tee >(sha512sum >&2) |
        dd of=/dev/src_device bs=1024k
    '

Stellen Sie sicher, dass sie die gleiche Größe oder das gleiche Limit haben (count =, skip =, seek = usw.).

Wenn ich Dateisysteme auf diese Weise kopiere, werde ich häufig zuerst dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefsden größten Teil des unbenutzten Speicherplatzes auf Null setzen, was den xfer beschleunigt.


1

Ich glaube nicht, dass Sie es besser machen als scp, wenn Sie nicht schnellere Netzwerkkarten installieren. Wenn Sie dies über das Internet tun, wird dies jedoch nicht helfen.

Ich würde die Verwendung von Rsync empfehlen . Es ist vielleicht nicht schneller, aber wenn es fehlschlägt (oder Sie es herunterfahren, weil es zu lange dauert), können Sie das nächste Mal dort weitermachen, wo Sie aufgehört haben.

Wenn Sie die beiden Computer direkt über Gigabit-Ethernet verbinden können, ist dies wahrscheinlich die schnellste.


Ich habe eine unbenutzte 100 MBit / s-Verbindung direkt zwischen ihnen
nicudotro

1
Sie werden es nicht besser machen als SCP? SCP pusht all diese Daten durch einen Verschlüsselungsschritt. SCP wird eine der langsamsten Möglichkeiten sein, es zu kopieren!
Evan Anderson

Richtig, wenn SCP die Daten verschlüsselt, aber die Verschlüsselungsgeschwindigkeit ist um Größenordnungen schneller als die Netzwerkverbindung und daher vernachlässigbar.
Brent

1

Bei 100 MBit / s liegt der theoretische Durchsatz bei 12,5 MBit / s, bei 10 MBit / s geht es also ganz gut.

Ich würde auch den Vorschlag, rsync zu machen, wahrscheinlich durch ssh wiederholen. So etwas wie:

rsync -avW -e ssh $SOURCE $USER@$REMOTE:$DEST

Bei 100 MBit / s sollten Ihre CPUs in der Lage sein, die Ver- / Entschlüsselung durchzuführen, ohne die Datenrate merklich zu beeinträchtigen. Wenn Sie den Datenfluss unterbrechen, sollten Sie an der Stelle weitermachen können, an der Sie aufgehört haben. Achtung, bei "Millionen" von Dateien dauert es eine Weile, bis der Startvorgang abgeschlossen ist.


1

Ich habe dies festgestellt, außer dass ich Oracle-Protokolle übertragen habe.

Hier ist die Aufschlüsselung

  • scp

    inefficient and encrypted (encrypted = slower than unencrypted 
    depending on the link and your processor) 
    
  • rsync

    efficient but typically encrypted (though not necessarily)
    
  • FTP / HTTP

    both seem to be efficient, and both are plaintext. 
    

Ich habe FTP mit großem Erfolg verwendet (wobei großer Erfolg ~ 700 MBit / s in einem Gb-Netzwerk entspricht). Wenn Sie 10 MB (was 80 MB / s entspricht) haben, stimmt wahrscheinlich etwas nicht.

Was können Sie uns über die Quelle und das Ziel der Daten mitteilen? Ist es ein einzelnes Laufwerk zu einem einzelnen Laufwerk? RAID zu USB?

Ich weiß, diese Frage hat bereits eine Antwort, aber wenn Ihr Netzwerk auf einem Gbit / s-Crossover-Kabel so langsam läuft, muss unbedingt etwas behoben werden.


1

Sie haben nicht erwähnt, ob sich die beiden Computer im selben LAN befinden oder ob ein sicherer Kanal (dh die Verwendung von SSH) obligatorisch ist, aber ein anderes Tool, das Sie verwenden könnten, ist netcat .

Ich würde Folgendes auf dem Empfangsgerät verwenden:

cd <destdir>
netcat -l -p <port> | gunzip | cpio -i -d -m

Dann auf der sendenden Seite:

cd <srcdir>
find . -type f | cpio -o | gzip -1 | netcat <desthost> <port>

Es hat folgende Vorteile:

  • Kein CPU-Overhead für die Verschlüsselung, die ssh hat.
  • Die gzip -1sorgt für eine leichte Komprimierung, ohne die CPU zu überlasten, so dass ein guter Kompromiss erzielt wird. Dadurch wird eine gewisse Komprimierung erzielt, während der maximale Durchsatz beibehalten wird. (Wahrscheinlich nicht so vorteilhaft für MP3-Daten, aber es tut nicht weh.)
  • Wenn Sie die Dateien in Gruppen aufteilen können, können Sie zwei oder mehr Pipes parallel ausführen und sicherstellen, dass Sie die Netzwerkbandbreite wirklich auslasten.

z.B,

find <dir1> <dir2> -type f | cpio -o | gzip -1 | netcat <desthost> <portone>
find <dir3> <dir4> -type f | cpio -o | gzip -1 | netcat <desthost> <porttwo>

Anmerkungen:

  • Was auch immer Sie übertragen, ich würde wahrscheinlich danach einen Rsync oder einen Unisono ausführen, um sicherzustellen, dass Sie alles haben.
  • Sie können tarstatt verwenden, cpiowenn Sie es vorziehen.
  • Selbst wenn Sie am Ende ssh verwenden, stelle ich sicher, dass keine Komprimierung verwendet wird, und leiten gzip -1Sie stattdessen durch sich selbst, um eine CPU-Sättigung zu vermeiden. (Oder setzen Sie mindestens die Komprimierungsstufe auf 1.)

1

Ein einfacher SCP mit geeigneten Optionen erreicht problemlos 9-10 MB / s über LAN:

scp -C -c arcfour256 ./local/files.mp3 remoteuser@remoteserver:/opt/remote

Mit diesen Optionen ist es wahrscheinlich, dass der Durchsatz 4x oder 5x schneller als ohne Optionen wurde (Standard)


aber nicht für eine Million kleine Dateien. Hast du deine Lösung selbst ausprobiert?
Sajuuk

1

Wenn Sie einen FTP-Server auf src-Seite haben, können Sie ncftpget von der ncftp-Site verwenden . Es funktioniert perfekt mit kleinen Dateien, da es intern tar verwendet.

Ein Vergleich zeigt dies: Verschieben von 1,9 GB kleinen Dateien (33926 Dateien)

  1. Scp zu benutzen dauert 11m59s
  2. Die Verwendung von rsync dauert 7 Minuten und 10 Sekunden
  3. Die Verwendung von ncftpget dauert 1m20s

1

Sie können auch versuchen, die Übertragung mit dem BBCP-Befehl durchzuführen. Es ist ein gepuffertes Parallel-SSH, das wirklich schreit. Wir können normalerweise 90% + Leitungsrate erhalten, vorausgesetzt, wir können die Leitung weiter versorgen.

$ bbcp -s 8 -w 64M -N io 'tar -cO srcdirectory' desthostname:'tar -x -C destdir'

Normalerweise bemühen wir uns sehr zu vermeiden, dass wir uns bewegen müssen. Wir verwenden ZFS-Pools, denen wir immer nur mehr Speicherplatz hinzufügen können. Aber manchmal ... muss man einfach Sachen bewegen. Wenn wir ein "Live" -Dateisystem haben, dessen Kopieren Stunden (oder Tage) in Anspruch nehmen kann, selbst wenn es auf Hochtouren geht.

  1. Erstellen Sie einen ZFS-Snapshot und übertragen Sie ihn in den neuen Pool auf dem neuen Computer. Lass es so lange dauern, wie es dauert.
  2. Erstellen Sie einen zweiten Schnappschuss und senden Sie ihn inkrementell. Der inkrementelle Schnappschuss enthält nur den (viel kleineren) Änderungssatz seit dem ersten, sodass er relativ schnell ausgeführt wird.
  3. Sobald der inkrementelle Snapshot abgeschlossen ist, können Sie das Original ausschalten und auf die neue Kopie umstellen, und Ihre "Offline-Ausfallzeit" wird auf ein Minimum reduziert.

Wir senden unsere zfs-Dumps auch über BBCP ... das maximiert unsere Netzwerkauslastung und minimiert die Übertragungszeiten.

BBCP ist frei verfügbar, Sie können es googeln und es ist eine direkte Kompilierung. Kopieren Sie es einfach in Ihr / usr / local / bin auf dem src- und dem Zielcomputer und es wird so ziemlich einfach funktionieren.


1

Ich denke, meine Antwort ist hier etwas spät, aber ich habe gute Erfahrungen mit der Verwendung von mc (Midnight Commander) auf einem Server gemacht, um über SFTP eine Verbindung zum anderen Server herzustellen.

Die Möglichkeit, eine Verbindung über FTP herzustellen, besteht in den Menüs "Links" und "Rechts", indem Sie die Adresse wie folgt eingeben:

/#ftp:name@server.xy/

oder

/#ftp:name@ip.ad.dr.ess/

Sie können fast wie auf einem lokalen Dateisystem navigieren und Dateioperationen ausführen.

Es hat eine eingebaute Option, um im Hintergrund zu kopieren, aber ich bevorzuge es, den Bildschirmbefehl zu verwenden und mich vom Bildschirm zu lösen, während mc kopiert (ich denke, es läuft dann auch schneller).


1

Antwort von rSync-Option auf @scottpack

Um den Fortschritt des Uploads anzuzeigen, verwenden Sie '--progess' als Option nach -avW im folgenden Befehl.

rsync -avW --progress -e ssh /path/to/dir/ remote_server:/path/to/remotedir

Bildbeschreibung hier eingeben


1

Hier ist ein kurzer Benchmark, um einige Techniken zu vergleichen.

  • Quelle ist eine 4-Kern Intel (R) Xeon (R) -CPU E5-1620 bei 3,60 GHz mit 250 Mbit / s und SATA-Laufwerk
  • Ziel ist eine 6-Kern Intel (R) Xeon (R) -CPU E-2136 bei 3,30 GHz mit 1 Gbit / s Bandbreite und SSD-Laufwerk

Anzahl der Dateien: 9632, Gesamtgröße: 814 MiB, Durchschnittliche Größe: 84 KiB

  • RSYNC: 1m40.570s
  • RSYNC + KOMPRESSION: 0m26.519s
  • TAR + NETCAT: 1M58.763s
  • TAR + COMPRESSION + NETCAT: 0m28.009s

Befehl für tar / netcat war:

Source : tar -cf - /sourcedir/ | nc -v 11.22.33.44 5000
Dest : nc -v -l 5000 | tar -xf -

0

rsync oder Sie möchten es vielleicht tarieren, damit es alles in einer Datei und dann scp ist. Wenn Ihnen der Speicherplatz fehlt, können Sie den Teer direkt über ssh leiten, während er erstellt wird.


0

Wenn Sie über MP3s und andere komprimierte Dateien senden, profitieren Sie von keiner Lösung, die versucht, diese Dateien weiter zu komprimieren. Die Lösung könnte mehrere Verbindungen zwischen beiden Servern herstellen und somit die Bandbreite zwischen den beiden Systemen stärker belasten. Sobald diese Grenze überschritten ist, kann nicht mehr viel erreicht werden, ohne die Hardware zu verbessern. (Zum Beispiel schnellere Netzwerkkarten zwischen diesen Servern.)


0

Ich habe einige Tools zum Kopieren einer 1-GB-Datei ausprobiert. Das Ergebnis ist unten: HTTP am schnellsten, wget -c nc Sekunde in Zeile scp am langsamsten und einige Male fehlgeschlagen. Keine Möglichkeit, rsync fortzusetzen, verwendet ssh als Backend, daher dasselbe Ergebnis. Abschließend würde ich mit wget -bqc für http gehen und es einige Zeit geben. Hoffe, dass das hilft


Geben Sie einen Einblick, warum http am schnellsten ist?
Sajuuk

0

Ich musste die BackupPC-Diskette auf einen anderen Computer kopieren.

Ich habe Rsync verwendet.

Die Maschine hatte 256 MB Speicher.

Das Verfahren, dem ich folgte, war dieses:

  • ausgeführt rsyncohne -H(dauerte 9 Stunden)
  • Als Rsync fertig war, synchronisierte ich das cpoolVerzeichnis und begann mit dem pcVerzeichnis. Ich habe die Überweisung abgebrochen.
  • Dann wurde rsyncmit -Hflag neu gestartet und alle Dateien, die im pcVerzeichnis fest verlinkt sind, wurden korrekt übertragen (der Vorgang fand alle echten Dateien im Verzeichnis cpoolund verband sie dann mit dem pcVerzeichnis) (es dauerte 3 Stunden).

Am Ende konnte ich feststellen, df -mdass kein zusätzlicher Platz ausgegeben wurde.

Auf diese Weise umgehe ich das Problem mit dem Speicher und Rsync. Ich kann die Leistung jederzeit mit top und atop überprüfen und habe schließlich 165 GB Daten übertragen.

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.