一日一省linux:raid-5算法详解

来源:互联网 发布:做个网络回路 编辑:程序博客网 时间:2024/06/02 03:20

RAID -5 算法详解


什么是Striping(条带化)?
                 条带化是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中不同磁盘上的方法。此技术非常有用,它比单个磁盘所能提供的读写速度要快的多,当数据从第一个磁盘上传输完后,第二个磁盘就能确定下一段数据。数据条带化正在一些现代数据库和某些RAID硬件设备中得到广泛应用。

 

首先我们知道,硬盘物理上都是以0和1来存放数据,它并不认识什么AIX、oracle之类的,在raid 5的世界里,只有0和1。

现假设有四块硬盘做raid-5,其中,硬盘一、二、三是专门存放数据的,硬盘四是存放校验码。如下:
(raid 5 是以条带化来存放数据的。如,有一个数据包是110(下面的条带一),它将会分布在各个硬盘上。)
硬盘
条带一
条带二
条带三
条带四
条带五
条带六
条带七
条带八

硬盘一
1
1
0
0
0
1
1
0

硬盘二
1
0
1
1
0
0
1
0

硬盘三
0
1
0
1
1
0
1
0

结果(硬盘四)
0
0
1
0
1
11
0


当有一个数据包110要存放到raid 5里时,控制器便会算出校验码(也就是硬盘四的结果)。
硬盘四算出的方法是:
硬盘四=硬盘一 XOR 硬盘二 XOR 硬盘三
硬盘四= 1 XOR 1 XOR 0 =0
因此,控制器先将110存放到前面硬盘一、二、三里,然后,再把算出的结果存放到硬盘四里。
XOR算法(异或算法)说明:
1 XOR 1=0
1 XOR 0=1
数的运算结果与数的运算次序无关。如1 XOR 0 = 0 XOR 1

如上所示,现假设硬盘一失效,现在要算出条带一上硬盘一的数据,如下:
公式:硬盘一=硬盘二 XOR硬盘三 XOR硬盘四
代入数字:硬盘一= 1 XOR 0 XOR 0 = 1
因此,可用此方法算出硬盘一上的数据。

当更换了硬盘一时,控制器将根据这个算法,利用其它的硬盘,算出硬盘一的数据,进行数据恢复。

以此类推,可以保证,任何一个硬盘损坏了,都可以通过这样的算法,算出其上面的数据。

所以raid 5最少要三块盘,最少两个硬盘进行异或运算,一个硬盘存放运算结果,可用空间为N-1个硬盘空间(N为硬盘总数)。

 

 

以上只是为了方便说明,真正的raid 5是不会专门用一个硬盘来放校验结果数据的。而是几个硬盘轮流来充当校验结果的角色。 实话!!!