¿Cuál es la forma más rápida y fiable de transferir muchos archivos?

¿Cuál es la forma más rápida y fiable de transferir muchos archivos?

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 tarde mbuffery 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 mbuffero buffer. Son muy similares pero mbuffertienen algunas ventajas. El tamaño de búfer predeterminado es 2 MB mbuffery 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}?buffermá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 tarpara "agruparlos" en un único flujo de datos. Si es un solo archivo, puede usar catla redirección de E/S. La sobrecarga de tarvs. cates estadísticamente insignificante, por lo que siempre lo uso tar(o zfs -senddonde puedo) a menos que ya sea unbola de tar. No se garantiza que ninguno de estos le proporcione metadatos (y en particular catno lo hará). Si quieres metadatos, te lo dejo como ejercicio.

Por último, utilizarlo sshcomo mecanismo de transporte es seguro y conlleva muy pocos gastos generales. Nuevamente, los gastos generales de sshvs. ncson 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.

información relacionada