![使用 bzip2 压缩的文件是否具有确定性(可重现)?](https://linux22.com/image/157603/%E4%BD%BF%E7%94%A8%20bzip2%20%E5%8E%8B%E7%BC%A9%E7%9A%84%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E5%85%B7%E6%9C%89%E7%A1%AE%E5%AE%9A%E6%80%A7%EF%BC%88%E5%8F%AF%E9%87%8D%E7%8E%B0%EF%BC%89%EF%BC%9F.png)
我正在尝试确定使用bzip2
压缩需要 100% 可重现的文件是否存在任何潜在问题。具体来说:元数据(名称/索引节点、lastmod 日期等)或其他任何内容是否会导致相同的文件内容产生不同的校验和在生成的.bz2
存档上?
举个例子,gzip 默认情况下不是确定性的除非-n
使用。
到目前为止,我的粗略测试表明,在给定相同的输入数据(无论元数据、平台、文件系统等如何)的情况下,bzip2 确实一致地生成相同的文件,但如果有更多的轶事证据那就太好了。
答案1
bzip2
文件仅包含基本格式签名、压缩数据以及解压缩该数据所需的信息。它们不包含任何特定于文件的元数据;相反,它们依赖于压缩文件的元数据(因此file.bz2
解压缩为file
,时间戳为file.bz2
,无论原始文件名和原始时间戳如何)。
压缩的一部分是可以变化的,即输入随机化;但这在实践中已经被禁用很长时间了,并且当前版本bzip2
不会随机化它们的输入。
因此,输出bzip2
仅取决于输入数据和压缩级别。输出是确定性的。
我不确定您是否能找到所有这些内容的权威来源;我能提供的最好证据就是bzip2
在Debian 可复制构建说明。bzip2
在 Debian 中使用,所以如果它确实引起了问题,就会以同样的方式得到提及gzip
做。