Necesitaba transferir un archivo de disco virtual KVM de 20 GB , almacenando el sistema de archivos raíz de una VM CentOS 6.5, de un servidor de laboratorio a otro. El gran tamaño del archivo y el hecho de que una vez comprimí un archivo de disco virtual de este tipo a unos cientos de megabytes me hicieron habilitar instintivamente la compresión, scp
pero me sorprendió ver una velocidad de transferencia bastante baja. Luego intenté bzip2
en combinación con ssh
y cat
y me sorprendió. Aquí está el resumen de los métodos y el rendimiento promedio.
scp -C vm1-root.img [email protected]:/mnt/vdisks/
, 11 MB / s.bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img"
, 5 MB / s. Este resultado aún menor provocó la búsqueda en la red.scp -c arcfour -C vm1-root.img [email protected]:/mnt/vdisks/
, 13 MB / s. Este uso de-c arcfour
como se sugirió en una respuesta en serverfault. Apenas ayudó. Finalmente, deshabilité la compresión.scp vm1-root.img [email protected]:/mnt/vdisks/
, 23 MB / s.
¿No debería la compresión haber sido más rápida?
EDITAR: No sé por qué la pregunta ha sido rechazada. Pensé que hay algo que aprender aquí.
Después de recibir la ssh(1)
sugerencia de la página de manual de @sven, probé un par de métodos alternativos de transferencia de archivos que no implican compresión, ambos con mejores resultados.
cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img"
, 26 MB / s.nc -l 5678 > /mnt/vdisks/vm1-root.img
en el receptor ync 192.168.161.62 5678 < vm1-root.img
en el transmisor, 40 MB / s. El puerto5678
es arbitrario y estaba disponible.
¡El uso nc
resultó ser el método de copia más rápido!
En el pasado, scp -C
funcionó muy bien siempre que pensé que lo haría. Por ejemplo, al transferir syslogs ( /var/log/messages*
) de pocos GB de tamaño. Una velocidad de transferencia sin comprimir de unos pocos cientos de KB / s aumentaría a 1-2 MB / s. Este ejemplo cae en el caso de una conexión lenta como se ha señalado en la página del manual.
Tengo un caso en el que una imagen de disco virtual recién creada para una partición de 20 GB tiene un tamaño comprimido de solo 200 MB. ¡Con una velocidad de transferencia de aproximadamente 25 MB / s, podríamos hacer la copia en solo 8 segundos en lugar de más de 13 minutos! Claramente, scp
sin compresión es ineficiente en este caso y scp -C
es aún peor.
Supongo que la principal lección aprendida aquí es que scp -C
debe considerarse como una conveniencia. Si un archivo se puede comprimir significativamente, entonces es mejor comprimirlo primero en el origen, transferir el formulario comprimido y finalmente comprimirlo en el destino. Las herramientas que realizan la compresión y descompresión rápidamente (por ejemplo, pbzip2 ) serán de mayor ayuda.
fuente
scp
incluye el tiempo dedicado a la compresión / descompresión. Los valores informados parecerían sorprendentes si este no fuera el caso.Además, además de la compresión, nc obtiene la mejor tasa porque tampoco se cifra. Y la compresión sin pérdidas se basa en la búsqueda de secciones redundantes de los datos, que cuando se realiza a nivel de red, puede ver un máximo de bytes [tamaño de búfer] donde, cuando se hace con todo el archivo primero, son bytes [tamaño de archivo] dentro del cual cazar y procesar frases de bytes duplicados.
También para mover imágenes de disco, debe usar una herramienta compatible con el sistema de archivos como ntfsclone / partclone porque incluso la compresión no puede vencer simplemente omitiendo los bloques no asignados: su velocidad de transferencia es infinita si no tiene que transferir ningún dato. Además, no olvide destruir los archivos de intercambio e hibernación en una partición de Windows o si está copiando basura, simplemente se descartará y se recreará de todos modos.
fuente