带重复数据删除的归档存储系统获得了更好的存储空间利用率是以降低数据可靠性为代价的,这在很多实际应用尤其是长期归档系统中是不可接受的。因此,在带重复数据删除的存储系统中,尤其在带重复数据删除的大规模归档存储系统中,如何保证数据可靠性是一个关键问题。Bhagwat,等人[100]首先注意到了这一问题,并初步定最分析了重复数据删除给存储系统可靠性所带来的后果。
总结起来,当前为带重复数据删除的存储系统提供可靠性主要有以下两类方法。
1.基干复制伪可靠性算法保证
Bhagwat等人[100]提出了一种根据数据块的重要性为其保存若干份副本的方法。这是一种自然、简单的想法,但它需要占用很大的存储空间,并且系统通信量也随着副本份数的增多而增大,这些特性抉定了其在大规模存储系统中的表现会比较低效[45],[112]。而且,Bhagwat的研究并没有考虑数据块的实际放置方法。Google公司的Googlefilesystem(GFS)[35]也采用了副本的方法来增强系统的可靠性。在GPS中,文件被分成固定大小的块,每个块由一个不变的、全局唯一的64位的chunk-handle标志。为了提高系统的可靠性,每一个数据块被复制成若干份存放在不同的服务器上。默认情况下,系统保存三个副本,但用户可以自己指定副本的数目。管理器在创建新块时考虑了数据块的分布,如优先放置在空间利用率低的磁盘上,同一份数据的副本放在不同的机器上等。
通过复制保证系统的可靠性是一种自然、简单的想法,但它需要占用的存储空间较大,并且系统通信量也随着副本份数的增多而增大,这在一定程度上限制了其在大规模存储系统中的使用。
2.基干RAID类系统的可靠性保证
直接使用RAID类(RAID-likesystem)系统作为底层的存储系统,这也是提高系统可靠性的一种常用方法。该方法对上层透明,容易实现和部署。但是传统RAID系统(RAID1-RAID5)的容错能力是极其有限的,无法容忍两块硬盘同时发生故障的情况。一旦存储系统中两块硬盘同时损坏,以往的RAID技术对此就无能为力了,这是对系统容错性要求很高的归档存储系统所不能容忍的。为了克服这一缺点,RAID6引入了双垂校验机制,通过使用基于Galoisfield算法或有限场的数学MDS代码,在驱动器上对数据进行编码校验,可以容忍任意两块磁盘的错误。J.s.plank[113]提出了一种易于转换成系统实现的RAID6编码。RAID6比RAID5具有更高的容错性,但也引入了更人的系统开销,复杂的校验计算使其较难扩展到大规模海量存储架构中使用。另外,类RAID系统只能进行整盘恢复,数据恢复时延相对较大,磁盘的容量越人,恢复所需的时间就越长,重建一个lTB的磁盘需要l0一l2h的时间。SuzhenWu等人[114]提出了一种加速RAID恢复时间的算法。这种算法将所有待恢复磁盘上的用户写请求和部分热门的读请求临时衷定向到其他相对空闲的磁盘上,避免了在进行RAID恢复的同时读泻用户数据和恢复数据所造成的磁头来回跳转问题,平衡了系统负载,提高了恢复的性能。但是这种算法需要更多的磁盘空间,而且在集中恢复一块整盘时仍然需要相对较长的时间。而恢复时间越长,数据丢失的可能性就越高。因此RAID技术并不适合在大规模存储系统申用于保证高数据可靠性[115],需要进一步研究更加高效的可靠性保证机制。
由上述分析可知,设计一种新的适用于重复数据删除大规模存储系统的方法来保证数据可靠性是十分有必要的。
针对带重复数据删除的大规模归档存储系统的数据可靠性保证机制,从而提出R-ADMAD吧,它将去重生胰的变长数据块打包成定长的数据块,然后使用能够比简单复制机制提供更高的容错度的ECC编码来生成新的带纠错功能的数据块,再分布到根据各存储节点运行时的状态和出错的概率动态挑选出的存储节点冗余组中。这样,在部分存储节点发生错误时,R-ADMAD就可以在运行时分布式地恢复出错的数据。