Estoy intentando transferir alrededor de 100.000 archivos por un total de 90 GB. En este momento estoy usando el demonio rsync pero es lento a 3,4 MB/s y necesito hacer esto varias veces. Me pregunto qué opciones tengo para maximizar una conexión a Internet de 100 mbit y ser muy confiable.
Respuesta1
Ha consideradored de zapatillas? Con grandes conjuntos de datos, el envío al día siguiente suele ser más rápido y económico que la transferencia a través de Internet.
Respuesta2
¿Cómo? O TL;DR
El método más rápido que he encontrado es una combinación tar
de mbuffer
y ssh
.
P.ej:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
Usando esto, logré transferencias de red local 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é? amortiguador!
El mayor cuello de botella en la transferencia de archivos grandes a través de una red es, con diferencia, la E/S del disco. La respuesta a eso es mbuffer
o buffer
. Son muy similares pero mbuffer
tienen algunas ventajas. El tamaño de búfer predeterminado es 2 MB mbuffer
y 1 MB para buffer
. Es más probable que los buffers más grandes nunca estén vacíos. Elegir un tamaño de bloque que sea el mínimo común múltiplo del tamaño de bloque nativo tanto en el sistema de archivos de destino como en el de destino brindará el mejor rendimiento.
El almacenamiento en búfer es lo que hacetodo¡la diferencia!¡Úsalo si lo tienes! Si no lo tienes, ¡consíguelo! Usar (m}?buffer
más cualquier cosa es mejor que cualquier cosa por sí sola. Es casi literalmente una panacea para las transferencias lentas de archivos en red.
Si está transfiriendo varios archivos, utilícelos tar
para "agruparlos" en un único flujo de datos. Si es un solo archivo, puede usar cat
la redirección de E/S. La sobrecarga de tar
vs. cat
es estadísticamente insignificante, por lo que siempre lo uso tar
(o zfs -send
donde puedo) a menos que ya sea unbola de tar. No se garantiza que ninguno de estos le proporcione metadatos (y en particular cat
no lo hará). Si quieres metadatos, te lo dejo como ejercicio.
Por último, utilizarlo ssh
como mecanismo de transporte es seguro y conlleva muy pocos gastos generales. Nuevamente, los gastos generales de ssh
vs. nc
son estadísticamente insignificantes.
Respuesta3
Mencionas "rsync", así que supongo que estás usando Linux:
¿Por qué no creas un archivo tar o tar.gz? El tiempo de transferencia de red de un archivo grande es más rápido que el de muchos archivos pequeños. Incluso podrías comprimirlo si lo deseas...
Alquitrán sin compresión:
En el servidor de origen:
tar -cf file.tar /path/to/files/
Luego, en el lado receptor:
cd /path/to/files/
tar -xf /path/to/file.tar
Alquitrán con compresión:
En el servidor de origen:
tar -czf file.tar.gz /path/to/files/
Luego, en el lado receptor:
cd /path/to/files/
tar -xzf /path/to/file.tar.gz
Simplemente usaría rsync para realizar la transferencia real de los archivos (tar|tar.gz).
Respuesta4
Puede utilizar varias opciones de compresión de rsync.
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with suffix in LIST
La relación de compresión para archivos binarios es muy baja, por lo que puede omitir esos archivos usando --skip-compress, por ejemplo, iso, archivos tar ya archivados y comprimidos, etc.