RAID5是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 以四个硬盘组成的RAID 5为例,RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。

     当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

     RAID5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。

     同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低。

     171820686.jpg


172914871.jpg

RAID5校验位算法原理
P=D1 xor D2 xor D3 … xor Dn (D1,D2,D3 … Dn为数据块,P为校验,xor为异或运算)
XOR(Exclusive OR)的校验原理如下表:
A值
B值
Xor结果
0
0
0
1
0
1
0
1
1
1
1
0
这里的A与B值就代表了两个位,从中可以发现,A与B一样时,XOR结果为0,A与B不一样时,XOR结果就是1,而且知道XOR结果和A与B中的任何一个数值,就可以反推出另一个数值。比如A为1,XOR结果为1,那么B肯定为0,如果XOR结果为0,那么B肯定为1。这就是XOR编码与校验的基本原理。


创建raid 5

[root@mail ~]# mdadm -C /dev/md5 -a yes -l 5 -n 4   /dev/sd
sda   sda2  sdb   sdc   sdd   sde   sdf   sdg   
sda1  sda3  sdb1  sdc1  sdd1  sde1  sdf1  sdg1  
[root@mail ~]# mdadm -C /dev/md5 -a yes -l 5 -n 4   /dev/sd[b,c,d,e]1 --chunk 64
mdadm: /dev/sdb1 appears to contain an ext2fs file system
   size=20964608K  mtime=Thu Jun 13 14:32:01 2013
mdadm: /dev/sdb1 appears to be part of a raid array:
   level=raid0 devices=2 ctime=Thu Jun 13 14:20:48 2013
mdadm: /dev/sdc1 appears to be part of a raid array:
   level=raid0 devices=2 ctime=Thu Jun 13 14:20:48 2013
mdadm: /dev/sdd1 appears to contain an ext2fs file system
   size=1044096K  mtime=Thu Jun 13 15:15:45 2013
mdadm: /dev/sdd1 appears to be part of a raid array:
   level=raid1 devices=2 ctime=Thu Jun 13 14:51:54 2013
mdadm: /dev/sde1 appears to contain an ext2fs file system
   size=1044096K  mtime=Thu Jun 13 15:15:45 2013
mdadm: /dev/sde1 appears to be part of a raid array:
   level=raid1 devices=2 ctime=Thu Jun 13 14:51:54 2013
mdadm: largest drive (/dev/sdb1) exceed size (1044096K) by more than 1%
Continue creating array? yes
mdadm: array /dev/md5 started.

[root@mail ~]# mkfs.ext3 /dev/md5

[root@mail ~]# mdadm -C /dev/md5

   RAID的保存原理是用Bit Striping及当前主流Block Striping的分割方式,将Data分散保存至各硬盘中,当硬盘有受损时则经由XOR运算,再将存在其他各硬盘内的Parity Blocks及Data Stripe磁区的Data Blocks进行计算而重建资料Rebuild。