随着电子产品的发展,电脑和手机的普及,很多有用的东西都不再写下来而是存储在电子产品中,因此人们的数据越来越重要,工作学习资料,照片视频,聊天沟通记录等等。

部分人的数据并不多丢失了也不要紧,或者可以用移动硬盘备份和网盘备份。但是越来越多的人因工作或者兴趣原因,有着大量的重要的数据,这样还用移动硬盘或网盘并不方便,于是用于企业的RAID方案开始进入了普通消费者群体。

RAID是什么?很多人对RAID的概念就是如果有一个硬盘坏了,数据不会丢失。真的是这样么?是不是就这么简单呢?

首先,我们先简单了解一下RAID。RAID(Redundant Array of Independent Disks),独立冗余磁盘阵列(历史原因,以前叫Redundant Array of Inexpensive Disks,廉价冗余磁盘阵列,主要是现在的硬盘价格的平民化),是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。

因此RAID具有:大容量、高性能、可靠性、可管理的特性,而优劣的关键指标是:提高数据可靠性和 I/O 性能。

RAID 中主要有三个关键概念和技术:

1、镜像

  镜像是一种冗余技术,为磁盘提供保护功能,防止磁盘发生故障而造成数据丢失。对于 RAID 而言,采用镜像技术 典型地 将会同时在阵列中产生两个完全相同的数据副本,分布在两个不同的磁盘驱动器组上。镜像提供了完全的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可正常访问另一副本,不会对应用系统运行和性能产生影响。而且,镜像不需要额外的计算和校验,故障修复非常快,直接复制即可。镜像技术可以从多个副本进行并发读取数据,提供更高的读 I/O 性能,但不能并行写数据,写多个副本会会导致一定的 I/O 性能降低。

  镜像技术提供了非常高的数据安全性,但价也是非常昂贵的,需要至少双倍的存储空间。高成本限制了镜像的广泛应用,主要应用于至关重要的数据保护,这种场合下数据丢失会造成巨大的损失。另外,镜像通过“ 拆分 ”能获得特定时间点的上数据快照,从而可以实现一种备份窗口几乎为零的数据备份技术。

2、数据条带

  磁盘存储的性能瓶颈在于磁头寻道定位,它是一种慢速机械运动,无法与高速的 CPU 匹配。再者,单个磁盘驱动器性能存在物理极限, I/O 性能非常有限。 RAID 由多块磁盘组成,数据条带技术将数据以块的方式分布存储在多个磁盘中,从而可以对数据进行并发处理。这样写入和读取数据就可以在多个磁盘上同时进行,并发产生非常高的聚合 I/O ,有效提高了整体 I/O 性能,而且具有良好的线性扩展性。这对大容量数据尤其显著,如果不分块,数据只能按顺序存储在磁盘阵列的磁盘上,需要时再按顺序读取。而通过条带技术,可获得数倍与顺序访问的性能提升。

  数据条带技术的分块大小选择非常关键。条带粒度可以是一个字节至几 KB 大小,分块越小,并行处理能力就越强,数据存取速度就越高,但同时就会增加块存取的随机性和块寻址时间。实际应用中,要根据数据特征和需求来选择合适的分块大小,在数据存取随机性和并发处理能力之间进行平衡,以争取尽可能高的整体性能。数据条带是基于提高 I/O 性能而提出的,也就是说它只关注性能, 而对数据可靠性、可用性没有任何改善。实际上,其中任何一个数据条带损坏都会导致整个数据不可用,采用数据条带技术反而增加了数据发生丢失的概念率。

3、数据校验

  镜像具有高安全性、高读性能,但冗余开销太昂贵。数据条带通过并发性来大幅提高性能,然而对数据安全性、可靠性未作考虑。数据校验是一种冗余技术,它用校验数据来提供数据的安全,可以检测数据错误,并在能力允许的前提下进行数据重构。相对镜像,数据校验大幅缩减了冗余开销,用较小的代价换取了极佳的数据完整性和可靠性。数据条带技术提供高性能,数据校验提供数据安全性, RAID 不同等级往往同时结合使用这两种技术。

  采用数据校验时, RAID 要在写入数据同时进行校验计算,并将得到的校验数据存储在 RAID 成员磁盘中。校验数据可以集中保存在某个磁盘或分散存储在多个不同磁盘中,甚至校验数据也可以分块,不同 RAID 等级实现各不相同。当其中一部分数据出错时,就可以对剩余数据和校验数据进行反校验计算重建丢失的数据。校验技术相对于镜像技术的优势在于节省大量开销,但由于每次数据读写都要进行大量的校验运算,对计算机的运算速度要求很高,必须使用硬件 RAID 控制器。在数据重建恢复方面,检验技术比镜像技术复杂得多且慢得多。

RAID分若干个级别:常见的有0、1、5、6。以及多个RAID再组成一个新的RAID,根据组合的不同,常见的有10、01、50和60(分别是多个RAID1/5/6再用RAID0的方式组成一个新的)

