是否有用于Windows的压缩程序或存档程序也可以进行重复数据删除?[关闭]


12

我正在寻找一个可以对正在归档的文件执行重复数据删除(dedupe)的归档程序。解压缩档案后,软件会放回压缩过程中删除的所有文件。

到目前为止,我发现:

有人知道吗?

这可能是7-zip的绝佳补充。

Answers:


12

几乎所有现代的存档器都做到这一点,唯一的区别是它们将其称为“固态”存档,因为在将所有文件送入压缩算法之前,它们都被串联到单个流中。这与标准zip压缩不同,标准的zip压缩一个接一个地压缩每个文件并将每个压缩文件添加到存档中。

7-zip本质上有效地实现了重复数据删除。例如,7-Zip将搜索文件,并按相似的文件类型和文件名对它们进行排序,因此,具有相同类型和数据的两个文件将并排放置在进入压缩器算法的流中。然后,压缩程序将看到其最近看到的大量数据,并且与逐个压缩文件相比,这两个文件的压缩效率将大大提高。

长期以来,Linux都通过“ .tgz”格式(或使用“ .tar.gz”使用完整格式)看到类似的行为,因为tar只是将所有文件合并为一个流(尽管没有排序和分组),然后使用gzip压缩。遗漏的是7-zip正在执行的排序,这可能会稍微降低效率,但仍然比以zip的方式简单地将大量单独压缩的文件放在一起要好得多。


每天学些新东西。我没有意识到zip分别压缩了每个文件,但是在我的计算机上运行了几次测试后,我意识到您确实是正确的。非常有趣,谢谢!
2011年

7ip在重复数据删除方面做得很不错,但是它也被设计为有效地压缩非重复数据,并使用大量的CPU和内存来实现这一目标,这使其成为一种非常低效的重复数据删除方法。如果压缩两个相同的100MB文件,则尝试有效地压缩第一个文件会很麻烦,然后才(如果字典大小足够大)将第二个文件压缩为第一个文件的副本。
mwfearnley '16

gzip难道一次.tar.gz只能彼此完全独立地压缩相对较小的块(如900KB),因此不具有对两个大但相同的文件(例如,几个4MB图像)进行重复数据删除的能力吗?
宾基

例如,7z能够在大型文件之间进行重复数据删除,但gzip无法:gist.github.com/binki/4cf98fb4f1f4aa98ee4a00edaf6048fa
binki 2015年

一种有趣的方法是'git add'文件,然后压缩.git文件夹
benettung

4

在压缩过程中使用重复数据删除毫无意义。大多数压缩算法会创建所谓的“字典”,该字典将查找最常见或可重复使用的数据位。从那里,它将仅引用字典条目,而不是再次写出整个“单词”。这样,大多数压缩过程已经从所有文件中切出了冗余或重复数据。

例如,如果您使用一个1 MB的文件并每次使用不同的名称将其复制100次(总计100 MB的磁盘空间),然后将其压缩为7zip或zip文件,则您将拥有一个1 MB的zip文件。这是因为您的所有数据都放入一个字典条目中,并被引用了100次,这只占很小的空间。

这是对发生的情况的非常简单的解释,但要点仍能很好地传达。


1
由于大多数压缩档案的字典大小非常有限,因此在日常使用中无效。尝试使用50MB的文件,使用两个相同的输入文件,压缩后的大小将增加一倍。
Chaos_99 '16

1
与7zip文件不同,Zip文件不支持跨文件重复数据删除。压缩文件分别压缩和存储每个文件,因此重复的文件将简单地多次存储在存档中。
mwfearnley '16

1
尽管7zip确实支持跨文件重复数据删除,但它旨在查找和压缩短得多的匹配项。它的算法比为查找大规模数据复制而设计的算法可能要慢得多,并且要占用更多的内存。
mwfearnley '16

4

7-Zip,zip,gzip和所有其他存档程序无法检测到彼此相距较远的相同区域,例如,在同一文件内或位于不同文件内不同位置的彼此相隔仅几兆字节或更高的区域。

因此,在某些情况下,普通的存档者的表现不如压缩和其他。如果压缩某些虚拟机或其他内容,则可以看到此信息。


1
这是对的。一旦唯一数据量超过了压缩程序字典的大小,压缩就会消耗the尽。exdupe为大数据量提供卓越的性能。
usr
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.