Código de hash diferente ao direcionar a saída “sha1sum” para “tar”

2

No sistema AIX (v 7.1) sha1sum está calculando códigos hash diferentes quando é canalizado diretamente para a saída de tar comparado a quando lê um arquivo.

Quais são as razões para isso? Existem maneiras de contornar isso e obter o código hash diretamente da saída tar pipe?

(Em outros sistemas como o Debian e o Ubuntu, a saída canalizada de sha1sum para tar funciona bem)

folder=myfolder
tarfile=myfolder.tar

tar -cf $tarfile $folder && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

tar -cf $tarfile $folder && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

tar -cf - $folder > $tarfile && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

tar -cf - $folder > $tarfile && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

tar -cf - $folder | sha1sum
f1dd1a0c4e82dd5c441664869b656c7bce799270  -

tar -cf - $folder | sha1sum
f1dd1a0c4e82dd5c441664869b656c7bce799270  -
    
por Luciano 16.08.2017 / 20:26

1 resposta

3

O motivo para esse problema é o comando tar . Possui registros internos feitos de um número fixo de blocos de 512 bytes. O número de blocos por registro pode ser definido com o parâmetro -b .

Algumas implementações podem ajustar a quantidade de blocos automaticamente de acordo com o descritor de arquivo, se for um dispositivo de fita, um arquivo regular ou um pipe.

Corrigir a quantidade de blocos com o parâmetro -b corrigiu o problema. Como: tar -b1 -cf - $folder | sha1sum . Mas, para corresponder aos blocos padrão predefinidos nos dois primeiros comandos da pergunta, eu tive que usar -b20 (registros de 10240 bytes é o padrão para arquivos armazenados em arquivos regulares):

$ tar -b20 -cf - $folder > $tarfile && sha1sum $tarfile
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d  myfolder.tar

$ tar -b20 -cf - $folder |sha1sum                      
fe2dcba2b25d4bbb35460309c8bb87a1d2514d7d 
    
por 17.08.2017 / 17:14