很简单,当在磁盘上创建 tar 文件时,是否可以对 tar 内部和/或外部的范围进行重复数据删除?我在理论上问,所以如果 tar 内的数据范围是相同的(没有为了压缩而在范围内移动或分割),那么理论上,范围将与 tar 外部的数据范围相同,因此可以进行重复数据删除。
例如,如果我要 tar 一个目录,然后使用块级重复数据删除,那么 tar 的有效大小将是附加标头、元数据和归档标记结尾的大小。
显然我说的是未压缩的 tar,特别是 GNU tar。我看过GNU tar 标准它似乎确实保留了我所读内容的原始块数据,但也许我误解了我所读内容。
答案1
一般来说,不会。设计一个提供这种重复数据删除功能的文件系统是可能的,但是成本非常高,而且几乎没有什么实际好处,所以我怀疑它是否已经完成。问题是重复数据删除只关注对齐范围。
文件系统重复数据删除通常在块级别进行。当文件系统驱动程序要存储块时,它会计算块内容的校验和并在表中查找该校验和。如果表表明不存在具有此校验和的块,则存储该块并将校验和添加到表中。如果表中存在校验和,驱动程序将检查具有该校验和的任何块是否与将要存储的块相同;如果有,则创建对此块的新引用,如果没有,则添加该块。
正如您所看到的,每当编写一个块时都需要付出一定的成本。但至少这个成本只需要在每次写入一个块时支付一次。如果文件 1 包含aaaabbbbcccc
,文件 2 包含aabbbbcccc
且块大小为 4,则文件不包含任何相同的块,因此不会发生重复数据删除。检测文件 2 是否包含在文件 1 中需要计算任何对齐方式的块的校验和,成本高昂。
一般来说,tar 文件中的文件块与文件系统的块不对齐。 tar 存档中的文件可以从 512(tar 块大小)的倍数的任何偏移量开始,但大多数文件系统使用更大的块大小。如果存档内文件的开头恰好与文件系统块的开头对齐,那么如果有机会,该文件将被重复数据删除。典型的文件系统块大小大于此值,但由于它们是 512 的倍数,因此偶尔会发生重复数据删除,例如,假设文件大小均匀分布以 4096 为模,则 4096 字节块的重复数据删除约为八分之一(这并不完全正确,所以实际上概率要小一些)。
重复数据删除的典型用例是相同或基本相同的文件:备份副本、文件的旧版本等。转换后的文件并不典型。未压缩的档案尤其不典型。