当前位置:文档之家› RAID5磁盘阵列数据存储内幕

RAID5磁盘阵列数据存储内幕

RAID5磁盘阵列数据存储内幕
By lixiangjing on 26 9月2012
RAID 5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上。

这样,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。

硬盘的利用率为n-1。

如果挂掉两个盘,数据就玩完了。

从数学角度说,每个磁盘的平均无故障时间(MTBF)大约为50万至150万小时(也就是每50~150年发生一次硬盘损坏)。

实际往往不能达到这种理想的情况,在大多数散热和机械条件下,都会造成硬盘正常工作的时间大幅减少。

考虑到每个磁盘的寿命不同,阵列中的任何磁盘都可能出现问题,从统计学角度说,阵列中N个磁盘发生故障的机率比单个磁盘发生故障的机率要大N倍。

结合上述因素,如果阵列中的磁盘数量合理,且这些磁盘的平均无故障时间(MTBF) 较短,那么在磁盘阵列的预期使用寿命过程中,就很有可能发生磁盘故障(比方说每几个月或每隔几年就会发生一次故障)。

两块磁盘同时损坏的几率有多大呢(同时就是指一块磁盘尚未完全修复时另一块磁盘也坏掉了)?如果说RAID 5 阵列的MTBF相当于MTBF^2,那么这种几率为每隔10^15个小时发生一次(也就是1万多年才出现一次),因此不管工作条件如何,发生这种情况的概率是极低的。

从数学理论角度来说,是有这种概率,但在现实情况中我们并不用考虑这一问题。

不过有时却是会发生两块磁盘同时损坏的情况,我们不能完全忽略这种可能性,实际两块磁盘同时损坏的原因与MTBF 基本没有任何关系。

对这种情况来说,这里首先要引入一个一般人不常接触到的概念:BER硬盘误码率,英文是BER(Bit Error Rate),是描述硬盘性能的一个非常重要的参数,是衡量硬盘出错可靠性的一个参数。

这个参数代表你写入硬盘的数据,在读取时遇到不可修复的读错误的概率。

从统计角度来说也比较少见,一般来说是指读取多少位后会出现一次读取错误。

对于不同类型的硬盘(以前企业级、服务器、数据中心级硬盘用SCSI/光纤,商用、民用级别是IDE;现在对应的则是SAS/SATA;他们的MRBF(平均无故障时间)是接近的,但是BER便宜的SATA硬盘要比昂贵的SCSI硬盘的误码率(BER)要高得多。

也就是说,出现某个sector无法读取的情况,SATA要比SCSI严重得多。

具体区别在固件上:遇到读取不过去,或者写入不过去的坏道时,家用硬盘会花费1分钟以上的时间去尝试纠正错误,纠正不了就直接用备用扇区代替,这个时间超过阵列控制器能容忍的限度,所以遇到这种情况直接掉盘;企业级的磁盘会把这项工作放在后台进行,不需要停顿1分钟左右的时间,从而不影响阵列运行。

在BER硬盘误码率上没有任何区别。

一个1TB的硬盘,通常你无法读取所有sector的概率达到了56%,因此你用便宜的大容量SATA盘,在出现硬盘故障的情况下重建RAID的希望是:无法实现。

用1TB的SATA硬盘做RAID5的话,当你遇到一个硬盘失效的情况,几乎剩下的两个以上硬盘(RAID5最少组合是3个)铁定会遇到一个硬盘读取错误,从而重建失败。

所以,以前小硬盘做RAID5,基本很少遇到同时挂掉两个盘的情况;现在硬盘大了,出问题的概率也越来越大了。

对于跑RAID的用户,对整个硬盘进行读取的事情经常发生。

即使系统足够和谐,知道不对你报告那些出现在你从不读取的文件中的坏道,但是也只是略过了报告这一步:它还是会找到所有的坏道,56%就来了。

还有所谓的监控专用企业级SATA,其原理就是在固件上做手脚,让硬盘即使遇到写入的数据读取错误,也不管三七二十一直接跳过,不再重试读取(标准硬盘的读取方式是遇到某个扇区CRC错误自动重新再去读,直到读到正确的数据为止)。

这对监控数据来说是理所当然的(大多数监控的硬盘都是在不停地写入,但是很少需要读取),除非遇到出现问题需要重现影像时。

现有的Raid5阵列的磁盘中有未检测到的错误的话,Hot Spare没办法解决。

Hot Spare只能在某个磁盘下线的时候,及时的替换下线的盘进行Raid重建,如果其他磁盘有错误的话,重建还是会可能失败。

解决方法还是要在阵列健康状态下,进行定期或者其他方式的错误检查。

一般的硬件阵列卡,也就是插在主板PCI/PCIX/PCIE/或者主板集成的RAID5,压根就没数据巡检(scrub)功能。

企业级的数据存储,也只有到盘阵级别(比如IBM DS3000/4000/5000,DELL MD3000....etc)才有这类功能,但是你也看不到检查的结果,最多能在日志里看到某个硬盘CRC失败,然后跳红灯掉出来,阵列柜告警通知你换硬盘。

你别想知道这个硬盘到底是彻底挂了呢,还是有读取错误,还是有坏道。

总之两眼一抹黑。

(ZFS上的RAIDZ有数据巡检(scrub)功能)
总结遇到RAID5一次挂掉俩盘的概率:
1.使用越大容量的硬盘做RAID5,遇到BER扇区的概率越大,比如用100G硬盘做
RAID5就比用1TB的安全;
2.使用越多盘数的硬盘做RAID5,遇到BER扇区的概率越大,比如用3个盘做的
RAID5,比6个盘做的RAID5安全;
3.使用越便宜的硬盘做RAID5,遇到BER扇区的概率越大,比如用SCSI/FC/SAS盘
比用IDE/SATA的RAID5安全;
4.RAID5里面存放的数据越多,塞得越满,遇到BER扇区的概率越大,比如存了100G
数据的比存了1TB数据的RAID5安全;(REBUID时只读取存过数据的扇区,某些卡则不管三七二十一要读完整个盘)。

相关主题