J'avais besoin de transférer un fichier vdisk KVM de 20 Go , stockant le système de fichiers racine d'une machine virtuelle CentOS 6.5, d'un serveur de laboratoire à un autre. La grande taille du fichier et le fait que j'avais déjà compressé un tel fichier vdisk à quelques centaines de méga-octets m'ont instinctivement permis la compression avec scp
mais j'ai été surpris de voir une vitesse de transfert assez faible. Ensuite, j'ai essayé bzip2
en combinaison avec ssh
et cat
et j'ai été surpris. Voici le résumé des méthodes et du débit moyen.
scp -C vm1-root.img [email protected]:/mnt/vdisks/
, 11 Mo / s.bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img"
, 5 Mo / s. Ce résultat encore plus faible a incité à rechercher sur le Net.scp -c arcfour -C vm1-root.img [email protected]:/mnt/vdisks/
, 13 Mo / s. Cette utilisation de-c arcfour
as a été suggérée dans une réponse sur serverfault. Cela n'a guère aidé. Enfin, j'ai désactivé la compression.scp vm1-root.img [email protected]:/mnt/vdisks/
, 23 Mo / s.
La compression n'aurait-elle pas dû être plus rapide?
EDIT: Je ne sais pas pourquoi la question a été rejetée. Je pensais qu'il y avait quelque chose à apprendre ici.
Après avoir reçu le ssh(1)
conseil de la page de manuel de @sven, j'ai essayé quelques méthodes alternatives de transfert de fichiers n'impliquant pas de compression, les deux avec de meilleurs résultats.
cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img"
, 26 Mo / s.nc -l 5678 > /mnt/vdisks/vm1-root.img
sur le récepteur etnc 192.168.161.62 5678 < vm1-root.img
l'émetteur, 40 Mo / s. Le port5678
est arbitraire et disponible.
L'utilisation nc
s'est avérée être la méthode de copie la plus rapide!
Dans le passé, scp -C
a très bien fonctionné chaque fois que je le pensais. Par exemple, lors du transfert de syslogs ( /var/log/messages*
) de quelques Go de taille. Un taux de transfert non compressé de quelques centaines de Ko / s passerait à 1-2 Mo / s. Cet exemple tombe dans le cas d'une connexion lente comme cela a été souligné dans la page de manuel.
J'ai un cas où, une image vdisk nouvellement créée pour une partition de 20 Go a une taille compressée de seulement 200 Mo. Avec un taux de transfert d'environ 25 Mo / s, nous avons pu faire la copie en seulement 8 secondes au lieu de plus de 13 minutes! De toute évidence, scp
sans compression est inefficace dans ce cas et scp -C
est encore pire.
Je suppose que la principale leçon apprise ici est que, scp -C
devrait être considéré comme étant seulement une commodité. Si un fichier peut être compressé de manière significative, il est préférable de le compresser d'abord sur la source, de transférer le formulaire compressé et enfin de décompresser sur la destination. Les outils qui effectuent la compression et la décompression rapidement (par exemple pbzip2 ) seront d'une plus grande aide.
la source
scp
inclut le temps passé en compression / décompression. Les valeurs déclarées sembleraient surprenantes si ce n'était pas le cas.De plus, en plus de la compression, nc obtient le meilleur taux car il ne crypte pas non plus. Et la compression sans perte repose sur la recherche de sections redondantes des données qui, lorsqu'elles sont effectuées au niveau du réseau, vous pouvez regarder un maximum de [taille de la mémoire tampon] octets alors que lorsque vous avez terminé avec le fichier entier en premier, ce sont des octets de [taille de fichier] dans lequel chasser et croquer des phrases d'octets en double.
De plus, pour déplacer des images de disque, vous devez utiliser un outil compatible avec le système de fichiers comme ntfsclone / partclone car même la compression ne peut pas battre simplement en ignorant les blocs non alloués - votre taux de transfert est infini si vous n'avez pas à transférer de données. N'oubliez pas non plus de détruire les fichiers de swap et d'hibernation sur une partition Windows ou vous copiez des fichiers inutiles, ils seront simplement jetés et recréés de toute façon.
la source