我正在尝试使用 ZFS 对大量 FLAC 文件库进行重复数据删除。这样做有两个目的:
- 降低存储利用率
- 减少将库与云存储同步所需的带宽
这些文件中有许多是相同的音乐曲目,但来自不同的物理媒体。这意味着它们大部分是相同的,并且通常大小接近,这让我认为它们应该受益于块级重复数据删除。
但是在我的测试中,我没有看到好的结果。当我创建一个池并添加其中三个曲目(来自不同源媒体的相同歌曲)时,zpool list 报告 1.00 重复数据删除。如果我复制所有文件(制作三个文件的精确副本),重复数据删除就会上升,所以我知道它已启用并正常运行,但它在原始文件集合中找不到任何重复项。
我的第一个想法是,也许一些可变的标头数据(元数据标签等)可能会错误地对齐这些文件中的大部分数据(音频帧),但即使使三个文件中的标头数据保持一致似乎也不会对重复数据删除产生任何影响。
我正在考虑采取替代路线(测试其他重复数据删除文件系统以及一些自定义代码),但由于我们已经在使用 ZFS,并且我喜欢 ZFS 复制选项,因此我更愿意对该项目使用 ZFS 重复数据删除;但也许它根本无法很好地处理这种数据。
如果您能提供任何关于调整的反馈,以改善此类数据集的重复数据删除性能,或者确认 ZFS 重复数据删除不是适合这项工作的工具,我们都会很感激。
答案1
我不知道 ZFS 的情况,但 FLAC 编解码器有很多不同的参数,而且 FLAC 文件内部的结构通常不是字节对齐的。因此,设置中的任何细微变化都可能导致非常不同的字节流。您是否知道“相同”的文件是否使用相同的软件、相同的软件版本和相同的设置在相同的架构上进行 flacced?
假设字节流中存在一些差异(这可以解释您的 1.0 结果),测试此问题的一种方法是在同一台机器上解压缩并重新压缩所有 FLAC 文件。(当然,只要保留元数据,此操作就不会丢失任何数据。)