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.