O arquivador tar pode zerar um arquivo?

2

Recebi um arquivo tar de um colega de trabalho e depois de descomprimir descobri que alguns arquivos de texto estão corrompidos. Mais precisamente, eles estão cheios de zeros. Eles têm tamanho correto, mas todos os bytes são iguais a 0x00.

Esta situação pode ser causada por alguma incompatibilidade de versões de alcatrão ou por ex. caracteres chineses contidos nos arquivos ou os arquivos tiveram que ser corrompidos no tempo de compressão? Eu não espero que tenha havido um problema durante a transferência porque a soma de controle está OK.

    
por Honza 04.03.2013 / 14:23

2 respostas

1

O problema mais provável é que o tar foi corrompido enquanto estava sendo criado. Devido à forma como o formato tar é definido (uma vez que se destina a ser um arquivador de streaming), ele deve determinar o tamanho do arquivo antecipadamente. Ele registra esse comprimento no cabeçalho tar e, em seguida, começa a gravar o conteúdo do arquivo no arquivo tar. Se, por algum motivo, ocorrer um erro ao ler o arquivo ou se o arquivo encolher enquanto estiver sendo arquivado, ele preencherá NULLs. Isso é necessário para que o comprimento especificado no cabeçalho ainda seja válido após a extração (ele não pode voltar e modificar o cabeçalho devido à sua natureza de fluxo contínuo, e se ele não preencheu o arquivo com NULLs que causariam um erro quando extraindo o próximo arquivo no arquivo).

Além disso, como o tar lida com dados binários (não tem modo "texto"), não deve haver nenhum problema (no que diz respeito ao tar) com diferentes codificações de idioma.

    
por 05.03.2013 / 03:43
2

Tem certeza de que todos bytes são iguais a 0x00 ? Nesse caso, seus arquivos não contêm nenhuma informação (exceto seu tamanho). Nenhum programa poderia armazenar ou transmitir informações como todos os zeros (a menos que seja telepático).

O que pode acontecer é que um arquivo tem texto alternado e zero bytes. Aqui está o que isso significaria: Você recebeu arquivos que contêm texto unicode, codificado como UTF-16 (ou quase equivalente). Cada caractere ocupa 16 bits (dois bytes). O Unicode atribui letras e símbolos ingleses ao seu código de caracteres ASCII, o que significa que, por exemplo, a letra A é hexadecimal 41 em ASCII e 0041 em Unicode. O resultado é que se você escrever "Olá" como UTF-16 e lê-lo como texto de 8 bits, você verá isto:

%pre% H %pre% e %pre% l %pre% l %pre% o
H %pre% e %pre% l %pre% l %pre% o

Nesse caso, não seria culpa de tar . Mas se você realmente recebeu todos os arquivos com zero e a checagem de checksums, definitivamente há algo errado com o programa de criação. Não é um problema de versão, mas quem sabe? Talvez um problema de hardware que faz com que o programa gerador leia todos os zeros.

(Também é possível, é claro, que os arquivos foram arquivados corretamente, e o bug está no programa que criou os arquivos arquivados).

    
por 04.03.2013 / 14:57