¿Cómo? O TL; DR
El método más rápido que he encontrado es una combinación de tar
, mbuffer
y ssh
.
P.ej:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
Con esto, he logrado transferencias de red locales sostenidas de más de 950 Mb / s en enlaces de 1 Gb. Reemplace las rutas en cada comando tar para que sean apropiadas para lo que está transfiriendo.
¿Por qué? mbuffer!
El mayor cuello de botella en la transferencia de archivos grandes a través de una red es, con mucho, la E / S de disco. La respuesta a eso es mbuffer
o buffer
. Son en gran medida similares pero mbuffer
tiene algunas ventajas. El tamaño predeterminado del búfer es de 2 MB para mbuffer
y 1 MB para buffer
. Es más probable que los tampones más grandes nunca estén vacíos. Elegir un tamaño de bloque que sea el múltiplo común más bajo del tamaño de bloque nativo tanto en el sistema de archivos de destino como en el de destino dará el mejor rendimiento.
Buffering es lo que hace que todo la diferencia! ¡Úselo si lo tiene! Si no lo tienes, ¡consíguelo! Usar (m}?buffer
más cualquier cosa es mejor que cualquier cosa por sí mismo. Es casi literalmente una panacea para las transferencias lentas de archivos de red.
Si está transfiriendo varios archivos, úselos tar
para agruparlos en una sola secuencia de datos. Si es un archivo único que puede usar cat
o redirección de E / S. La sobrecarga de tar
vs. cat
es estadísticamente insignificante, por lo que siempre uso tar
(o zfs -send
donde puedo) a menos que ya sea un tarball . Ninguno de estos está garantizado para darle metadatos (y en particular cat
no lo hará). Si desea metadatos, lo dejaré como un ejercicio para usted.
Finalmente, el uso ssh
de un mecanismo de transporte es seguro y lleva muy poca sobrecarga. Nuevamente, la sobrecarga de ssh
vs. nc
es estadísticamente insignificante.