Faça o download de arquivos muito grandes com HTTP

1

Estou baixando o banco de dados compactado PlaceNet de imagens de locais (~ 132GiB). Infelizmente, o arquivo baixado está corrompido. Eu tentei várias vezes, cada vez que a extração é interrompida em diferentes posições (aprox. Offsets poderia ser 10GiB, 30GiB, etc) PlaceNet não fornece versões divididas para download. Bem, o problema deve ser alguns bytes no arquivo baixado, o que posso fazer para evitar baixar novamente todo o arquivo novamente?

Minhas ideias são:

  1. Existe extensão TCP para uma soma de verificação de datagrama aprimorada? E como usá-lo?

  2. Posso ver o deslocamento (aprox.) do primeiro byte de erro quando gunzip ping?

  3. Estou usando o axel para fazer o download. Quando o download for concluído, é possível baixar novamente algumas partes do arquivo? Ou seja, crie o arquivo XXX.st para o axel, marque algum intervalo como descarregado e execute o axel novamente.

por Xiè Jìléi 16.06.2016 / 18:02

1 resposta

0

Você pode tentar uma abordagem diferente, por exemplo, usando um wrapper do FUSE para "montar" um arquivo remoto via HTTP e invocar as ferramentas padrão nele. As ferramentas tentarão ler bytes específicos e essas tentativas serão traduzidas para solicitações GET de intervalo de bytes HTTP.

Isso foi discutido no StackOverflow, em esta ótima resposta por Adam que usa HTTPFS :

Mount a remote zip file and extract one file from it:

mkdir mount_pt
sudo ./httpfs http://server.com/zipfile.zip mount_pt
sudo ls mount_pt zipfile.zip
sudo unzip -p mount_pt/zipfile.zip the_file_I_want.txt > the_file_I_want.txt
sudo umount mount_pt

No seu caso, se o arquivo não for um ZIP, por exemplo, um arquivo tar.gz (não posso verificar porque o link que você forneceu requer registro), então você pode adaptar as etapas:

mkdir mount_pt
sudo ./httpfs http://example.com/file.tar.gz mount_pt
sudo tar xzvf mount_pt/file.tar.gz

Ou até mesmo chamar file-roller ou outra ferramenta GUI no arquivo.

    
por 17.06.2016 / 13:57