¿Cómo distribuyo una descarga grande en varias computadoras?

38

Necesito descargar un archivo grande (1 GB). También tengo acceso a varias computadoras que ejecutan Linux, pero cada una está limitada a una velocidad de descarga de 50kB / s por una política de administración.

¿Cómo distribuyo la descarga de este archivo en varias computadoras y las combino después de que se hayan descargado todos los segmentos, para que pueda recibirlo más rápido?

Meysam
fuente
77
¿Descargarlo en casa y conectarlo a través de la memoria USB?
WernerCD
2
Recuerdo cosas como esta con la antigua estación de Sun B & W cuando estaba en la universidad. Simplemente verifique si tiene suficiente espacio para guardar todo el contenido, uno de mis amigos ha sido expulsado después de bloquear todas las computadoras del laboratorio (tmp completo).
Kartoch
Si no hay restricción de descarga, ¿qué tan rápido puede enviar el archivo el otro extremo? ¿Existen restricciones de transferencia entre computadoras en la LAN?
Dom
@SunWKim No. No hay ninguna restricción específica allí.
Meysam

Respuestas:

60

Los protocolos comunes HTTP, FTP y SFTP admiten solicitudes de rango , por lo que puede solicitar parte de un archivo. Tenga en cuenta que esto también requiere soporte del servidor, por lo que podría o no funcionar en la práctica.

Puede usar curly la opción -ro --rangepara especificar el rango y, finalmente, simplemente catjuntar los archivos. Ejemplo:

curl -r 0-104857600         -o distro1.iso 'http://files.cdn/distro.iso'
curl -r 104857601-209715200 -o distro2.iso 'http://files.cdn/distro.iso'
[…]

Y eventualmente cuando reúnes las partes individuales las concatenas:

cat distro* > distro.iso

Puede obtener más información sobre el archivo, incluido su tamaño con la --headopción:

curl --head 'http://files.cdn/distro.iso'

Puede recuperar el último fragmento con un rango abierto:

curl -r 604887601- -o distro9.iso 'http://files.cdn/distro.iso'

Lea la página del manual de curl para más opciones y explicaciones.

Puede aprovechar aún más ssh y tmux para facilitar la ejecución y realizar un seguimiento de las descargas en varios servidores.

Marco
fuente
15
Nota: cuidado, al usar cat distro* > ...verifique la ordenación de los archivos, ya que el *expandido por su shell podría ordenarlo de esta manera: distro1.iso distro10.iso distro11.iso ...y concatenando en el orden incorrecto.
Sebastian
8
una solución para la nota de @ Sebastian sería:cat distro{1..10}.iso
nonchip
1
Esa solución es específica de shell y no portátil. cat $(seq -fdist%g.iso 1 10)debería ser más predecible, pero falla csh, sin embargo. Reemplazar $(…)con backtics parece funcionar en la mayoría de los shells.
Marco
3
@Marco, seqtampoco es un comando portátil. Puedes usar distro001.iso, distro002.iso...distroy010.iso
Stéphane Chazelas
Es la política de administración, 50 kB / s por conexión de transferencia, o el ancho de banda total permitido en la computadora. Si es la primera, la respuesta se puede utilizar en la misma computadora en lugar de tener que iniciar sesión en diferentes estaciones de trabajo.
Dom
0

Tardaría aproximadamente 5.5 horas en cargar un archivo de 1 gigabyte a 50 kilobytes por segundo.

Parece que el esfuerzo de coordinar varias computadoras para obtener parciales puede ahorrar algo de tiempo.

Puede mirar bittorrent y utilizar la siembra web junto con las transferencias a través del intercambio entre pares. Cada cliente puede recibir piezas y compartir piezas completadas en la red de área local (LAN). Terminas con el mismo archivo de 1 gb en cada computadora, pero la fusión de piezas está automatizada para ti.

Dom
fuente