原文地址:http://www.loveunix.net/thread-94355-1-1.html
RAID -5 算法详解
过年了,业务相对较少,整天在办公室没什么事,突然就想起了raid 5,便有研究的冲动,以下是我对raid 5的理解
首先我们知道,硬盘物理上都是以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是不会专门用一个硬盘来放校验结果数据的。而是几个硬盘轮流来充当校验结果的角色。
呵呵,希望大家多加指正和补充。