Como posso recuperar arquivos de um arquivo .tar.gz corrompido?
Pergunta
Eu tenho um grande número de arquivos em um arquivo .tar.gz. Verificar o tipo de arquivo com o comando
file SMS.tar.gz
dá a resposta ??p>
gzip compressed data - deflate method , max compression
Quando tento extrair o arquivo com gunzip, depois de um atraso recebo a mensagem
gunzip: SMS.tar.gz: unexpected end of file
Existe alguma maneira de recuperar até mesmo parte do arquivo?
Solução
Você tem certeza de que é um arquivo gzip? Gostaria em primeiro lugar executar 'SMS.tar.gz arquivo' para validar que.
Então eu leria o href="http://www.urbanophile.com/arenn/coding/gzrt/gzrt.html" rel="nofollow noreferrer"> O gzip página .
Outras dicas
A recuperação é possível, mas isso depende do que causou a corrupção.
Se o arquivo é apenas truncado, ficando alguns fora resultado parcial não é muito difícil; basta executar
gunzip < SMS.tar.gz > SMS.tar.partial
que lhe dará alguma saída apesar do erro no final.
Se o arquivo compactado tem grandes blocos ausentes, é basicamente impossível após o bloco ruim.
Se o arquivo compactado é sistematicamente corrompido em pequenas formas (por exemplo, transferir o arquivo binário no modo ASCII, que esmaga retornos de carro e novas linhas em todo o arquivo), é possível recuperar, mas requer um pouco de programação personalizada, é realmente só vale a pena se você não tem absolutamente nenhum outro recurso (sem backups) e os dados vale a pena um monte de esforço. (Eu tenho feito isso com sucesso.) Mencionei este cenário em um pergunta anterior .
As respostas para arquivos .zip diferem um pouco, uma vez zip arquivos têm vários membros separadamente-compactados, então não há mais esperança (embora a maioria das ferramentas comerciais são bastante falso, eles eliminam avisos por CRCs patching, não recuperando boa dados). Mas a pergunta era sobre um arquivo .tar.gz, que é um arquivo com um grande membro.
Aqui está um cenário possível que encontramos. Tivemos um arquivo tar.gz que não descomprimir seria, tentando unzip deu o erro:
gzip -d A.tar.gz
gzip: A.tar.gz: invalid compressed data--format violated
Eu descobri que o arquivo pode foi inicialmente carregadas através de uma conexão sem ftp binária (não sabemos com certeza).
A solução foi relativamente simples utilizando o utilitário UNIX dos2unix
dos2unix A.tar.gz
dos2unix: converting file A.tar.gz to UNIX format ...
tar -xvf A.tar
file1.txt
file2.txt
....etc.
Funcionou! Esta é uma possibilidade magro, e tentar um talvez vale a pena -. Pode ajudar alguém lá fora