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?
download
cluster
parallelism
Meysam
fuente
fuente
Respuestas:
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
curl
y la opción-r
o--range
para especificar el rango y, finalmente, simplementecat
juntar los archivos. Ejemplo:Y eventualmente cuando reúnes las partes individuales las concatenas:
Puede obtener más información sobre el archivo, incluido su tamaño con la
--head
opción:Puede recuperar el último fragmento con un rango abierto:
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.
fuente
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.cat distro{1..10}.iso
cat $(seq -fdist%g.iso 1 10)
debería ser más predecible, pero fallacsh
, sin embargo. Reemplazar$(…)
con backtics parece funcionar en la mayoría de los shells.seq
tampoco es un comando portátil. Puedes usardistro001.iso
,distro002.iso
...distroy010.iso
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.
fuente