很多人遇到过服务器RAID5挂掉,往往掉一个盘后,第二个盘也立刻挂掉。
引用: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),
是描述硬盘性能的一个非常重要的参数
,
是衡量硬盘出错可靠性的一个参数。
这个参数代表你写入硬盘的数据,在读取时遇到
不可修复的读错误的概率。从统计角度来说也比较少见,一般来说是指读取多少位后会出现一次读取错误。
随着硬盘容量增加,驱动器读取数据的误读率就会增加,而硬盘容量暴涨,误码率的比例一直保持相对增加。
一个
1TB
的驱动器是需要更多读取整个驱动器,这是在
RAID
重建期间发生错误的概率会比
300G
驱动器遇到错误的几率大。
那这个错误的几率到底有多大呢?或者说,我们写入多少 GB 数据,才会遇到 1byte 的读取错误呢? 看这篇文章:
http://lenciel.cn/docs/scsi-sata-reliability/
对于不同类型的硬盘(以前企业级、服务器、数据中心级硬盘用 SCSI/ 光纤,商用、民用级别是 IDE ;现在对应的则是 SAS/SATA ;
那这个错误的几率到底有多大呢?或者说,我们写入多少 GB 数据,才会遇到 1byte 的读取错误呢? 看这篇文章:
http://lenciel.cn/docs/scsi-sata-reliability/
对于不同类型的硬盘(以前企业级、服务器、数据中心级硬盘用 SCSI/ 光纤,商用、民用级别是 IDE ;现在对应的则是 SAS/SATA ;
他们的
MRBF
(平均无故障时间)是接近的,但是
BER
便宜的
SATA
硬盘要比昂贵的
SCSI
硬盘的误码率(
BER
)要高得多。
也就是说,出现某个 sector 无法读取的情况, SATA 要比 SCSI 严重得多。 具体区别在固件上:遇到读取不过去,或者写入不过去的坏道时,家用硬盘会花费 1 分钟以上的时间去尝试纠正错误,纠正不了就直接用备用扇区代替,这个时间超过阵列控制器能容忍的限度,所以遇到这种情况直接掉盘;企业级的磁盘会把这项工作放在后台进行,不需要停顿 1 分钟左右的时间,从而不影响阵列运行。在 BER 硬盘误码率上没有任何区别。
也就是说,出现某个 sector 无法读取的情况, SATA 要比 SCSI 严重得多。 具体区别在固件上:遇到读取不过去,或者写入不过去的坏道时,家用硬盘会花费 1 分钟以上的时间去尝试纠正错误,纠正不了就直接用备用扇区代替,这个时间超过阵列控制器能容忍的限度,所以遇到这种情况直接掉盘;企业级的磁盘会把这项工作放在后台进行,不需要停顿 1 分钟左右的时间,从而不影响阵列运行。在 BER 硬盘误码率上没有任何区别。
按照文中的计算,一个
1TB
的硬盘,通常你无法读取所有
sector
的概率达到了
56%
,因此你用便宜的大容量
SATA
盘,在出现硬盘故障的情况下重建
RAID
的希望是:无法实现。
用
1TB
的
SATA
硬盘做
RAID5
的话,当你遇到一个硬盘失效的情况,几乎剩下的两个以上硬盘(
RAID5
最少组合是
3
个)铁定会遇到一个硬盘读取错误,从而重建失败。
所以,以前小硬盘做 RAID5 ,基本很少遇到同时挂掉两个盘的情况;现在硬盘大了,出问题的概率也越来越大了。
所以,以前小硬盘做 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
时只读取存过数据的扇区,某些卡则不管三七二十一要读完整个盘)
RAID1/RAID10
参与重建的只有一个盘
,
与
raid5
所有盘都需要参与重建相比,故障概率降低;
RAID1
某一组磁盘故障,也不需要强制上线的操作,因为数据仍然存在,不需要组
RAID
也能读取,哪怕是换到其他没有
raid
卡的机器上数据仍能读出;而
RAID5
如果不能强制第二个掉下的硬盘上线,你一点东西都读不到。
对于DB来说:做raid 1+0 是最好不过啦!(备份时必不可少的;
当
RAID
处理降级状态时,如重要数据容量不大,建议先做备份,当然这种备份应该是异机的,不可备份至当前已降级的
RAID
中。如果在
REBUILD
当中出现另外硬盘离线的情况导致
RAID
卷
OFFLINE
,切不可重建
RAID
,如确定后离线的硬盘,可通过强制上线恢复数据
(
有些控制器没有选项,就没办法了
)
本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/1006565,如需转载请自行联系原作者