quel est le moyen le plus rapide et le plus fiable de transférer un grand nombre de fichiers?

10

J'essaie de transférer environ 100 000 fichiers totalisant 90 Go. En ce moment, j'utilise le démon rsync mais sa lenteur de 3,4 Mo / s et je dois le faire plusieurs fois. Je me demande quelles options ai-je pour maximiser une connexion de 100 Mbits sur Internet et être très fiable.

incognito2
la source
2
Vous obtenez près d'un tiers de votre connexion - c'est respectable, mais pas génial. À quelle distance de l'électron vole les fichiers en cours de transfert?
Shane Madden
Latence de 50 ms entre les deux serveurs.
incognito2
5
J'ai vu beaucoup de fichiers une fois hyperboleandahalf.blogspot.com/2010/04/…
Smudge
Si vous utilisez le démon rsync, il n'y a pas de ssh impliqué, non? Ensuite, l'explication est probablement l'infrastructure entre les hôtes. Vous pouvez essayer netperf ou iperf ou flowgrind pour tester la vitesse entre les hôtes. Si ce test vous donne un taux de transfert plus élevé, alors vous devriez voir comment rsync ralentit les choses: lire les E / S sur le serveur lentement, écrire les E / S sur le client, de nombreux petits fichiers, système de fichiers, etc.
AndreasM

Réponses:

11

Avez-vous pensé à Sneakernet ? Avec de grands ensembles de données, l'expédition de nuit va souvent être plus rapide et moins chère que le transfert via Internet.

ceejayoz
la source
10
"Ne sous-estimez jamais la bande passante d'un break rempli de bandes qui dévalent l'autoroute." - AST
voretaq7
1
Eh bien, étant donné l'abordabilité du matériel LAN gigabit, s'il s'agit d'un transfert LAN, le temps passé à écrire via eSATA sur une seule broche n'est pas si attrayant.
memnoch_proxy
10

Comment? Ou TL; DR

La méthode la plus rapide que j'ai trouvée est une combinaison de tar, mbufferet ssh.

Par exemple:

tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"

Grâce à cela, j'ai obtenu des transferts de réseau local soutenus de plus de 950 Mb / s sur des liaisons 1Gb. Remplacez les chemins d'accès dans chaque commande tar pour convenir à ce que vous transférez.

Pourquoi? mbuffer!

Le plus gros goulot d'étranglement dans le transfert de fichiers volumineux sur un réseau est, de loin, les E / S disque. La réponse à cette question est mbufferou buffer. Ils sont largement similaires mais mbufferprésentent certains avantages. La taille de mémoire tampon par défaut est 2 Mo pour mbufferet 1 Mo pour buffer. Les tampons plus grands sont plus susceptibles de ne jamais être vides. Le choix d'une taille de bloc qui est le plus petit commun multiple de la taille de bloc native sur le système de fichiers cible et de destination donnera les meilleures performances.

La mise en mémoire tampon est la chose qui fait toute la différence! Utilisez-le si vous l'avez! Si vous ne l'avez pas, obtenez-le! Utiliser (m}?bufferplus n'importe quoi est mieux que tout seul. c'est presque littéralement une panacée pour les transferts de fichiers réseau lents.

Si vous transférez plusieurs fichiers, utilisez-les tarpour les regrouper en un seul flux de données. S'il s'agit d'un seul fichier, vous pouvez utiliser la catredirection d'E / S. La surcharge de tarvs catest statistiquement insignifiante, donc j'utilise toujours tar(ou zfs -sendlà où je peux) à moins que ce ne soit déjà une tarball . Aucun de ces éléments n'est garanti pour vous donner des métadonnées (et en particulier catne le fera pas). Si vous voulez des métadonnées, je vous laisse cela comme un exercice.

Enfin, l'utilisation sshd'un mécanisme de transport est à la fois sécurisée et entraîne très peu de frais généraux. Encore une fois, les frais généraux de sshvs ncsont statistiquement insignifiants.

