Olá, imagine baixar um arquivo de 2GB em uma conexão de 128k? Demora muito não é??!!! Seria mais de um dia!!! E se você se unisse com alguns amigos, vizinhos etc para baixar esse mesmo arquivo? Só que cada um em seu PC? E muitas vezes usando conexões diferentes?! E agora, como conciliar isso?
Foi o que pensei por muito tempo até achar uma solução que funcionasse. Primeiro a ideia foi fácil, basta cada computador baixar uma parte do arquivo e depois juntar as partes em 1 PC. Os próprios gerenciadores de download dividem o arquivo baixando-os em partes, só que eles não permitem selecionar qual parte vamos baixar, então não poderíamos usá-los pois todos eles baixariam o arquivo de forma independente.
Foi preciso usar um programa capaz de baixar especificamente uma parte do arquivo, pois cada computador vai baixar um parte independente, e esse programa foi o versátil
curl do
Linux, com ele podemos especificar cada byte que queremos baixar, através de uma range.
Depois disso iremos dividir o trabalho, selecionando qual computador baixará qual parte, e por último pegar as partes através de CDs, pendrives etc e uní-los em um computador.
Vamos ao trabalho!
Primeiro precisamos do curl instalado, no LINUx isso é fácil, no WINDows também (sim ele funciona muito bem no Windows, alias testei primeiro no Windows).
Se sua distro for baseada em Debian, instale o curl pelo comando abaixo:
# apt-get install curl
No Windows vai precisar baixar o binário para executar via CMD:
Extraia o arquivo, vá na pasta bin, lá tem o executável curl.exe com todas as bibliotecas necessárias.
Escolha o arquivo, no meu exemplo usarei a ISO do Slackware 13.1, uma criancinha de pequenos 4GB, imagina isso a uma conexão de 128k, é triste só em pensar... seriam 3 dias, 2 hrs, 33 mins, 55 segs, isso com disponibilidade o tempo todo.
Link:
http://slackware.mirrors.tds.net/pub/slackware/slackware-13.1-iso/slackware-13.1-install-dvd.iso
Se quiser uma boa calculadora de tempo de download veja nesse link:
http://www.cabangu.com.br/novo/paginas/sdnet/time_calc/
Vamos por a mão na massa, primeiro precisamos saber quanto vai baixar cada PC, e essa medida tem que ser em bytes. Para isso criei uma pequena planilha para automatizar, pois não sei nada de script ou programação. Disponibilizei ela online pelo link abaixo:
Primeiro veja que qualquer um pode alterar a planilha, com isso vocês podem melhorá-la. Para usá-la basta colar o link no campo link, em tamanho coloque o tamanho em MB, no nosso caso 4096, em "Nome com ext." coloque o nome do arquivo com extensão conforme o modelo "slackware-13.1-install-dvd.iso". Depois coloque quantos computadores vão baixar o arquivo em "Q. PC's".
Ela irá calcular a quantidade de bytes que serão baixados por cada PC, como pode se perceber nessa planilha só gera comandos para no máximo 5 PCs, mas isso pode ser simplesmente aumentado para quantos quiser uma outra hora.
Pode ver que ele vai gerar o comando pronto com a range de cada parte, bastando apenas colar no terminal ou no CMD em caso do Windows (lembrando que no caso do Windows vai ter que ser na pasta bin do arquivo baixado). Explicarei abaixo o comando, embora a planilha já gere ele pronto.
Exemplo:
# curl -o slackware-13.1-install-dvd.iso.1 -r0-858993450 http://slackware.mirrors.tds.net/pub/slackware/slackware-13.1-iso/slackware-13.1-install-dvd.iso
Onde "slackware-13.1-install-dvd.iso.1" pode ser alterado para o nome que desejar, o "-r0-858993450" quer dizer que ele vai baixar os primeiros 858993450 bytes do arquivo, e no final do comando o link do arquivo. Um comando bem simples.
Para a segunda parte foi só começar pelo byte posterior até o final da parte. Veja exemplo do segundo comando para a máquina 2:
# curl -o slackware-13.1-install-dvd.iso.2 -r858993451-1717986900 http://slackware.mirrors.tds.net/pub/slackware/slackware-13.1-iso/slackware-13.1-install-dvd.iso
Aí é só seguir o ritmo e colando o próximo comando em outra máquina, perceba que na última parte coloquei um número muito grande para que não fique jamais faltando um fragmento do arquivo, pois como muitas vezes não sabemos o tamanho em bytes do download, poderia acabar ficando um resto na divisão por PCs e o download sairia corrompido. Assim executando cada comando em um PC irá baixar uma parte diferente do mesmo arquivo, em uma noite 5 computadores por exemplo baixam 1 mesmo arquivo, porém de forma conjunta, pois cada um baixa uma parte diferente que só vai servir quando unir todas.
Depois de horas de download (pelo menos não serão dias, hehe), quando terminar é só juntar os arquivos em um PC, levando as partes de um computador pro outro através de pendrives, CDs, DVDs etc. Quando tiver todas as partes reunidas numa pasta, poderá uní-las pelos métodos a seguir:
atribuir extensões .001, .002, .003 e juntar com o HJ-Split, ou usar comandos nativos dos sistemas (prefiro assim).
No Windows poderá unir com o comando "type". Suponha que as partes sejam slackware-13.1-install-dvd.iso.1, slackware-13.1-install-dvd.iso.2,slackware-13.1-install-dvd.iso.3 etc. Como varia somente o final, no CMD com todos as partes na mesma pasta basta usar o comando abaixo:
type slackware-13.1-install-dvd.iso.* > slackware-13.1-install-dvd.iso
Aí seria gerado o arquivo completo slackware-13.1-install-dvd.iso.
No Linux é quase a mesma coisa, mas o comando é o cat. No caso seria:
# cat slackware-13.1-install-dvd.iso.* > slackware-13.1-install-dvd.iso
Pronto, você juntou todas as partes baixadas em PCs diferentes.
Como percebeu, supondo que cada um dos 5 PCs que baixaram as partes tivessem uma conexão de 125k, demoraria 14 hrs, 54 mins, 47 segs para cada parte, mas como todas podem ser baixadas simultaneamente, teríamos somente 14 hrs, 54 mins, 47 segs para baixar todo o arquivo, contra 3 dias, 2 hrs, 33 mins, 55 segs de uma máquina solitária, ou seja, 5x mais rápido, isso quer dizer que quanto mais máquinas envolvidas mais rápido será.
Agora vamos ver como fazer isso quando possível em somente uma máquina e alguma considerações finais.