RAID5初始化方法及写方式

目前使用的初始化方法
目前RAID5的初始化主要有两种方法,一种是标示为resync的全同步;另一种方法是标示为recovery的数据恢复。
所谓resync,就是进行全阵列磁盘同步,从头到尾按条带读取所有磁盘的数据,计算新的校验值并与原来的校验值相比较,如果相同则直接进入下一个条带的操作,如果不同则需要把新计算的校验数据写到校验磁盘上。
所谓recovery,就是恢复失效盘的数据。磁盘阵列中的单个磁盘是有可能失效的,这时磁盘阵列会将失效磁盘从阵列中剔除,那么对于那些有数据恢复能力的RAID阵列,如RAID-1456,我们就能够通过加入热备盘恢复失效盘上的数据,recovery就是从头到尾恢复数据的过程。recovery完成之后热备盘就会成为正式的成员盘取代原来的失效盘。Recovery原本用于失效磁盘的数据恢复,但也可以用于刚创建的RAID,在刚创建的时候,把最后一块盘设置为热备盘,该磁盘的数据通过读取其它磁盘的数据校验得出,这样下来,也会保证各个条带的数据一致性。
RAID5的两种写方式
在提出新方法之前,先讨论下RAID5 的两种写方式:读改写和重构写。读改写的实现方式是先将所需写入的数据保存到内存,同时读取所需要写入位置的旧数据及校验盘上的数据,然后将新数据、旧数据和老校验数据进行校验运算,得出新校验数据,最后将新数据与新校验值写入磁盘。
以6块盘的RAID5为例,假设要写D1数据块,而所在条带别的数据块没有写请求,则需要读取旧的D1数据,和旧的校验数据P0,再和新的数据NEW D1做异或校验计算,得到新的校验NEW P0,再把NEW D1和NEW P0写到对应的磁盘。
所谓重构式写,就是预读没有写请求的磁盘的数据,而将写请求磁盘的bio中的数据拷贝到磁盘缓冲区,然后用这些数据来重构新的校验结果。之后,就将新修改的数据和新校验结果写入下层设备即可。
仍以6块盘的RAID5为例,假设要写D1,D2,D3的数据块,则需要读D4,D5数据,再和新的数据NEW D1,NEW D2,NEW D3做异或校验计算,得到新的校验NEW P0,再把NEW D1,NEW D2,NEW D3和NEW P0写到对应的磁盘。