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

10

Estoy tratando de transferir aproximadamente 100k archivos con un total de 90gb. En este momento estoy usando rsync daemon pero es lento 3.4mb / sy necesito hacerlo varias veces. Me pregunto qué opciones tengo que maximicen una conexión de 100mbit a través de Internet y sean muy confiables.

incógnito2
fuente
2
Está obteniendo casi un tercio de su conexión, eso es respetable, pero no excelente. ¿Qué tan lejos como vuela el electrón se transfieren los archivos?
Shane Madden
Latencia de 50 ms entre los dos servidores.
incógnito2
55
Vi una gran cantidad de archivos una vez hyperboleandahalf.blogspot.com/2010/04/…
Mancha el
Si está utilizando rsync daemon, no hay ssh involucrado, ¿verdad? Entonces, la explicación es probablemente la infraestructura entre los hosts. Puede probar netperf o iperf o flowgrind para probar la velocidad entre los hosts. Si esta prueba le da una tasa de transferencia más alta, entonces debería ver cómo rsync está haciendo las cosas lentas: leer
E

Respuestas:

11

¿Has considerado Sneakernet ? Con grandes conjuntos de datos, el envío nocturno a menudo será más rápido y más barato que la transferencia a través de Internet.

ceejayoz
fuente
10
"Nunca subestimes el ancho de banda de una camioneta llena de cintas que se precipitan por la carretera". - AST
voretaq7
1
bueno, dada la asequibilidad del hardware Gigabit LAN, si se trata de una transferencia LAN, el tiempo dedicado a escribir a través de eSATA en un solo eje no es tan atractivo.
memnoch_proxy
10

¿Cómo? O TL; DR

El método más rápido que he encontrado es una combinación de tar, mbuffery 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 mbuffero buffer. Son en gran medida similares pero mbuffertiene algunas ventajas. El tamaño predeterminado del búfer es de 2 MB para mbuffery 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}?buffermá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 tarpara agruparlos en una sola secuencia de datos. Si es un archivo único que puede usar cato redirección de E / S. La sobrecarga de tarvs. cates estadísticamente insignificante, por lo que siempre uso tar(o zfs -senddonde puedo) a menos que ya sea un tarball . Ninguno de estos está garantizado para darle metadatos (y en particular catno lo hará). Si desea metadatos, lo dejaré como un ejercicio para usted.

Finalmente, el uso sshde un mecanismo de transporte es seguro y lleva muy poca sobrecarga. Nuevamente, la sobrecarga de sshvs. nces estadísticamente insignificante.

bahamat
fuente
Hay gastos generales de cifrado al usar SSH como transporte a veces. Ver: Copiar archivos entre máquinas Linux con autenticación fuerte sin cifrado
ewwhite
2
Puede usar mecanismos de encriptación más rápidos si es necesario. Pero no necesariamente necesita canalizar esto a través de ssh. Prefiero configurar los puertos -O e -I en mbuffer en ambos lados. Aunque ahora se trata de dos comandos, omite el cifrado y maximiza el ancho de banda de la red al almacenar en búfer ambos extremos. Estoy enviando una transmisión tar a 720 + Mbps en mi LAN local con el equivalente detar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
memnoch_proxy
2
@memnoch_proxy: Esa es una buena sugerencia (que voté) pero en estos tiempos en que la NSA incluso está aprovechando líneas de datos privadas entre centros de datos (por ejemplo, Google y Yahoo) usando encriptación, IMO, siempre es un buen hábito. . Usar lo sshhace simple. Usando stunnel, socato opensslfunciona también, pero son más complejos de configurar para transferencias simples.
bahamat
1
@bahamat gracias por hacerme mirar la pregunta nuevamente. Mi sugerencia solo parece apropiada si la transferencia puede ocurrir a través de una VPN. Para una transferencia de Internet, ciertamente también usaría ssh.
memnoch_proxy
8

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 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 extremo 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 extremo 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).

Soviero
fuente
solo si hubiera lugar disponible para almacenar el archivo ..
Tebe
5

Puede probar con el tary sshtruco se describe aquí :

tar cvzf - /wwwdata | ssh [email protected] "dd of=/backup/wwwdata.tar.gz"

Esto debería ser regrabable a lo siguiente :

tar cvzf - /wwwdata | ssh [email protected] "tar xvf -"

Sin embargo, perderías las --partialcaracterísticas de rsyncen el proceso. Si los archivos no cambian con mucha frecuencia, vivir con una inicial lenta rsyncpodría valer mucho la pena, ya que irá mucho más rápido en el futuro.

madriguera
fuente
2

Puede usar 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, tarballs ya archivados y comprimidos, etc.

Sachin Divekar
fuente
-6

Soy un gran admirador de SFTP. Uso SFTP para transferir medios de mi computadora principal a mi servidor. Tengo buenas velocidades, a través de LAN.

SFTP es confiable, le daría una oportunidad, ya que es fácil de configurar y podría ser más rápido en algunos casos.

Tillman32
fuente
55
FTP necesita morir. No está encriptado, no maneja bien la interrupción, y hay al menos media docena de alternativas viables para él que no apestan por completo.
MDMarra
1
¿Has oído hablar de SFTP?
Tillman32
8
Si tu tienes De ninguna manera está relacionado con el protocolo FTP, excepto el nombre y el hecho de que mueve los archivos.
MDMarra
55
FTP también es notoriamente poco confiable al atravesar firewalls (data de una época anterior a la de los firewalls cuando su cliente abría un puerto aleatorio para aceptar conexiones traseras era genial, y la piratería de FTP pasivo y pasivo extendido para evitar esa limitación es solo eso: Hackery)
voretaq7