Comment? Ou TL; DR
La méthode la plus rapide que j'ai trouvée est une combinaison de tar
, mbuffer
et 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 mbuffer
ou buffer
. Ils sont largement similaires mais mbuffer
présentent certains avantages. La taille de mémoire tampon par défaut est 2 Mo pour mbuffer
et 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}?buffer
plus 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 tar
pour les regrouper en un seul flux de données. S'il s'agit d'un seul fichier, vous pouvez utiliser la cat
redirection d'E / S. La surcharge de tar
vs cat
est statistiquement insignifiante, donc j'utilise toujours tar
(ou zfs -send
là 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 cat
ne le fera pas). Si vous voulez des métadonnées, je vous laisse cela comme un exercice.
Enfin, l'utilisation ssh
d'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 ssh
vs nc
sont statistiquement insignifiants.