这些文章已经写了好几年了,可能已经过时了。在MSN space和QQzone几经辗转之后,我想也许这些技术文章还是放在搞技术的博客中更能帮助人。于是做了一个艰难的决定,把这些文章一篇篇搬过来!绝对是原创的。
最近一段时间又重新接触了RAID,这次是关于RAID5 Write Hole的问题。这里把我对这个问题的理解描述一下。
Write Hole是RAID5的一个重大缺陷,这个问题在我以前的日志中已经提到过,但是只是作为解释代码的引子,而没有强调它的重要性。要了解这个问题,首先要对RAID5的rcw和rmw有一定了解。我以前的文章(RAID-5(五)rmw与rcw )已经解释过这些动作。为了方便说明,假设有一个5个盘的RAID5(为什么是5个盘?因为rmw)。
我们知道在RAID5的一个IN_SYNC的stripe中,必须满足D1+D2+D3+D4+P=0,这样任何一个数据Dx才能由其他数据和P计算出来。但是在Power failure的情况下会使得D1+D2+D3+D4+P!=0。为什么呢?假设这样一种情况:我们要写D1',那么新的P'都会写到disk上,然而不幸的是在还没写完呢就停电了。这时候可能出现的情况D1和P就会变成未知数据X和Y。X当然有可能是D1也有可能是D1',更可能是D1和D1'的混合物,Y也是如此。总而言之,X+D2+D3+D4+Y = 0成立的可能性不大。这种情况我这里都统一叫Parity损坏。

RAID5的Write Hole问题可能导致数据丢失,尤其是在电源故障后。当更新数据D1并写入新校验位P'时,如未完成即断电,旧数据与新数据的组合可能无法保持原有的校验平衡,导致Parity损坏。健康的RAID5可以通过resync修复,但降级的RAID5一旦发生Write Hole,数据恢复几乎不可能。RAID6虽然有更高的容错性,但在降级状态下也可能面临类似问题。解决Write Hole通常需要外部辅助或采用其他存储方案。
最低0.47元/天 解锁文章
2856





