Saltar al contenido

¿Por qué scp es tan lento y cómo hacerlo más rápido?

No olvides que en la informática un error suele tener diversas resoluciones, pero mostraremos la mejor y más eficiente.

Solución:

podrías usar rsync (encima ssh), que utiliza una única conexión para transferir todos los archivos de origen.

rsync -avP cap_* [email protected]:dir

si no tienes rsync (¿¡y por qué no!?) puedes usar tar con ssh así, que evita crear un archivo temporal (estas dos alternativas son equivalentes):

tar czf - cap_* | ssh [email protected] tar xvzfC - dir
tar cf - cap_* | gzip | ssh [email protected] 'cd dir && gzip -d | tar xvf -'

El rsync es preferible, en igualdad de condiciones, porque se puede reiniciar en caso de una interrupción.

El comentario de @wurtel probablemente sea correcto: hay muchos gastos generales para establecer cada conexión. Si puede arreglar eso, obtendrá transferencias más rápidas (y si no puede, simplemente use el de @roaima rsync solución alterna). Hice un experimento transfiriendo archivos de tamaño similar (head -c 417K /dev/urandom > foo.1 e hice algunas copias de ese archivo) a un host que tarda un poco en conectarse (HOST4) y uno que responde muy rápido (HOST1):

$ time ssh $HOST1 echo


real    0m0.146s
user    0m0.016s
sys     0m0.008s
$ time scp * $HOST1:
foo.1                                         100%  417KB 417.0KB/s   00:00    
foo.2                                         100%  417KB 417.0KB/s   00:00    
foo.3                                         100%  417KB 417.0KB/s   00:00    
foo.4                                         100%  417KB 417.0KB/s   00:00    
foo.5                                         100%  417KB 417.0KB/s   00:00    

real    0m0.337s
user    0m0.032s
sys     0m0.016s
$ time ssh $HOST4 echo


real    0m1.369s
user    0m0.020s
sys     0m0.016s
$ time scp * $HOST4:
foo.1                                         100%  417KB 417.0KB/s   00:00    
foo.2                                         100%  417KB 417.0KB/s   00:00    
foo.3                                         100%  417KB 417.0KB/s   00:00    
foo.4                                         100%  417KB 417.0KB/s   00:00    
foo.5                                         100%  417KB 417.0KB/s   00:00    

real    0m6.489s
user    0m0.052s
sys     0m0.020s
$ 

Es la negociación del traspaso lo que lleva tiempo. En general, las operaciones de norte archivos de B bytes cada uno toma mucho, mucho más que una sola operación en un solo archivo de norte * B bytes Esto es también true por ejemplo, para E/S de disco.

Si te fijas bien verás que la tasa de transferencia en este caso es tamaño_del_archivo/seg.

Para transferir archivos de manera más eficiente, agréguelos con tar, luego transfiera el tarball:

tar cvf myarchive.tar cap_20151023T*.png

o, si también desea comprimir el archivo,

tar cvzf myarchive.tar.gz myfile*

Ya sea para comprimir o no depende del contenido del archivo, por ejemplo. si son JPEG o PNG, la compresión no tendrá ningún efecto.

Comentarios y valoraciones del tutorial

Nos encantaría que puedieras dar recomendación a esta crónica si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *