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, scp
aber 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?
linux
performance
file-transfer
nicudotro
quelle
quelle
Antworten:
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.
Laut Mackintoshs Kommentar ist dies der Befehl, den Sie für rsync verwenden würden
quelle
~
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-t
Option). Ihr Anliegen ist also ungültig.Externe Festplatte und Lieferung per Kurier am selben Tag.
quelle
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/
quelle
--include
und verwenden--exclude
, um differenzierter zu werden.Verwenden Sie netcat, network swissarmy knife, ohne viel Diskussion. Kein Protokoll-Overhead, Sie kopieren direkt auf den Netzwerk-Socket. Beispiel
quelle
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.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 .
quelle
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
quelle
Als wir gestern 80 TB Daten (Millionen winziger Dateien) verschoben haben, erwies sich der Wechsel von
rsync
zutar
als viel schneller , als wir aufhörten, es zu versuchenund wechselte
tar
stattdessen zu ...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
atime
Dateien nicht zu speichern: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 . :)
quelle
tar cf - directory | ttcp -t dest_machine
von ftp.arl.mil/mike/ttcp.htmlBeim 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.
Um Dateien zwischen Servern zu übertragen, können Sie Fast-Archiver mit ssh wie folgt verwenden:
quelle
Ich benutze den Teer-Through-
netcat
Ansatz auch, außer ich bevorzuge es,socat
viel 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 findesocat
Argumente 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:Aliase sind optional.
quelle
Eine andere Alternative ist Unison . Könnte in diesem Fall etwas effizienter sein als Rsync, und es ist etwas einfacher, einen Listener einzurichten.
quelle
Es sieht so aus, als ob ein paar Tippfehler in der oberen Antwort stehen. Das könnte besser funktionieren:
quelle
wget --mirror
wie 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.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.
quelle
Dank der wunderbaren Antwort von Scott Pack (ich wusste vorher nicht, wie man das mit ssh macht), kann ich diese Verbesserung anbieten (wenn
bash
es Ihre Shell ist). Dies fügt eine parallele Komprimierung, eine Fortschrittsanzeige und eine Überprüfung der Integrität über die Netzwerkverbindung hinzu:pv
ist ein nettes Progress-Viewer-Programm für Ihre Pipe undpigz
ein 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 mitpxz -9e
undpxz -d
wenn 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:
Für Blockgeräte:
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 /thefs
den größten Teil des unbenutzten Speicherplatzes auf Null setzen, was den xfer beschleunigt.quelle
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.
quelle
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:
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.
quelle
Ich habe dies festgestellt, außer dass ich Oracle-Protokolle übertragen habe.
Hier ist die Aufschlüsselung
scp
rsync
FTP / HTTP
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.
quelle
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:
Dann auf der sendenden Seite:
Es hat folgende Vorteile:
gzip -1
sorgt 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.)z.B,
Anmerkungen:
tar
statt verwenden,cpio
wenn Sie es vorziehen.gzip -1
Sie stattdessen durch sich selbst, um eine CPU-Sättigung zu vermeiden. (Oder setzen Sie mindestens die Komprimierungsstufe auf 1.)quelle
Ein einfacher SCP mit geeigneten Optionen erreicht problemlos 9-10 MB / s über LAN:
Mit diesen Optionen ist es wahrscheinlich, dass der Durchsatz 4x oder 5x schneller als ohne Optionen wurde (Standard)
quelle
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)
quelle
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.
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.
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.
quelle
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:
oder
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).
quelle
Antwort von rSync-Option auf @scottpack
Um den Fortschritt des Uploads anzuzeigen, verwenden Sie '--progess' als Option nach -avW im folgenden Befehl.
quelle
Hier ist ein kurzer Benchmark, um einige Techniken zu vergleichen.
Anzahl der Dateien: 9632, Gesamtgröße: 814 MiB, Durchschnittliche Größe: 84 KiB
Befehl für tar / netcat war:
quelle
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.
quelle
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.)
quelle
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
quelle
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:
rsync
ohne-H
(dauerte 9 Stunden)cpool
Verzeichnis und begann mit dempc
Verzeichnis. Ich habe die Überweisung abgebrochen.rsync
mit-H
flag neu gestartet und alle Dateien, die impc
Verzeichnis fest verlinkt sind, wurden korrekt übertragen (der Vorgang fand alle echten Dateien im Verzeichniscpool
und verband sie dann mit dempc
Verzeichnis) (es dauerte 3 Stunden).Am Ende konnte ich feststellen,
df -m
dass 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.
quelle