RAID 0是一种简单的、无数据校验的数据条带化技术:需要2个以上硬盘,可以更多。一份数据按照一定大小拆开,平均分散存储在组成RAID 0的各个磁盘上,又称条带。容量是单个硬盘的N倍,持续读写速度也是单个硬盘的N倍。数据安全方面,如果一个硬盘坏了,整个阵列上的数据都会丢失。

raid概念和应用(你的数据有多安全)(1)

RAID 1称为镜像,它将数据完全一致地分别写到工作磁盘和镜像 磁盘,它的磁盘空间利用率为 50%:通常只有两个硬盘,一份数据同时存储在两个硬盘上。容量和单个硬盘一样,写入性能和单个硬盘一样,读取性能是单个硬盘的两倍。数据安全方面,如果一个硬盘坏了,另外一个硬盘可以正常使用;用新硬盘替换掉旧硬盘可以重建RAID1。

raid概念和应用(你的数据有多安全)(2)

RAID 5是目前最常见的 RAID 等级,对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上:需要3个以上硬盘,可以更多。一份数据按照一定大小拆开,并且按照特定的算法,每N-1份数据计算一份校验数据,拆分的数据和校验数据平均分散存储在组成RAID 5的各个磁盘上。容量是单个硬盘的N-1倍,持续读取速度是单个硬盘的N-1倍,持续写入速度要看RAID控制器的性能和写入策略,理论上最高写入速度可以达到单个硬盘的N-1倍。数据安全方面,如果一个硬盘坏了,阵列会降级为RAID0运行;用新硬盘替换旧硬盘可以重建RAID5。

raid概念和应用(你的数据有多安全)(3)

RAID 6双重校验:和RAID5类似,但多生成一份校验数据,也就比同等配置的RAID5多需要一块硬盘,而容量性能不变。如果一块硬盘坏了会降级为RAID5,两块硬盘坏了降级为RAID0。RAID6 很少得到个人青睐,主要用于对数据安全等级要求非常高的企业场合。它一般是替代 RAID10 方案的经济性选择。

raid概念和应用(你的数据有多安全)(4)

组合RAID:RAID10是先做镜象,然后再做条带。 RAID01则是先做条带,然后再做镜象。

raid概念和应用(你的数据有多安全)(5)

从数据存储的逻辑位置来看,在正常的情况下RAID01和RAID10是完全一样的,而且每一个读写操作所产生的IO数量也是一样的,所以在读写性能上两者没什么区别。而当有磁盘出现故障时,RAID10的读性能将优于RAID01,所以综合来说RAID10要优于RAID01。

从实现角度来看: RAID 主要分为软 RAID、硬 RAID 以及软硬混合 RAID 三种。

软 RAID 所有功能均有操作系统和 CPU 来完成,没有独立的 RAID 控制 / 处理芯片和 I/O 处理芯片,效率最低。

硬 RAID 配备了专门的 RAID 控制 / 处理芯片和 I/O 处理芯片以及阵列缓冲,不占用 CPU 资源,但成本很高。

软硬混合 RAID 具备 RAID 控制 / 处理芯片,但缺乏 I/O 处理芯片,需要 CPU 和驱动程序来完成,性能和成本 在软 RAID 和硬 RAID 之间。

RAID5重建失败率分析

上面说了,RAID5允许一块硬盘失效,失效后可以替换一块新硬盘重建RAID5,然而这只是理论上的情况。这里需要引入2个概念:URE、MTBF

BRE(bit error rate),现在各家硬盘厂商的Datasheet中通常叫URE(Nonrecoverable Read Errors,不可恢复读取错误),也就是“写入硬盘的数据,在读取时遇到不可修复的读错误的概率”。

例如:酷鱼、铁狼(4TB及以下型号):1/10e-4

我们知道,BER便宜的SATA硬盘要比昂贵的SAS硬盘的误码率(BER)要高得多,具体区别在于:遇到读取不过去,或者写入不过去的坏道时,家用硬盘会花费1分钟以上的时间去尝试纠正错误,纠正不了就直接用备用扇区代替,这个时间超过阵列控制器能容忍的限度,所以遇到这种情况直接掉盘;企业级的磁盘会把这项工作放在后台进行,不需要停顿1分钟左右的时间,从而不影响阵列运行。在BER 硬盘误码率上没有任何区别。

如示例测算:

每读取1bit数据,有一百万亿(1后面14个零)分之一的概率出现不可恢复的错误。磁盘读取错误产生的原因很多,磁盘盘片上的磁性单元失效,电路问题,宇宙射线,磁盘震动都有可能导致读取错误,不过每个磁盘扇区都有一段CRC数据可以用来纠错。然而纠错机制只能在一定范围内生效,单个扇区发生的错误多了就无法纠正了,这时就产生URE了。从数字上来看,这个概率还是很小的,然而当单个硬盘容量达到1TB,也就是10e12字节,8*10e12bit的时候,这就不是一个可以忽略的数字了。

