Tar produz arquivos diferentes a cada vez

4

Muitas vezes, tenho diretórios grandes que desejo transferir para um computador local de um servidor. Em vez de usar% recursivoscp ou rsync no próprio diretório, geralmente eu vou tar e gzip primeiro e depois transferi-lo.

Recentemente, eu queria verificar se isso está realmente funcionando, então executei o md5sum em dois arquivos tar e gzip gerados independentemente do mesmo diretório de origem. Para minha surpresa, o hash MD5 era diferente. Eu fiz isso mais duas vezes e sempre foi um novo valor. Por que estou vendo esse resultado? Dois diretórios tar e gzipados são gerados com a mesma versão do GNU tar da mesma maneira que não deveriam ser exatamente iguais?

Para maior clareza, tenho um diretório de origem e um diretório de destino. No diretório de destino eu tenho dir1 e dir2. Estou correndo:

tar -zcvf /destination/dir1/source.tar.gz source && md5sum /destination/dir1/source.tar.gz >> md5.txt

tar -zcvf /destination/dir2/source.tar.gz source && md5sum /destination/dir2/source.tar.gz >> md5.txt

Sempre que faço isso, recebo um resultado diferente do md5sum. Alcatrão não produz erros ou avisos.

    
por Alon Gelber 17.04.2018 / 16:55

1 resposta

7

Pelo que parece, você está sendo mordido por gzip timestamps ; para evitar isso, corra

GZIP=-n tar -zcvf ...

Observe que para obter tarballs totalmente reproduzíveis, você também deve impor a ordem de classificação usada por tar :

GZIP=-n tar --sort=name -zcvf ...

Se a sua versão de tar não for compatível com --sort , use isso:

find source -print0 | LC_ALL=C sort -z | GZIP=-n tar --no-recursion --null -T - -zcvf ...
    
por 17.04.2018 / 17:07