RAID技术


  RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks),它使用很多价格便宜的磁盘组合成为一个磁盘阵列组,使其可以达到数据冗余备份和提升读写速度的作用。

  RAID是分级别的,不同的级别不同之处在于磁盘的组合方式和数据的组织方式不同,故每一种组合方式在可靠性和读写性能上是不一样的,以下是不同的RAID级别的磁盘阵列组织方式。

  RAID 0(条带化)将数据分段写入不同磁盘中,即在每个磁盘中存储一部分数据,读写方式为并行处理,如果磁盘有N块,效率为单个磁盘的N倍,磁盘利用率100%,但是没有数据冗余备份,任何一个磁盘数据损坏会导致整个数据不可用。

  RAID 1(镜像存储):将每个分段数据分别写入两个或者多个磁盘中,这成为镜像存储(mirroring),故拥有数据冗余备份,当其中任何一块盘损坏后,不会导致数据丢失。

  RAID 5(分布式奇偶校验):奇偶校验位的作用在于重建数据,它允许一块磁盘数据损坏,损坏后可以更新新的磁盘进行数据的重建,存储方式如下:

  RAID 6(双分布式奇偶校验):和RAID 5相比,多了一个奇偶校验位,存储方式如下:

  RAID 01:即RAID 0和RAID 1的结合使用,它先做条带(0),后做镜像存储(1)。

  RAID 10:即RAID 1和RAID 0的结合使用,它先做镜像存储(1),后做条带(0)。

  在Linux中,RAID的实现可以通过硬件或者软件实现

  软件RAID实现:软件RAID通过md模块完成,Linux上允许将块设备做成RAID,可以通过mdadm命令来管理,mdadm是一个模式化命令,有创建模式(-C)、管理模式(--add、--del、--fail、--remove..)、监控模式(-F)、增长模式(-G)、装配模式(-A)。

  • mdadm
    • -D | --detail:查询阵列信息
      • --scan:显示RAID信息
      • mdadm -D /dev/md0 查看md0阵列信息
      • mdadm -D --scan >>/etc/mdadm.conf  将阵列信息保存至配置文件
    • -S | --stop:停止阵列
      • mdadm -S /dev/md0 停止md0磁盘阵列
    • 创建模式(-C)
      • -l:级别
      • -n:设备个数
      • -a {yes|no}:自动创建设备文件
      • -c:指定数据块大小
      • -x:指定空闲盘个数
      • /proc/mdstat文件记录了主机的RAID信息
      • mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2} -c 64 :将sdb1和sdb2创建成RAID0,数据块大小为64
    • 管理模式(--add、--del、--fail | -f、--remove | -r..)
      • mdadm /dev/md0 --fail /dev/sdb1  将md0阵列的sdb1磁盘模拟损坏
      • mdadm /dev/md0 --remove /dev/sdb1 将md0阵列的sdb1磁盘移除
      • mdadm /dev/md0 --add /dev/sdb3 将md0阵列中添加sdb3硬盘
    • 装配模式(-A)
      • mdadm -A /dev/md0 /dev/sdb0 /dev/sddb1 将sdb0和sdb1重新装配成md0阵列
      • mdadm -A /dev/md0 读取/etc/mdadm.conf文件进行自动装配

    一览表

-C--create

建立一个新阵列

-r

移除设备

-A

激活磁盘阵列

-l--level=0 1 5 6 10

设定磁盘阵列级别

-D--detail

显示磁盘阵列详细信息

-n--raid-devices

指定磁盘阵列的磁盘数量

-s--scan

根据/pron/mdstat配置文件显示阵列信息

-x--spare-devices

设置备用磁盘数量

-f

将设备状态定为故障

-c--chunk

设置磁盘阵列的块大小

-a--add

天剑设备到磁盘阵列

-G--grow

设定阵列大小或形态

-v--verbose

显示详细信息

 

 

    示例:

    • 1:创建RAID 0
1 #创建虚拟磁盘md0
2 [root@localhost cd]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb1 /dev/sdb2 -c 64
3 #格式化md0
4 [root@localhost cd]# mke2fs -j /dev/md0 -b 1024 -E stride=64
5 #挂载使用
6 [root@localhost cd]# mount /dev/md0 /mnt/md0
    • 2:创建RAID 1
 1 #创建虚拟磁盘md1
 2 [root@localhost mnt]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb3 /dev/sdb5 -c 64
 3 #格式化md1
 4 [root@localhost mnt]# mke2fs -j /dev/md1 -b 1024 -E stride=64
 5 #挂载使用
 6 [root@localhost mnt]# mount /dev/md1 /mnt/md1
 7 #模拟损坏一块磁盘
 8 [root@localhost mnt]# mdadm /dev/md1 --fail /dev/sdb3
 9 #将损坏磁盘从阵列移除
10 [root@localhost mnt]# mdadm /dev/md1 --remove /dev/sdb3
11 #添加一块新的磁盘进阵列
12 [root@localhost mnt]# mdadm /dev/md1 --add/dev/sdb6
13 #再次添加一块磁盘作为空闲盘,当磁盘损坏时自动替补上去
14 [root@localhost mnt]# mdadm /dev/md1 --add/dev/sdb7
    • 3:创建RAID 5
1 #创建虚拟磁盘md5
2 [root@localhost mnt]# mdadm -C /dev/md5 -a yes -l 5 -n 3 /dev/sdb1 /dev/sdb2 /dev/sdb3 -c 64
3 #格式化
4 [root@localhost mnt]# mke2fs -j /dev/md5 -b 1024 -E stride=64
5 #挂载
6 [root@localhost mnt]# mount /dev/md5 /mnt/md5
    • 4:创建RAID 10
1 #创建虚拟磁盘md10
2 [root@localhost md10]# mdadm -C /dev/md10 -a yes -l 10 -n 4 /dev/sdb{1,2,3,5} -c 64
3 #格式化
4 [root@localhost md10]# mke2fs -j /dev/md10 -b 1024 -E stride=64
5 #挂载
6 [root@localhost md10]# mount /dev/md10 /mnt/md10
    •  5:删除RAID
1 [root@localhost md10]# mdadm --stop /dev/md0
2 [root@localhost md10]# mdadm --remove /dev/md0

注:本文参考了http://www.linuxidc.com/Linux/2015-08/122191.htm和http://blog.jobbole.com/83808/