因此,RAID 5中的驱动器发生故障,则剩余的每个硬盘都必须从头到尾“完美”的读取一遍,否则将会导致数据丢失。使用7 1个1 TB容量硬盘,这意味着必须读取7 TB。1/10e-14的误码率为意味着有44%的概率无法做到(“完美”读取7TB数据)

MTBF(Mean Time Between Failure),即平均无故障工作时间,产品在总的使用阶段累计工作时间与故障次数的比值为MTBF。

例如:WD Caviar RE2 7200 RPM 硬盘,MTBF 高达 120万小时,保修 5年。120万小时约为137年,并不是说该种硬盘每只均能工作137年不出故障。由MTBF=1/λ可知λ=1/MTBF=1/137年,即该硬盘平均年(1障率约为0.7%(λ,一年内,平均1000只硬盘有7只会出故障。

从数学角度说,每个磁盘的平均无故障时间 (MTBF) 大约为 50 万至 150 万小时(也就是每 50~150 年发生一次硬盘损坏)。实际往往不能达到这种理想的情况,在大多数散热和机械条件下,都会造成硬盘正常工作的时间大幅减少。考虑到每个磁盘的寿命不同,阵列中的任何磁盘都可能出现问题,从统计学角度说,阵列中 N 个磁盘发生故障的机率比单个磁盘发生故障的机率要大 N 倍。结合上述因素,如果阵列中的磁盘数量合理,且这些磁盘的平均无故障时间 (MTBF) 较短,那么在磁盘阵列的预期使用寿命过程中,就很有可能发生磁盘故障(比方说每几个月或每隔几年就会发生一次故障)。

两块磁盘同时损坏的几率有多大呢(“同时”就是指一块磁盘尚未完全修复时另一块磁盘也坏掉了)?如果说 RAID 5 阵列的MTBF相当于MTBF^2,那么这种几率为每隔10^15个小时发生一次(也就是1万多年才出现一次),因此不管工作条件如何,发生这种情况的概率是极低的。从数学理论角度来说,是有这种概率,但在现实情况中我们并不用考虑这一问题。不过有时却是会发生两块磁盘同时损坏的情况,我们不能完全忽略这种可能性,但两块磁盘同时损坏的原因与MTBF基本没有任何关系。

但实际中5年内硬盘的最高年平均故障率为8.6%(估算按10%),如果考虑到RAID 5重建过程中还有其它IO应用,或者RAID卡重建性能较差,导致重建速度降低,假设平均写入速度只有20MB/s,则重建时间约为14小时,重建过程中出现第二个硬盘故障的概率为0.11%也就是大概每1000次重建可能出现1次第二个硬盘故障,在一个部署了上万硬盘并且均组成RAID5阵列的数据中心中,几乎每年都会发生一例。

RAID的不解之谜

对比上面分析,重建过程中第二块硬盘出现故障导致重建失败的概率,8个1TB硬盘低速重建也不过0.11%,但因为URE导致重建失败的概率则是高达约44%。如果有热备盘(RAID6或RAID1),其意义在于RAID卡/驱动发现单个硬盘故障的时候,可以马上进入重建过程。假设没有热备盘,需要24小时后才能开始重建,按照前面的计算,8个1TB硬盘组成的RAID 5的重建时间从14小时延长到38小时,这个期间第二块硬盘发生故障的概率约为0.30%,和发生URE导致重建失败的42.85%相比,几乎可以忽略了。

因此,当前大容量硬盘组成的RAID5重建失败,并非是两个硬盘同时坏导致的(不过从另一个角度来说,可以认为一个硬盘坏的时候,另外一个硬盘已经存在隐患,全盘读取会导致隐患暴露)。

值得安慰的是,发生URE导致重建失败,并非意味着全部数据丢失,数据基本上都还在是可以恢复的,只是根据不同的RAID实现方案,可能需要不同的恢复方案(麻烦 专业)。但是又因为URE的存在,这两种方案都可能会丢失一个或多个文件。严重的话,丢失文件系统结构的元数据(Metadata),会导致文件系统崩溃,只能通过数据恢复软件对整个阵列进行全盘扫描来恢复,这样恢复的成功率就很低了。好在通常元数据很小,发生这种情况的概率也很低。

所以:作为RAID 5的替代方案

1、经济条件允许的,采购支持RAID 6的卡,多牺牲一块硬盘的容量组建RAID 6。

2、DIY NAS的,使用支持ZFS的操作系统,多牺牲一块硬盘容量组RAID Z2。

3、使用成品NAS的,牺牲一块硬盘容量组RAID 10(四盘位)或者RAID 6(5盘位及以上)

4、玩不转Linux/BSD/Solaris的,又不需要阵列的持续性能的,用SnapRAID 计划任务。想安全的话,多牺牲一块硬盘组双校验盘的SnapRAID,等效RAID 6;经济原因或者机箱位置不够的,组单校验盘的SnapRAID也可以,因为SnapRAID是基于文件生成校验数据,即使碰到URE也只会丢失单个文件。

最后:RAID不是备份,重要数据,请做好备份。

,