RAID5中的“左、右循环”与“同步、异步”(1)

简介:
本文摘于《数据重现--文件系统原理精解与数据恢复最佳实践》转载请注明出处
RAID5是目前应用最为广泛的阵列类型,它的原理就是在同一个条带内用一个数据块大小的空间存放同条带内其他数据块相互异或计算的结果,也就是奇偶校验位P。假设RAIDn块磁盘组成,使PD0 XOR D1 XOR D2...XOR Dn-2。当其中一块磁盘驱动器失效时,可以由剩下的n-1块磁盘中的数据及校验重新计算出失效磁盘上的数据内容,从而保证了在一块磁盘驱动器失效情况下的数据安全性。
以四块磁盘组成的RAID5为例,由于RAID的成员盘为4块,所以每个条带内有三个数据块和一个校验块。以0号条带为例,数据块为D0D1D2,校验块为P0,则:
P0 = D0 XOR D1 XOR D2
如果0号磁盘失效,也就是D0丢失,则通过D1D2P0三者之间进行异或就可以将它重新计算出来,即:
D0 = D1 XOR D2 XOR P0
同样,D1D2丢失时也可以使用校验数据和其余的数据计算得到。这就是RAID5允许一块磁盘失效而不会影响数据安全性的原理所在。
RAID5中,因校验块的循环方向、数据块的排列方式不同而存在几种不同的阵列布局。下面将向大家介绍RAID5的校验循环方向和数据的同步异步。

1.     左循环和右循环

所谓“循环方向”,是指 RAID 中的校验块的走向,一种是左循环,一种是右循环。
u   左循环
以四块磁盘组成的 RAID5 为例,左循环即阵列的条带 0 的校验块位于阵列最后一个磁盘(即 3 号盘)的 0 号块,条带 1 的校验块位于倒数第二个磁盘(即 2 号盘)的 1 号块,条带 2 的校验块位于第三块磁盘(即 1 号盘)的 2 号块,条带 3 的校验块位于磁盘 0 3 号块,这时即完成一个整循环,再回至 3 号盘的的 4 号块 ,类似由右向左旋转而下(如表 8.5 所示),因此称为左循环,也称为左旋转,有的软件中可能会称为“ backward ”。
8.5  左循环
 
磁盘 0
磁盘 1
磁盘 2
磁盘 3
条带 0
 
 
 
0P
条带 1
 
 
P1
 
条带 2
 
P2
 
 
条带 3
P3
 
 
 
条带 4
 
 
 
P4
条带 5
 
 
P5
 
.
.
.
.
.
.
.
.
.
.
u   右循环
仍以四块磁盘组成的 RAID5 为例。通常情况下,右循环即条带 0 的校验块位于 0 号盘,条带 1 的校验块位于 1 号盘,条带 2 的校验块位于 2 号盘,条带 3 的校验块位于 3 号盘,这时完成一个整循环,下一个校验又回至 0 号盘 ,类似于由左向右旋转而下(如表 8.6 所示),因此称为右循环,也称为右旋转,有的软件中可能称为“ forward ”。
8.6   右循环
 
磁盘 0
磁盘 1
磁盘 2
磁盘 3
条带 0
P0
 
 
 
条带 1
 
P1
 
 
条带 2
 
 
P2
 
条带 3
 
 
 
P3
条带 4
P4
 
 
 
条带 5
 
P5
 
 
.
.
.
.
.
.
.
.
.
.
 
提示:还有一种情况,即阵列的第一个校验块并不是位于 0 号盘,而是位于其他的磁盘上(如表 8.7 所示)。当然,这种情况并不多见。而且除了第一个校验块起始位置不同外,其他方面并没有任何特异之处。所以在此我们只讨论常规情况,对于这种特殊情况,读者可以自行研究。
8.7  非常规循环方式
 
磁盘 0
磁盘 1
磁盘 2
磁盘 3
条带 0
 
 
 
P0
条带 1
P1
 
 
 
条带 2
 
P2
 
 
条带 3
 
 
P3
 
条带 4
 
 
 
P4
条带 5
P5
 
 
 
条带 6
 
P6
 
 
.
.
.
.
.
.
.
.
.
.




















本文转自老骥伏枥51CTO博客,原文链接: http://blog.51cto.com/sjhfml/132501 ,如需转载请自行联系原作者

相关文章
|
7月前
|
算法 C语言
【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法【上】
文章目录 一、二叉数的结构体 二、构建二叉树,供后续测试使用 三、二叉树销毁 四、构建节点 五、二叉树的高度: 1.代码: 2.测试结果: 二叉树节点个数 1.代码: 2.测试结果:
|
7月前
|
算法 DataX C语言
【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法【下】
六、二叉树叶子节点个数 1.代码: 2.测试结果: 七、二叉树第k层节点个数 1.代码: 2.测试结果: 八、二叉树查找值为x的节点 1.代码: 2.测试结果: 九、判断二叉树是否是完全二叉树 1.代码: 2.测试结果: 十、补充:队列代码 Queue.h Queue.c
|
3月前
顺序排号
顺序排号。
22 5
|
4月前
|
算法
关于二叉树的操作,详细操作与实现方法
关于二叉树的操作,详细操作与实现方法
28 0
|
4月前
leetcode-352:将数据流变为多个不相交区间
leetcode-352:将数据流变为多个不相交区间
18 0
|
5月前
|
算法 测试技术 C#
C++二分查找算法的应用:将数据流变为多个不相交区间
C++二分查找算法的应用:将数据流变为多个不相交区间
|
6月前
链表中的节点每k个一组翻转
链表中的节点每k个一组翻转
24 0
|
8月前
|
前端开发
记一个异步循环遍历的问题
记一个异步循环遍历的问题
24 0
|
11月前
|
C++
【C++】AVL树的插入实现(详解旋转机制)
【C++】AVL树的插入实现(详解旋转机制)
80 0
|
算法 Java
填充每个节点的下一个右侧节点指针(java算法)
填充每个节点的下一个右侧节点指针(java算法)
56 0
填充每个节点的下一个右侧节点指针(java算法)