82 votes

Transférer 15 To de petits fichiers

Je suis en train d'archiver des données d'un serveur à un autre. Au départ, j'ai lancé un rsync travail. Il lui a fallu deux semaines pour établir la liste des fichiers pour 5 To de données et une autre semaine pour transférer 1 To de données.

Puis j'ai dû arrêter le travail car nous avons besoin d'un temps d'arrêt sur le nouveau serveur.

Il a été convenu que nous le goudronnerons puisque nous n'aurons probablement plus besoin d'y accéder. Je pensais le diviser en morceaux de 500 Go. Après avoir tar puis j'allais le copier en passant par ssh . J'utilisais tar y pigz mais c'est toujours trop lent.

Y a-t-il une meilleure façon de procéder ? Je pense que les deux serveurs sont sur Redhat. L'ancien serveur est en Ext4 et le nouveau en XFS.

La taille des fichiers varie de quelques kb à quelques mb et il y a 24 millions de jpegs dans 5TB. Je suppose donc qu'il y en a environ 60 à 80 millions pour 15 To.

edit : Après avoir joué avec rsync, nc, tar, mbuffer et pigz pendant quelques jours. Le goulot d'étranglement va être l'IO du disque. Comme les données sont réparties sur 500 disques SAS et environ 250 millions de jpegs. Cependant, j'ai appris à connaître tous ces beaux outils que je pourrai utiliser à l'avenir.

1 votes

Duplication possible de linux à linux, transfert de 10TB ?

2 votes

Une option consiste à créer les fichiers tar compressés sur un disque externe et à le déplacer vers le nouveau système. Le disque supplémentaire accélérera la création des fichiers tar (il n'écrira pas sur les disques existants du système, peut-être en essayant d'y lire 15 To) et n'encombrera pas le nouveau serveur.

4 votes

Y a-t-il une meilleure façon de procéder ? - Ouais, Windows Server 2012 R2 DFS réplication préparerait cela en 10 heures environ . Et il synchronisait les changements, et reprenait là où il s'était arrêté après les redémarrages.

68voto

h0tw1r3 Points 2706

J'ai obtenu de très bons résultats en utilisant tar , pigz (gzip parallèle) et nc .

Machine source :

tar -cf - -C /path/of/small/files . | pigz | nc -l 9876

Machine de destination :

Pour l'extraire :

nc source_machine_ip 9876 | pigz -d | tar -xf - -C /put/stuff/here

Pour conserver les archives :

nc source_machine_ip 9876 > smallstuff.tar.gz

Si vous voulez voir le taux de transfert, il suffit de passer par le canal pv après pigz -d !

3 votes

Pour info, vous pouvez remplacer pigz con gzip ou le supprimer complètement, mais la vitesse sera nettement plus faible.

10 votes

Comment cela peut-il être accepté si l'OP a déjà essayé tar y pigz ? Je ne comprends pas...

5 votes

Thomas Weller, où avez-vous trouvé qu'il a essayé pigz ? D'après la question, il semble qu'il ait seulement essayé rsync jusqu'à présent, et était en considérant en utilisant tar pour diviser et regrouper les données. Surtout s'il n'a pas utilisé le -z / --compress sur rsync, pigz pourrait théoriquement aider de manière significative.

21voto

Fox Points 3877

Je m'en tiendrais à la solution rsync. Le rsync moderne (3.0.0+) utilise une liste de fichiers incrémentielle, il n'a donc pas besoin de construire une liste complète avant le transfert. Ainsi, si vous le redémarrez, vous n'aurez pas à refaire tout le transfert en cas de problème. La division du transfert par répertoire de premier ou deuxième niveau optimisera encore plus cette opération. (J'utiliserais rsync -a -P et ajouter --compress si votre réseau est plus lent que vos disques).

0 votes

J'utilise rsync 2.6.8 sur l'ancien serveur. Comme il s'agit d'une de ces boîtes où nous ne sommes pas autorisés à installer/mettre à jour quoi que ce soit comme indiqué par le vendeur ou cela annule la garantie. Je pourrais le mettre à jour et voir si c'est plus rapide.

18 votes

Trouvez (ou construisez) un binaire rsync lié statiquement et exécutez-le depuis votre domicile. Espérons que cela ne ruinera pas la garantie.

0 votes

Et si unison ? Comment se compare-t-il à rsync ?

15voto

Arthur Kay Points 461

Configurez un VPN (s'il s'agit d'Internet), créez un lecteur virtuel d'un format quelconque sur le serveur distant (faites-le en ext4), montez-le sur le serveur distant, dann Montez-le sur le serveur local (en utilisant un protocole de niveau bloc comme iSCSI), et utilisez dd ou un autre outil de niveau bloc pour effectuer le transfert. Vous pouvez ensuite copier les fichiers du lecteur virtuel vers le lecteur réel (XFS) à votre convenance.

Pour deux raisons :

  1. Pas de surcharge du système de fichiers, qui est le principal responsable des performances.
  2. Pas de recherche, il s'agit d'une lecture/écriture séquentielle des deux côtés.

3 votes

Contourner le système de fichiers, c'est bien. Copier au niveau des blocs d'un système de fichiers monté en lecture-écriture est une très mauvaise idée. Démontez ou montez en lecture seule d'abord.

0 votes

Avoir une copie de 15TB, ça craint aussi. Cela signifie que le nouveau serveur a besoin d'un minimum de 30.

4 votes

Si le serveur utilise LVM, on peut faire un snapshot en lecture seule du système de fichiers et le copier à la place. L'encombrement ne concerne que les modifications du système de fichiers qui se produisent pendant la lecture de l'instantané.

10voto

Robin Hammond Points 111

Si l'ancien serveur est en cours de démantèlement et que les fichiers peuvent être hors ligne pendant quelques minutes, il est souvent plus rapide de retirer les disques de l'ancien boîtier et de les connecter au nouveau serveur, de les monter (le serveur est de nouveau en ligne) et de copier les fichiers sur les disques natifs du nouveau serveur.

2 votes

C'est environ 1PB de disques de 2TB, donc c'est beaucoup trop.

3voto

JamesRyan Points 8138

Utilisez mbuffer et si vous êtes sur un réseau sécurisé, vous pouvez éviter l'étape de cryptage.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X