bahamat
la source
Il y a parfois des frais de chiffrement dans l'utilisation de SSH comme transport. Voir: Copier des fichiers entre des machines Linux avec une authentification forte sans chiffrement
ewwhite
2
Vous pouvez utiliser des mécanismes de chiffrement plus rapides si vous en avez besoin. Mais vous n'avez pas forcément besoin de passer par ce ssh. Je préfère définir les ports -O et -I sur mbuffer des deux côtés. Même s'il s'agit maintenant de deux commandes, vous ignorez le chiffrement et maximisez la bande passante du réseau en mettant les deux extrémités en mémoire tampon. tar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
J'envoie
2
@memnoch_proxy: C'est une bonne suggestion (que j'ai votée) mais de nos jours où la NSA exploite même des lignes de données privées entre les centres de données (par exemple, Google et Yahoo) en utilisant le cryptage, IMO, est toujours une bonne habitude à faire . L'utilisation sshrend cela simple. L' utilisation stunnel, socatou opensslfonctionne aussi, mais ils sont plus complexes à mettre en place pour les transferts simples.
bahamat
1
@bahamat merci de me faire revoir la question. Ma suggestion ne semble appropriée que si le transfert peut avoir lieu via un VPN. Pour un transfert Internet, j'utiliserais certainement ssh également.
memnoch_proxy
8

Vous mentionnez "rsync", donc je suppose que vous utilisez Linux:

Pourquoi ne créez-vous pas un fichier tar ou tar.gz? Le temps de transfert réseau d'un gros fichier est plus rapide que de nombreux petits. Vous pouvez même le compresser si vous le souhaitez ...

Goudron sans compression:

Sur le serveur source:

tar -cf file.tar /path/to/files/

Ensuite, côté réception:

cd /path/to/files/
tar -xf /path/to/file.tar

Goudron avec compression:

Sur le serveur source:

tar -czf file.tar.gz /path/to/files/

Ensuite, côté réception:

cd /path/to/files/
tar -xzf /path/to/file.tar.gz

Vous utiliseriez simplement rsync pour effectuer le transfert réel des fichiers (tar | tar.gz).

Soviero
la source
seulement s'il y avait de la place pour stocker les archives ..
Tebe
5

Vous pouvez essayer la taret sshastuce décrite ici :

tar cvzf - /wwwdata | ssh [email protected] "dd of=/backup/wwwdata.tar.gz"

cela devrait être réinscriptible comme suit :

tar cvzf - /wwwdata | ssh [email protected] "tar xvf -"

Vous perdriez cependant les --partialfonctionnalités de rsyncdans le processus. Si les fichiers ne changent pas très fréquemment, vivre avec une initiale lente rsyncpourrait être très utile car cela ira beaucoup plus vite à l'avenir.

garenne
la source
2

Vous pouvez utiliser diverses options de compression de rsync.

-z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with suffix in LIST

le taux de compression des fichiers binaires est très faible, vous pouvez donc ignorer ces fichiers en utilisant --skip-compress, par exemple iso, des archives tar déjà archivées et compressées, etc.

Sachin Divekar
la source
-6

Je suis un grand fan de SFTP. J'utilise SFTP pour transférer des médias de mon ordinateur principal vers mon serveur. J'obtiens de bonnes vitesses, sur LAN.

SFTP est fiable, je donnerais un coup de feu, car il est facile à configurer, et il pourrait être plus rapide dans certains cas.

Tillman32
la source
5
FTP doit mourir. Il n'est pas chiffré, il ne gère pas bien les interruptions et il existe au moins une demi-douzaine d'alternatives viables qui ne sont pas complètement nulles.
MDMarra
1
Avez-vous déjà entendu parler de SFTP?
Tillman32
8
Oui Il n'est en aucune façon lié au protocole FTP, sauf en ce qui concerne le nom et le fait qu'il déplace les fichiers.
MDMarra
5
Le FTP est également notoirement peu fiable lors de la traversée de pare-feu (il date d'une époque antérieure aux pare-feu lorsque votre client ouvrait un port aléatoire pour accepter les connexions arrière était cool, et le piratage du FTP passif et étendu passif pour contourner cette limitation est juste que: Hackery)
voretaq7