para fins de backup, eu transferi um arquivo binário muito grande sobre uma conexão lenta comparativamente a montante (a transferência levou 2 semanas), rsincronizando-o 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 igualado.
tail -c 1000000000 myfile.img|md5sum # and
head -c 1000000000 myfile.img|md5sum
jogo, então o início e o fim do arquivo são idênticos.
Como meu downstream é muito mais rápido, eu baixei a imagem completa novamente e fiz md5 somas sobre a coisa toda, e elas NÃO combinam. Então, aparentemente, em algum lugar desses 1,5 TB é pelo menos um bit que difere.
Existe uma maneira de gerar um "patch" dos dois arquivos que baixei e depois 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.
fonte
Respostas:
(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ê poderia 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 começar-i
. Quando você tem as compensações em erro, você pode usardd skip=...
para recortar isso do arquivo original, edd seek=... conv=notrunc
para colá-lo no arquivo quebrado. (Teste na cópia primeiro)fonte
Eu usaria o BitTorrent para recuperar o arquivo no lado remoto. O protocolo divide um arquivo em pequenos blocos e automaticamente re-transfere blocos cujos hashes não correspondem ao arquivo semente.
Para fazê-lo funcionar em um ambiente privado:
fonte