分类: 服务器与存储
2008-07-15 23:03:44
这在解决了性能和可靠性问题的同时又引入了新的问题——磁盘不能够象磁盘那样离线保存,不可能无限制的扩充容量,而用户数据增长的趋势却是无限的,并且由于其不能离线保存也导致了远程容灾数据的传送需要占用大量的带宽,这些都在经济上给用户造成了极大的压力。那么有没有办法来缓解甚至解决这种磁盘容量的有限性和数据增长的无限性造成的矛盾呢?答案是“重复数据删除(Data de-duplication)”技术。
“重复数据删除”也称为“单实例存储(Single Instance Repository,简称SIR)”或者容量优化(Capacity Optimization),顾名思义,其根本作用是消减存储中的重复数据,以使任何一份数据只保存一份实例,达到充分利用存储空间的目的。
它是近年存储领域涌现出来的一门新兴技术,各大竞争厂商都生成其重复删除比可以达到 1:20 左右甚至更高,被专家誉为是一种“将会改写存储行业的经济规则”的技术。然而在实际和用户的接触中,大多数用户对该技术还存在许多疑问,诸如:“和增量备份有何区别”、“会不会造成数据损害”、“会不会影响备份性能”等等。所以,在这里我们就详细探讨一下重复数据删除的工作原理。
区别重复数据删除与增量备份
首先,“重复数据删除”和“增量备份”是完全不同的概念。“增量备份”是指只备份变化的文件;“重复数据删除”则是指只备份不重复的数据。举个简单的例子说明它们的区别:比如有一个文件型数据库 Access的文件 finance..mdb ,如果向该库中新插入了几笔记录,那么则意味着该文件发生了变动。当采用增量备份时会检查该文件的标志位,并将该文件整个重新备份;而如果使用“重复数据删除”技术,则只会备份新插入记录的数据。
从工作原理上讲,重复数据删除技术可以分为两大阵营,一种是基于哈希(Hash)算法的重复删除,一种是基于内容识别的重复删除。
基于哈希算法的重复数据删除
基于哈希算法的重复删除技术的代表厂商有昆腾、Data domain 、飞康等,其基本原理是利用SHA 、MD5 等算法将备份数据流切分成“块”,并且为每一块数据生成一组哈希码序列,不同厂商的技术可能对块大小的划分不同。
当备份新的数据时,将按照索引把新数据的哈希码和已存数据的哈希码进行比较,如果发现有相同的哈希码存在,则说明该数据块已经存在相同的实例,此时新备份的数据将被放弃而在相应的位置代之以指向原有实例的指针。
这种算法的优势在于算法简单,而缺点在于当磁盘容量不断增长时,数据块产生的哈希码表可能会超出内存的负载容量,这意味着进行哈希比对时需要去访问磁盘——这势必造成重复删除性能的迅速下降。
另外,哈希算法可能会产生哈希冲突——简单的讲就是不同的数据块产生了相同的索引,这会导致有用的数据被错误的丢弃,从而造成文件的损坏。当然,产生哈希冲突的概率是非常低的,以 128 位的 MD5 码为例,两个哈希码产生冲突的概率为 2E-128,假设一个阵列中存储了 N 个数据块的哈希码,那么其中包含冲突的概率可以按照(1/2)*(N/2e64)e2 进行计算,这意味着只有数据块的数量级达到 2E64 时才可能产生一个冲突。
基于内容识别的重复数据删除
基于内容识别的重复删除技术的代表厂商有 Sepaton、ExaGrid Systems 等,其基本原理是对记录的数据格式进行比对。在备份数据时,该技术会读取数据并从中提取出每组备份集以及备份集中数据对象的元数据,存入到内嵌文件系统的数据库内。当有新的数据进入时则对新的元数据与数据库中的元数据进行版本比对。
不同厂商技术的比对范围会有差别,有的只能在相同文件内进行比对,有的可以在整个阵列空间内进行比对。如果发现相同的元数据,接下来会对数据对象进行逐字节的比较,从而发现发生变化的数据——即使它们的元数据是形同的。如果数据对象确实是重复的,则删除该数据对象并代之以相应的指针。这种算法的优势在于可以避免哈希冲突,并可以利用元数据之间的联系更快的查找重复数据。
从上面两种技术的原理来看,用户完全没有必要担心数据损失问题,并且,各大厂商也采取了严格的措施来确保数据删除的准确性——以 Sepaton 的Delta Store 技术为例,在删除重复数据时首先会做一次模拟删除,从而生成一份删除后的数据视图,只有验证表明该视图确实可以准确的恢复原始数据后才进行真正的重复数据删除并回收磁盘空间。