La respuesta de @ pdo es buena, pero se puede aumentar la velocidad con un búfer y una buena compresión y agregar una barra de progreso.
A menudo, la red es el cuello de botella y la velocidad varía con el tiempo. Por lo tanto, ayuda a almacenar en búfer los datos antes de enviarlos a través de la red. Esto se puede hacer con pv
.
Además, generalmente se puede aumentar la velocidad con un algoritmo de compresión adecuado. Gzip (como se usó anteriormente) es un algoritmo de compresión rápida, pero en general zstandard ( zstd
) (y para relaciones de compresión altas LZMA / LZMA2 ( xz
) se comprimirá mejor y será más rápido al mismo tiempo. Los nuevos xz y zstd ya tienen soporte de núcleo múltiple incorporado Para usar gzip con múltiples núcleos se puede usar pigz.
Aquí hay un ejemplo para enviar datos con una barra de progreso, almacenamiento en búfer y compresión estándar z en una red:
tar cf - . | pv -perabs $(du -sk . | cut -f 1)K | zstd -14 --long=31 -T0 | pv -qCB 512M | ssh user@host "cd /wherever && pv -qCB 512M | zstd -cd -T0 --long=31 | tar xf -"
El primero pv
es mostrar el progreso ( p ), el tiempo estimado ( e ), la tasa de transferencia ( r ), la tasa promedio ( a ), el total de bytes transferidos ( b ). El tamaño total es estimada con du
y se añade a la opción (tamaño s ). El progreso se mide antes de la compresión y el almacenamiento en búfer, por lo tanto, no es muy preciso, pero sigue siendo útil.
zstd
se usa con la configuración de compresión 14 . Este número se puede reducir o aumentar según la red y la velocidad de la CPU, por lo que zstd es un poco más rápido que la velocidad de la red. Con cuatro núcleos en un Haswell 3.2 GHz, la CPU 14 proporciona una velocidad de alrededor de 120 MB / s. En el ejemplo, se utiliza el modo largo 31 (utiliza una ventana de 2 GB, necesita mucha RAM, pero es muy bueno, por ejemplo, para comprimir los volcados de la base de datos). Las opciones T0 establecen la cantidad de hilos en el número de núcleos. Se debe tener en cuenta que, junto con el modo largo, estas configuraciones utilizan mucha memoria.
Un problema con zstd es que la mayoría de los sistemas operativos no incluyen la versión> = 1.3.4. Esta versión es necesaria para un soporte multi core y largo adecuado. Si no está disponible, se puede compilar e instalar desde https://github.com/facebook/zstd con solo make -j4 && sudo make install
. En lugar de zstd, también se puede usar xz o pigz. xz es lento pero se comprime muy bien (bueno sobre conexiones lentas), pigz / gzip es rápido pero no se comprime tan bien.
pv
luego se usa nuevamente, pero para el almacenamiento en búfer ( q
para silencio, C
para el modo sin empalme [siempre necesario para el almacenamiento en búfer] y B
para establecer el tamaño del búfer).
En el ejemplo, también se usa un búfer en el lado del receptor. Esto a menudo es innecesario (porque la velocidad de escritura de la descompresión y el disco duro es más alta que la velocidad de la red), pero generalmente tampoco daña.