存储技巧:擦除码是RAID 6阵列的基础

你将学到的:RAID 6正在迅速成为现代存储系统的一个标准部件,几乎每个大中型阵列都增加了这个功能。我们来告诉你为什么RAID 6中的擦除码使得当今的高容量磁盘可以被使用,而且使其不用担心无法恢复读错误引起数据丢失。

数据存储行业依靠一些基本的技术已经超过30年了,而这里面最重要的就是独立磁盘冗余阵列(RAID)的概念。然而传统RAID所依托的数学原理正在被替换,以应对磁盘容量的增加和更高灵活性的需求。这就意味着,从RAID 6到云存储的先进的存储系统,都在使用擦除码而不是传统的校验码。

很多早期的RAID系统只是简单地在两个独立的磁盘驱动器之间镜像数据。这被称作RAID 1系统,它容易实现,不需要高级的计算并可能很简单地加速读性能。

不过,在容量方面RAID 1就不是很有效率了。结果就是类似RAID 5的基于校验的方案流行了起来。这些系统对数据做简单的奇偶计算,提供跨多个磁盘驱动器的冗余而没有RAID 1那么大的开销。虽然进行一个简单的奇偶校验计算引入了开销并减慢了写操作,不过这通过使用专门的硬件和DRAM缓存可以很容易地克服。

一个有关RAID的常见误解是它能够保证数据的完整性。尽管RAID可以保证数据在一个磁盘失效时恢复,但镜像和校验不能检测到更小的不可恢复读错误。物理硬盘驱动器通过一系列的机制来提高读写操作的可靠性。其中一个最重要的就是常见的可以检测到单个比特错误而强制磁盘重试读数据的循环冗余校验(CRC)。

厂家们预计传统硬盘是很可靠的,在大约12TB的读取中只会有一个比特的错误。这在磁盘驱动器的容量还在以MB或者GB计算的时候是令人放心的,但是今天的上TB驱动器使得不可恢复读错误(URE)的可能性高到不能接受的程度。

擦除码可以增加可靠性

这就是我们需要擦除码和RAID 6的原因。很久以前,数学家开发了在数据流中发现错误的算法,有些算法甚至能够在发现一个或者多个错误的时候恢复原始数据。这些计算对早期的RAID控制器来说太过复杂了,但是今天的微处理器技术使得它们不再高不可攀。很多这样的高级数据保护系统基于一类叫做擦除码的算法。

擦除码工作原理

擦除码算法听起来复杂,其实很容易理解。设想你的电话号码是123-4567.由于数字是线性的会很好记。也由于它是线性的一组数字,你可以告诉别人从1开始逐个拨数字直到7.这使得他们在拨错数字的时候可以很容易地发现。

擦除码建立了一个数学方程来描述一组数字,以保证可以检查准确性并在一个数字丢失的时候可以恢复。这也称作多项式插值,或者过采样,这是擦除码背后的关键概念,尽管其中用的算法比我们的电话号码的例子要复杂,但基本的想法是一样的。

在数据存储中使用擦除码的时候,我们可以额外存储几个比特,从而使得一个存储系统比传统的校验方案更可靠。当然,RAID 6不是一个标准的技术,实际上多数的实现都采用了标准的RAID 5校验比特,和额外的Reed-Solomon码来提高可靠性。这个结合使得一个RAID 6的阵列可以抵御多个磁盘同时失效,或者发生一个无法恢复的读错误。 由于这种能力,RAID 6比RAID 5更加可靠。更重要的是,RAID 6阵列允许使用今天的高容量磁盘,而不用担心一个无法恢复的读错误引起数据丢失。

类似擦除码的技术还被用来使蓝光碟片更能抵御划伤,并使得DSL和WiMax数据传输更可靠。擦除码也被用于很多的对象和云存储系统中,把数据分散存储在多个地点。擦除码能够在不可靠的数据源中恢复数据的能力使得他在很多现代的系统中极具价值。

RAID 6成为现代存储系统的标准部件

随着磁盘驱动器的增长,RAID 6正变得越来越重要。随着希捷在最近发布3TB硬盘驱动器,我们现在已经到了一个典型的4或5块磁盘的RAID 5组会在它的生命周期中遇到一次不可恢复读错误的时候。由于RAID 5不能从这样的错误中恢复,对于使用这么大容量的磁盘的RAID组,RAID 6已经成为必须采用的了。而仍在使用RAID 5的系统应该包括高级的技术,例如写时校验和数据擦洗( data scrubbing )来降低数据丢失的风险。

可喜的是,普通的用户不用担心读错误和数据丢失的黯淡前景。存储厂家在最近几年里一直在增加提高一致性的功能,而几乎所有企业的数据都有备份、复制或者快照技术来保护。RAID 6也正在迅速成为现代存储系统的标准部件,几乎所有大中型阵列都增加了这个功能。处理器技术的进步使得RAID 6可能会及时延伸到所有的领域来避免灾难的发生。