tars 是否可以在块级别进行重复数据删除?

flu*_*ngo 5 tar btrfs deduplication

很简单,当在磁盘上制作 tar 文件时,这些范围是否可以与 tar 内部和/或外部的范围进行重复数据删除?我在理论上问,所以如果数据的范围在 tar 内是相同的(没有移位,或在范围内分裂以进行压缩)那么理论上,范围将与 tar 外的范围相等,因此可以重复数据删除.

例如,如果我要对目录进行 tar 处理,然后使用块级重复数据删除,那么 tar 的有效大小会是附加标头、元数据和存档结束标记的大小。

显然我在谈论未压缩的 tar,特别是 GNU tar。我已经查看了GNU tar 标准,它似乎确实保留了我所阅读的原始块数据,但也许我误解了我所阅读的内容。

Gil*_*il' 5

一般来说,没有。设计一个提供这种重复数据删除的文件系统是可能的,但它的成本非常高,而且实际收益很小,所以我怀疑它是否已经完成。问题是重复数据删除只查看对齐的范围。

去重文件系统通常在块级别工作。当文件系统驱动程序要存储一个块时,它会计算块内容的校验和并在表中查找此校验和。如果表说不存在具有此校验和的块,则存储该块并将校验和添加到表中。如果表中存在校验和,则驱动程序检查具有该校验和的任何块是否与将要存储的块相同;如果存在,则创建对该块的新引用,如果不存在,则添加该块。

如您所见,每次写入块时都需要支付成本。但至少每次写入一个块只支付一次这个成本。如果文件 1 包含aaaabbbbcccc,文件 2 包含aabbbbcccc且块大小为 4,则文件不包含任何相同的块,因此不会进行重复数据删除。检测文件 2 包含在文件 1 中将需要计算任何对齐的块的校验和,成本高得令人望而却步。

通常,tar 文件中的文件块与文件系统的块不对齐。tar 存档中的文件可以从 512(tar 块大小)的倍数的任何偏移量开始,但大多数文件系统使用更大的块大小。如果存档中文件的开头恰好与文件系统块的开头对齐,那么如果有机会,该文件将被去重。典型的文件系统块大小大于此值,但由于它们是 512 的倍数,因此偶尔会发生重复数据删除,例如,假设文件大小以模 4096 为模的均匀分布(这不太正确,所以概率实际上要小一些)。

重复数据删除的典型用例是相同或大部分相同的文件:备份副本、文件的旧版本等。转换后的文件并不常见。未压缩的档案尤其不典型。