这两天成功申请了博客专栏,为这个专栏的申请,凑了一篇简单梳理RAID算法,也说到之后再写些更多有关RAID的东西,至于专栏的第一篇文章正在整理当中。其实,关于RAID的文章挺多的,但大多是源码分析,对于RAID的空间布局基本都是一图带过。在刚接触RAID的时候,对其在理解上总觉得差点什么,也许是数学情怀作祟,想想要是这个空间布局能用数学公式抽象表示出来,像RAID算法一样,那就完美了?那么就开始,先来一张图片:

图1
图形基础分析
RIAD阵列空间分析主要以raid5为例,对于一个有冗余数据保护功能的阵列来说,数据分为原数据及校验数据如图1中raid5构成。而用户看到的可视阵列mddev设备容量仅为原数据总量,如图2示,假设阵列无最小容量限制,默认raid5配置,可知:mddev=28*chunk=28*512k=0xE0000=14M。
如图1,raid5表示为原数据加校验数据,如此为进一步探究raid5相关结构数量及映射关系,第j块chunk块所属x数据磁盘使用二维数组可以表示为d[x][j],同理校验块数据表示为pd[y][i]。若raid5数据块分布算法采用左非对称算法-LEFT_ASYMMETRIC,图1示,可知原数据第a块chunk块至第y块chunk块中,两两之间存在等差为1的关系:a+1=b,b+1=c、c+1=d,依次类推。可根据其数量关系得:a=4、b=5、c=6依次叠加,即a-y分别对应4-27。如图2示为raid数据块分布采用默认左对称算法- LEFT_SYMMETRIC时结构,计算基于默认结构。
如图6,可知raid5实际条带数据处理单元为stripe_head,而实际阵列单盘处