Ich archiviere Daten von einem Server auf einen anderen. Anfangs habe ich einen rsync
Job angefangen . Es dauerte 2 Wochen, bis die Dateiliste nur für 5 TB Daten erstellt wurde, und eine weitere Woche, bis 1 TB Daten übertragen wurden.
Dann musste ich den Job beenden, da wir einige Ausfallzeiten auf dem neuen Server benötigen.
Es wurde vereinbart, dass wir es tarieren werden, da wir wahrscheinlich nicht mehr darauf zugreifen müssen. Ich dachte daran, es in 500-GB-Blöcke aufzuteilen. Nachdem ich tar
es dann gemacht hatte, wollte ich es durchschreiben ssh
. Ich habe verwendet tar
und pigz
aber es ist immer noch zu langsam.
Gibt es einen besseren Weg, es zu tun? Ich denke, beide Server sind auf Redhat. Der alte Server ist Ext4 und der neue ist XFS.
Die Dateigrößen reichen von wenigen KB bis zu wenigen MB und es gibt 24 Millionen JPEGs in 5 TB. Ich schätze also auf etwa 60-80 Millionen für 15 TB.
edit: Nach ein paar Tagen mit rsync, nc, tar, mbuffer und pigz spielen. Der Engpass wird der Platten-E / A sein. Da die Daten auf 500 SAS-Festplatten und rund 250 Millionen JPEGs verteilt sind. Jetzt lernte ich all diese netten Tools, die ich in Zukunft verwenden kann.
Antworten:
Ich habe sehr gute Ergebnisse mit
tar
,pigz
(parallel gzip) und erzieltnc
.Quellmaschine:
Zielmaschine:
Extrahieren:
So bewahren Sie das Archiv auf:
Wenn Sie die Übertragungsrate sehen möchten, leiten Sie sie einfach
pv
nachpigz -d
!quelle
pigz
mitgzip
ihnen ganz oder entfernen, aber die Geschwindigkeit wird deutlich langsamer.tar
undpigz
? Ich verstehe nicht ...pigz
? Aus der Frage sieht es so aus, als hätte er es bisher nur versuchtrsync
und überlegt ,tar
die Daten zu teilen und zu bündeln. Insbesondere, wenn er die-z
/--compress
-Option bei rsync nicht verwendet hat ,pigz
könnte dies theoretisch erheblich helfen.tar
die Daten nicht schnell genug produziert werdenpigz
, um viel CPU für die Komprimierung zu verwenden. Das Lesen vieler kleiner Dateien ist mit viel mehr Systemaufrufen, viel mehr Festplattensuchen und viel mehr Systemaufwand verbunden als das Lesen derselben Anzahl von Bytes größerer Dateien, und es sieht so aus, als ob Sie auf einer grundlegenden Ebene einfach einen Engpass haben.Ich würde bei der Rsync-Lösung bleiben. Modern (3.0.0+) rsync verwendet eine inkrementelle Dateiliste, sodass vor der Übertragung keine vollständige Liste erstellt werden muss. Wenn Sie das Gerät neu starten, müssen Sie bei Problemen nicht die gesamte Übertragung wiederholen. Durch Aufteilen der Übertragung nach obersten oder zweiten Verzeichnissen wird dies noch weiter optimiert. (Ich würde verwenden
rsync -a -P
und hinzufügen,--compress
wenn Ihr Netzwerk langsamer als Ihre Laufwerke ist.)quelle
unison
? Wie ist es zu vergleichenrsync
?Richten Sie ein VPN ein (sofern es über das Internet erreichbar ist), erstellen Sie ein virtuelles Laufwerk in einem bestimmten Format auf dem Remoteserver (machen Sie es zu einem ext4-Laufwerk), hängen Sie es auf dem Remoteserver an und hängen Sie es dann auf dem lokalen Server an (unter Verwendung eines Protokolls auf Blockebene wie iSCSI) ), und verwenden Sie dd oder ein anderes Tool auf Blockebene, um die Übertragung durchzuführen. Sie können die Dateien dann nach Belieben vom virtuellen Laufwerk auf das reale Laufwerk (XFS) kopieren.
Zwei Gründe:
quelle
Wenn der alte Server außer Betrieb genommen wird und die Dateien für einige Minuten offline sein können, ist es oft am schnellsten, die Laufwerke aus der alten Box zu ziehen und sie mit dem neuen Server zu verbinden, sie zu mounten (jetzt wieder online) und die Dateien zu kopieren auf den neuen Servern native Festplatten.
quelle
Verwenden Sie mbuffer, und wenn es sich in einem sicheren Netzwerk befindet, können Sie den Verschlüsselungsschritt vermeiden.
quelle
(Viele verschiedene Antworten können funktionieren. Hier ist eine andere.)
Generieren Sie die Dateiliste mit
find -type f
(dies sollte in ein paar Stunden abgeschlossen sein), teilen Sie sie in kleine Teile auf und übertragen Sie jeden Teil mitrsync --files-from=...
.quelle
Hast du über Sneakernet nachgedacht? Damit meine ich, alles auf dasselbe Laufwerk zu übertragen und dieses Laufwerk dann physisch zu verschieben.
Vor ungefähr einem Monat hat Samsung ein 16-TB-Laufwerk vorgestellt (technisch gesehen sind es 15,36 TB), bei dem es sich auch um eine SSD handelt: http://www.theverge.com/2015/8/14/9153083/samsung-worlds-largest-hard -Laufwerk-16tb
Ich denke, dass dieser Antrieb gerade dafür tun würde. Sie müssten immer noch alle Dateien kopieren, aber da Sie keine Netzwerklatenz haben und wahrscheinlich SATA oder eine ähnlich schnelle Technik verwenden können, sollte es viel schneller sein.
quelle
Wenn es eine Chance gibt, eine hohe Erfolgsquote bei der Deduplizierung zu erzielen, würde ich so etwas wie Borgbackup oder Attic verwenden.
Wenn nicht, überprüfen Sie die netcat + tar + pbzip2- Lösung, passen Sie die Komprimierungsoptionen an Ihre Hardware an - überprüfen Sie, was der Engpass ist (CPU? Netzwerk? IO?). Das pbzip2 würde sich über alle CPUs erstrecken und eine bessere Leistung liefern.
quelle
xz
) dekomprimiert schneller als bzip2 und funktioniert bei den meisten Eingaben gut. Leider istxz
die Multithread-Option von noch nicht implementiert.pigz
prob. Seien Sie der langsamste Kompressor, den Sie verwenden möchten. Oder sogarlz4
. (Es gibt einenlz4mt
Multi-Threaded-for-a-Single-Stream. Er ist nicht sehr effizient (führt extrem oft zu neuen Threads), aber es wird eine solide Beschleunigung erreicht.)Sie verwenden RedHat Linux, dies würde also nicht zutreffen, aber als eine andere Option:
Ich hatte großen Erfolg mit ZFS, um Millionen von Dateien zu speichern, da Inodes kein Problem darstellen.
Wäre dies eine Option für Sie, könnten Sie Snapshots erstellen und zfs verwenden, um inkrementelle Updates zu senden. Ich hatte viel Erfolg mit dieser Methode, um Daten zu übertragen und zu archivieren.
ZFS ist in erster Linie ein Solaris-Dateisystem, befindet sich jedoch in der Abbildung (Open Source Fork von Suns OpenSolaris). Ich weiß, dass es auch ein bisschen Glück gab, ZFS unter BSD und Linux (mit FUSE?) Zu verwenden - aber ich habe keine Erfahrung damit.
quelle
Starten Sie einen
rsync
Daemon auf dem Zielcomputer. Dies beschleunigt den Übertragungsprozess erheblich.quelle
Sie können dies mit nur tar und ssh tun, wie folgt:
tar zcf - <your files> | ssh <destination host> "cat > <your_file>.tar.gz"
Oder, wenn Sie einzelne Dateien behalten möchten:
tar zcf - <your files> | ssh <destination host> "tar zxf -"
quelle