我正在寻找一个可以对正在归档的文件执行重复数据删除(dedupe)的归档程序。解压缩档案后,软件会放回压缩过程中删除的所有文件。
到目前为止,我发现:
有人知道吗?
这可能是7-zip的绝佳补充。
我正在寻找一个可以对正在归档的文件执行重复数据删除(dedupe)的归档程序。解压缩档案后,软件会放回压缩过程中删除的所有文件。
到目前为止,我发现:
有人知道吗?
这可能是7-zip的绝佳补充。
Answers:
几乎所有现代的存档器都做到这一点,唯一的区别是它们将其称为“固态”存档,因为在将所有文件送入压缩算法之前,它们都被串联到单个流中。这与标准zip压缩不同,标准的zip压缩一个接一个地压缩每个文件并将每个压缩文件添加到存档中。
7-zip本质上有效地实现了重复数据删除。例如,7-Zip将搜索文件,并按相似的文件类型和文件名对它们进行排序,因此,具有相同类型和数据的两个文件将并排放置在进入压缩器算法的流中。然后,压缩程序将看到其最近看到的大量数据,并且与逐个压缩文件相比,这两个文件的压缩效率将大大提高。
长期以来,Linux都通过“ .tgz”格式(或使用“ .tar.gz”使用完整格式)看到类似的行为,因为tar只是将所有文件合并为一个流(尽管没有排序和分组),然后使用gzip压缩。遗漏的是7-zip正在执行的排序,这可能会稍微降低效率,但仍然比以zip的方式简单地将大量单独压缩的文件放在一起要好得多。
.tar.gz
只能彼此完全独立地压缩相对较小的块(如900KB),因此不具有对两个大但相同的文件(例如,几个4MB图像)进行重复数据删除的能力吗?
在压缩过程中使用重复数据删除毫无意义。大多数压缩算法会创建所谓的“字典”,该字典将查找最常见或可重复使用的数据位。从那里,它将仅引用字典条目,而不是再次写出整个“单词”。这样,大多数压缩过程已经从所有文件中切出了冗余或重复数据。
例如,如果您使用一个1 MB的文件并每次使用不同的名称将其复制100次(总计100 MB的磁盘空间),然后将其压缩为7zip或zip文件,则您将拥有一个1 MB的zip文件。这是因为您的所有数据都放入一个字典条目中,并被引用了100次,这只占很小的空间。
这是对发生的情况的非常简单的解释,但要点仍能很好地传达。