Corrigir um arquivo binário muito grande em uma conexão lenta

0

para fins de backup, eu transferi um arquivo binário muito grande através de uma conexão lenta comparativamente a montante (a transferência levou 2 semanas), rsyncing em um cifs-share montado (assim eu pude e posso acessá-lo em bloco ). Após as 2 semanas, o rsync mostrou um erro (infelizmente não pôde salvá-lo), mas o tamanho do arquivo foi correspondido. Também

tail -c 1000000000 myfile.img|md5sum # and
head -c 1000000000 myfile.img|md5sum

correspondência, portanto, o início e o final do arquivo são idênticos.

Como meu downstream é muito mais rápido, fiz o download da imagem completa novamente e fiz md5 somas sobre a coisa toda, e elas NÃO correspondem. Então, aparentemente, em algum lugar nesses 1.5 TB é pelo menos um bit que difere.

Existe uma maneira de gerar um "patch" dos dois arquivos que baixei e então aplicá-lo no arquivo remoto, para que apenas os blocos errados tenham que ser transferidos novamente?

Por favor, note novamente: Eu não tenho o poder de executar o código remotamente ou fazer uso dos recursos do rsync que exigem a execução remota do rsync. Eu acho que eu ainda poderia usar o rsync e funciona na ordem de magnitude da minha taxa de download, mas eu me pergunto se há uma maneira melhor de fazer uso do fato de que eu tenho a versão localmente. Provavelmente não seria tão difícil escrever algo, mas eu preferiria usar algo testado e salvar o trabalho.

    
por mcandril 16.06.2016 / 13:37

2 respostas

1

(assumindo Linux) se você acredita que há apenas um bloco ou mais de dados corrompidos, mas o tamanho do bloco não mudou, então você pode usar cmp -l . Compara byte por byte e com -l fornece o deslocamento de quaisquer diferenças. Se você tem uma vaga idéia de onde começar dentro dos arquivos, você pode dar um início inicial com -i . Quando você tem os deslocamentos em erro, você pode usar dd skip=... para recortar isso do arquivo original e dd seek=... conv=notrunc para colá-lo no arquivo quebrado. (Teste na cópia primeiro)

    
por 16.06.2016 / 15:41
0

Eu usaria o BitTorrent para recuperar o arquivo no lado remoto. O protocolo divide um arquivo em pequenos blocos e re-transfere automaticamente os blocos cujos hashes não correspondem ao arquivo semente.

Para que funcione em um ambiente particular:

  1. Desative o DHT nos clientes locais e remotos de torrent de bits.
  2. Abra as portas locais de torrent de bits no firewall ou o encaminhamento de porta de SSH de configuração.
  3. Crie um arquivo de propagação no lado da origem. Não use um rastreador. Certifique-se de que o cliente comece a propagar o arquivo também.
  4. Backup do arquivo no lado remoto.
  5. Copie o arquivo de propagação para o lado remoto e abra-o com o cliente.
  6. Aponte o local do download para o arquivo corrompido e escolha a opção para não iniciar o download !! Também desativar as opções para se conectar a DHT, troca de peer, etc, se avaialbe.
  7. Peça ao cliente para verificar novamente o arquivo baixado. Ele deve relatar uma porcentagem de download quase concluída.
  8. Adicione o cliente local como um par ao download
  9. Iniciar o download
por 16.06.2016 / 14:57