一、序

  1. 研究背景
    linux device mapper deduplication target作为开源系统linux目前的块级重删技术,未来会被广泛关注。尤其是在全闪存all flash array要在未来大爆发的时代,越来越多的混合存储方案会被全闪存所替换。如何更提高闪存的利用率变成了各大厂商的研究对象。
    由此可见重删技术对闪存是尤为重要,甚至来说是闪存能够做到低成本的基础要素,另一个要素是:压缩。

2.重删的基本概念
重删是一门非常老的学问,历史上有很多人研究过数据重删,这里就不介绍了。
这里我们借用维基百科来快速了解一下重删技术:
详见https://en.wikipedia.org/wiki/Data_deduplication {在计算中,重复数据删除是一种专门的数据压缩技术,用于消除重复数据的重复副本。相关和稍微同义的术语是智能(数据)压缩和单实例(数据)存储。此技术用于提高存储利用率,还可以应用于网络数据传输,以减少必须发送的字节数。在重复数据删除过程中,在分析过程中识别并存储唯一的数据块或字节模式。随着分析的继续,将其他块与存储的副本进行比较,并且每当匹配发生时,冗余块被替换为指向存储的块的小引用。鉴于相同的字节模式可能会发生数十次,数百次甚至数千次(匹配频率取决于块大小),所以必须存储或传输的数据量可以大大减少。此类重复数据删除与标准文件压缩工具(如LZ77和LZ78)执行的重复数据删除不同。虽然这些工具识别单个文件中的短重复子串,但基于存储的重复数据删除的目的是检查大量数据并识别相同的大型部分(例如整个文件或大部分文件),以便仅存储一份副本。可以通过单文件压缩技术另外压缩该副本。例如,典型的电子邮件系统可能包含100个相同1 MB(兆字节)文件附件的实例。每次备份电子邮件平台时,都会保存所有100个附件实例,需要100 MB的存储空间。通过重复数据删除,实际只存储了一个附件实例;后续实例被引用回保存的副本,重复数据删除率大约为100比1。}

从维基百科的介绍可以看出,重删在特定的应用场景下有着非常大的作用(如:邮件系统)。

3.开源的重删技术
目前开源的deduplication有大致如下几种:
dm dedup 、openzfs、btrfs、opendedup等。
除了dm dedup外其他的都是文件系统级别的重删功能。
所以dm dedup也是我知道的块级重删的唯一开源项目。

4.文件级重删和块级重删的区别
文件和块级重删在本质上是没有区别,他们的目的都是去比较重复的数据,用引用来代替实例来节省空间的方法,但是从stack的角度,他们有很大的区别。众所周知,我们构建一个存储系统,其中功能的完备性在 I/O stack的越底层,那么它的作用范围就会越大,兼容性就会越好,但应用感知能力也会越差。我们知道在一般的linux系统中文件系统一般都是构建在块设备之上,所以重删的功能如果在块级,那么就可以兼容那些缺少重删功能的稳定文件系统,比如ext4,xfs等。所以我认为这是重删功能在块级非常重要的一点。还有一点是,针对那些直接需要块存储的导出系统(openstack cinder,vmware exsi,和一些集群文件系统),不管是server san还是标准san内部实现块级重删也是再好不过了,如果使用openzfs/btrfs支持块级子卷的导出在性能上必会有大的损失,所以能在块级直接实现重删功能是非常有意义的事情。

【本文只在51cto博客作者 “底层存储技术” https://blog.51cto.com/12580077 个人发布,公众号发布:存储之谷】,如需转载,请于本人联系,谢谢。