Como distribuir um grande download em vários computadores?

38

Preciso fazer o download de um arquivo grande (1 GB). Também tenho acesso a vários computadores executando o Linux, mas cada um é limitado a uma velocidade de download de 50kB / s por uma política de administrador.

Como distribuo o download desse arquivo em vários computadores e os mesclo após o download de todos os segmentos, para que eu possa recebê-lo mais rapidamente?

Meysam
fonte
7
Faça o download em casa e faça o sneakernet via usb thumbdrive?
WernerCD
2
Lembro-me de coisas assim com a antiga estação de sol e b & w quando eu estava na universidade. Basta verificar se você tem espaço suficiente para salvar todo o conteúdo, um dos meus amigos foi expulso após bloquear todos os computadores do laboratório (tmp completo).
Kartoch
Se não houver restrição de download, com que rapidez a outra extremidade pode enviar o arquivo? Existem restrições de transferência entre computadores na LAN?
Sun
@SunWKim Não. Não há nenhuma restrição específica lá.
Meysam 4/09/14

Respostas:

60

Os protocolos comuns HTTP, FTP e SFTP suportam solicitações de intervalo , para que você possa solicitar parte de um arquivo. Observe que isso também requer suporte do servidor, portanto, pode ou não funcionar na prática.

Você pode usar curle a opção -rou --rangepara especificar o intervalo e, eventualmente, apenas catjuntar os arquivos. Exemplo:

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

E, eventualmente, quando você reúne as partes individuais, você as concatena:

cat distro* > distro.iso

Você pode obter mais informações sobre o arquivo, incluindo seu tamanho com a --headopção:

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

Você pode recuperar o último pedaço com um intervalo aberto:

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

Leia a página de manual curl para mais opções e explicações.

Você pode aproveitar ainda mais o ssh e o tmux para facilitar a execução e acompanhar os downloads em vários servidores.

Marco
fonte
15
Nota: cuidado, ao usar, cat distro* > ...verifique a classificação dos arquivos, pois os arquivos *expandidos pelo shell podem ser classificados da seguinte forma: distro1.iso distro10.iso distro11.iso ...concatenando na ordem errada.
Sebastian
8
uma correção para a nota de @ Sebastian seria:cat distro{1..10}.iso
nonchip
1
Essa solução é específica do shell e não é portátil. cat $(seq -fdist%g.iso 1 10)deve ser mais previsível, mas falha csh, no entanto. Substituir $(…)por backtics parece funcionar na maioria das conchas.
Marco
3
@Marco, seqtambém não é um comando portátil. Você pode usar distro001.iso, distro002.iso...distroy010.iso
Stéphane Chazelas
É a política de administração, 50 kB / s por conexão de transferência ou a largura de banda total permitida no computador. Se for o primeiro, a resposta pode ser utilizada no mesmo computador, em vez de ter que fazer login em diferentes estações de trabalho.
Sun
0

Levaria cerca de 5,5 horas para carregar um arquivo de 1 gigabyte a 50 kilobytes por segundo.

Parece que o esforço para coordenar vários computadores para obter parciais pode economizar algum tempo.

Você pode olhar para o bittorrent e utilizar a semeadura na web junto com as transferências via troca entre pares. Cada cliente pode receber e compartilhar peças concluídas na rede local (LAN). Você acaba com o mesmo arquivo de 1 GB em cada computador, mas a fusão de peças é automatizada para você.

Dom
fonte