问题背景
同样的文件两次tar.gz打包生成的tar包hash值不一致,但是我们的需求是文件二进制内容一致的时候,tar包应该hash一致。
文件根因分析
tar.gz打包的时候,会把文件的组名,排列顺序,用户归属,修改时间,tar归档包的生成时间等信息均打入。
解决办法
tar --sort=name --owner=root:0 --group=root:0 --mtime='2020-09-03T08:00:00Z' -cf ../mmmm.tar ./*
gzip –n mmm.tar
通过强制指定一致的排序方式 --sort=name 通过指定一致的拥有者--owner=root:0 通过指定一致的组名--group=root:0 通过指定一致的修改时间--mtime='2020-09-03T08:00:00Z'
通过上述命令可以保证tar归档包的二进制一致性。可以通过diff校验。但是虽然tar归档包二进制一致,不同tar归档包的生成时间不同。所以gzip –n可以用来忽略tar归档包时间不一致的问题。
上述两行命令可以解决所有tar包归档二进制文件不一致的问题。