• RAID是什么 

        RAID 即是磁盘阵列,全名为Redundant Array of Independent Disks  容错独立磁盘阵列 ,是通过一些技术(软件或硬件)将多个较小的磁盘整合成为一个较大的磁盘设备;不仅可以存储数据,还可以保护数据。

  • RAID 的由来

    时势造英雄,很多东西的由来都是因为需要,当时硬盘的容量也就是几十GB,而且性能还很差,为了提高计算机的运算性能,迫切需要一个高性能大容量的硬盘,此时1987加利福尼亚大学伯克利分校(University of California-Berkeley),发表了:“A Case for Redundant Arrays of Inexpensive Disks”。文章中,谈到了RAID这个词汇,而且定义了RAID的5层级。 另外,研究小组也设计出容错(fault-tolerance),逻辑数据备份(logical data redundancy),而产生了RAID理论。研究初期,便宜(Inexpensive)的磁盘也是主要的重点,但后来发现,大量便宜磁盘组合并不能适用于现实的生产环境,后来Inexpensive被改为independent,许多独立的磁盘组。

  • 磁盘阵列的优点

       数据的安全与可靠性:指的并非信息安全,而是当硬件损毁时,数据还可以                        安全救援或只用。 

        读写性能:例如RAID 0可以提高读写性能,让系统I/O可以得到改善

        容量:可以把多块磁盘组合起来,让单一文件系统可以有相当大的容量。

  •   RAID的level

    由于组合方式不同,raid 又分为不同的等级,例如level 0,1,2,3,4,5,6,7,10,50, (数字仅表示不同的组合方式,不代表优先级)但常用的 也就是 0, 1 ,5 还有 1与0的组合 10或者01                      下表提供了6个raid级别的简单定义,大家先有个大概印象,后面我们会详细说明 

RAID 小结

①RAID 0 (硬盘分段)

           数据按系统规定的chunk 为单位依次写入多块磁盘,因此它的读写性能很高,但没有容错能力 ,即任何一块磁盘坏了,数据 就丢失了,而且多块磁盘组合,损坏的几率大大增大。但磁盘利用率为100%

RAID 小结

②RAID 1(磁盘镜像)

     它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据,这样它的写入性能没有提高,因为同样的数据要存储多次,但提供了百分之百的数据冗余,两个磁盘互为镜像,所以无论哪个磁盘坏了,都不会影响数据的读取,因此容错性能非常好,并可以提高读数据的速度;但缺点就是需要双份硬盘,因此价格较高。磁盘利用率只有50% 

RAID 小结

③ RAID 4

    将数据条块化并分布于不同的磁盘上,但使用一块磁盘作为校验盘,每次写操作都需要访问校验盘,这时校验盘会成为写操作的瓶颈,因此RAID 4在商业环境中也很少使用。如图所示。disk 3 压力会很大,每次读写数据都要访问,容易损坏。

RAID 小结

④RAID 5

          数据存储和raid 4 基本一样,只是校验值不在放在一个固定的磁盘上了,而是轮流放在每个磁盘上,这样每块磁盘的压力 就一样了。

         raid 4 和raid 5 一样只允许一块磁盘损坏,有一块磁盘损坏是,数据还可以读取,但读取速度较慢,而且这是还会增大其他磁盘损坏的几率,当有一块磁盘损坏时,应立即换取下这块坏磁盘,换一块好的。

⑤RAID 10 或01

           raid 0 性能好但是数据不安全,raid 1 的数据安全但是性能不佳,于是就产生了 10 组合 或是 01组合 。

           raid 01: 就是先让两块磁盘组成raid 0而且这样的组合有两组,再把这两组raid 0 组合成raid 1  。

           raid 10 就是先组合RAID 1 在组合RAID 0

  由于RAID 0 的优点,性能得以提升,由于RAID 1 的优点,数据的已备份,但也有与RAID 1 的缺点,容量会少一半用来备份。

RAID 小结

RAID 小结

   

  •   RAID的实现方式  

     硬件磁盘阵列:

                      通过磁盘阵列卡来完成数组的目的,磁盘阵列卡上有一个专门的芯片来处理RAID的任务,内核不会识别各个磁盘,内核中识别阵列卡。不会重复消耗原本系统的I/O总线,性能比较好,但是磁盘阵列卡价格有点贵 。因此就产生了软件磁盘阵列。在blos界面配置。操作系统装在RAID上。但内核要可以识别RAID.设别文件名为/dev/sd[a-p].

     软件磁盘阵列:

                         利用软件来仿真磁盘阵列的功能,但会消耗过多的系统资源,例如cpu的运算与I/O总线的资源。硬盘直接连在主板上,且内核能识别每一块磁盘。MD会把内核识别的磁盘再次封装成RAID,输入到用户空间。因此设别名为/dev/md0,/dev/md1 .不过现在我们的计算机速度都很快,这些速度限制已不再是问题,所以 我们下面就玩玩软件磁盘阵列。

  •  

    软件磁盘阵列的设置

    mdadm软件在用户空间提供一个程序,可以配置raid,把我们的命令送给MD模块,并组织对应的磁盘设备,成为软RAID.

    mdadm的配置文件在/etc/mdadm.conf   

    设备被识别为/dev/md0  /dev/md1  

mdadm 可以把底层的块设备组成软RAID  

   底层块设别 可以是整块磁盘也可以是分区 但如果使用的是分区 创建RAID 1意义就不打了,就一块磁盘 ,磁盘坏了,数据备份多少次都没意义了。但我们做实验可以用分区,来练习一下。

mdadm可以创建的级别有RAID 0 ,RAID 1 ,RAID 4 ,RAID 5 ,RAID 6,RAID 10

还有 linear 模式 即是线性模式,存满一块磁盘再存另外一块磁盘。

格式:

    mdadm  [mode] <raiddevice> [options] <component-devices>

     modes :

assemble 装配模式 -A

create 创建模式   -C

follow or monitor 监控模式 -F

grow 增长模式 -G 

manage 管理模式 –add -fail –remove  

   <raiddevice>:

               要创建的设别名,例如 /dev/md0,/dev/md1 系统默认只            有 /dev/md0  ,如果想创建 /dev/md1 要自己创建。

 

 [options]:

      不同模式下的选项意义不同 

 -C ,–create create a new array 

              -n 几块磁盘

              -x  几块空闲盘  –spare-devices  

-c –chunk 块大小 默认64KB   数据存储时要分为块

             -l  级别 0,1,5, 

-p layout 左对称 右对称 做非对称 右非对称

              -a yes 自动创建 设备名。

 

       –manage 模式下的参数有:

             –fail:把后面的设备设置成出错状态

             –add:将后面的设备加入到这个MD中

             –remove:将后面的设备从这个MD中删除。

我们来创建一个RAID 5 来演示一下 

   RAID 5 的环境 :

  • 利用4个分区组成RAID5;
  • 每个分区约为1G,
  • 把一个分区作为sparedisk
  • 将RAID 5挂载到/mnt/raid目录下  

    1、构建所需的磁盘设备

    用fdisk创建5个1G的分区 类型改为fd 

 
  1. #fdisk /dev/sdb 
  2. /dev/sdb5        1         123      987934+  fd  Linux raid autodetect 
  3. /dev/sdb6        124         246      987966   fd  Linux raid autodetect 
  4. /dev/sdb7       247         369      987966   fd  Linux raid autodetect 
  5. /dev/sdb8       370         492      987966   fd  Linux raid autodetect 
  6. /dev/sdb9       493         615      987966   fd  Linux raid autodetect
  7. #partprobe  

    2、以mdadm创建RAID 

 
  1. [root@localhost ~]# mdadm -C /dev/md0 -a yes -l 5 -n 4 -x 1 /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8 /dev/sdb9 
  2. mdadm: array /dev/md0 started. 

 

 
  1. [root@localhost ~]# mdadm –detail /dev/md0 #查看/dev/md0 的详细信息
  2. /dev/md0:  #设备文件名
  3.         Version : 0.90 
  4.   Creation Time : Wed Jun 20 19:23:34 2012 #创建时间
  5.      Raid Level : raid5  #等级
  6.      Array Size : 2963520 (2.83 GiB 3.03 GB)  #可用容量
  7.   Used Dev Size : 987840 (964.85 MiB 1011.55 MB)#每个设备的容量 
  8.    Raid Devices : 4  #用作RAID的设备个数
  9.   Total Devices : 5  #总设备个数
  10. Preferred Minor : 0 
  11.     Persistence : Superblock is persistent 
  12.  
  13.     Update Time : Wed Jun 20 19:24:20 2012 
  14.           State : clean 
  15.  Active Devices : 4  #启用的设备个数
  16. Working Devices : 5  #可用的设备个数
  17.  Failed Devices : 0 
  18.   Spare Devices : 1  #预备的设备个数
  19.  
  20.          Layout : left-symmetric 
  21.      Chunk Size : 64K 
  22.  
  23.            UUID : c4d40765:514c4618:bbdd9c4c:56d359b0 
  24.          Events : 0.4 
  25.  
  26.     Number   Major   Minor   RaidDevice State 
  27.        0       8       21        0      active sync   /dev/sdb5 
  28.        1       8       22        1      active sync   /dev/sdb6 
  29.        2       8       23        2      active sync   /dev/sdb7 
  30.        3       8       24        3      active sync   /dev/sdb8 
  31.  
  32.        4       8       25        –      spare   /dev/sdb9 

3、格式化与挂载使用RAID 5   

 
  1. #mke2fs -j /dev/md0  
  2.   
  3. #mkdir /mnt/raid  
  4.   
  5. #mount /dev/md0  /mnt/raid   
  6. [root@localhost ~]# df  
  7. Filesystem           1K-blocks      Used Available Use% Mounted on  
  8. /dev/mapper/vol0-root  
  9.                       29741864   5016520  23190164  18% /  
  10. /dev/mapper/vol0-home  
  11.                        4951688    141376   4554724   4% /home  
  12. /dev/sda1               101086     31952     63915  34% /boot  
  13. tmpfs                   517336         0    517336   0% /dev/shm  
  14. /dev/md0               2916920     69952   2698792   3% /mnt/raid 

这样RAID 5 就创建好了 可以使用了 

#mke2fs -j  -b 2048 -E stride=32 /dev/md0

(-b 1024 2048 4096 )

( -c默认 64k)   写明 数据分割的chunk 与磁盘的block 的关系 可以提高写入性能     -L data 卷标 

扩展磁盘容量

       我们现在的raid 5 的容量是4G 如果我们现在需要5G 的空间 可以再加入一块磁盘  假设/dev/sdb10是1G的可以使用

   1、加入磁盘 

     #mdadm -a /dev/md0 /dev/sdb10

     #mdadm -G /dev/md0 -n 5 -G增长模式  -n5 增加为5个设备 

  2、重塑文件系统边界

    # resize2fs  /dev/md0  默认是重塑到和物理边界一样大 也可以跟具体的容                             量(3G扩展或减缩) 

    #df -lh 查看一下 

    [解释一下为什么需要重塑文件系统边界,每一个设备都有两个边界,一个是物理边界,既是物理实际的大小,另外一个是文件系统边界,既是格式化以后可以使用的边界,增长的只是物理边界,所以要重塑一下文件系统边界 ]

仿真RAID错误的救援模式

   让一块磁盘坏掉,然后让sparedisk自动启用 

      1、先复制一些数据

       #cp /etc/fstab /mnt/raid

      2、假设/dev/sdb5 坏了

     #mdadm –manage /dev/md0  –fail (-f) /dev/sdb5 

 
  1. [root@localhost ~]# mdadm –detail /dev/md0 
  2. /dev/md0: 
  3.         Version : 0.90 
  4.   Creation Time : Wed Jun 20 19:23:34 2012 
  5.      Raid Level : raid5 
  6.      Array Size : 2963520 (2.83 GiB 3.03 GB) 
  7.   Used Dev Size : 987840 (964.85 MiB 1011.55 MB) 
  8.    Raid Devices : 4 
  9.   Total Devices : 5 
  10. Preferred Minor : 0 
  11.     Persistence : Superblock is persistent 
  12.  
  13.     Update Time : Wed Jun 20 20:22:01 2012 
  14.           State : clean, degraded, recovering 
  15.  Active Devices : 3 
  16. Working Devices : 4 
  17.  Failed Devices : 1 
  18.   Spare Devices : 1 
  19.  
  20.          Layout : left-symmetric 
  21.      Chunk Size : 64K 
  22.  
  23.  Rebuild Status : 1% complete 
  24.  
  25.            UUID : c4d40765:514c4618:bbdd9c4c:56d359b0 
  26.          Events : 0.6 
  27.  
  28.     Number   Major   Minor   RaidDevice State 
  29.        4       8       25        0      spare rebuilding   /dev/sdb9 
  30.        1       8       22        1      active sync   /dev/sdb6 
  31.        2       8       23        2      active sync   /dev/sdb7 
  32.        3       8       24        3      active sync   /dev/sdb8 
  33.  
  34.        5       8       21        –      faulty spare   /dev/sdb5 

    可以看到/dev/sdb9 已经启用 在重建数据 

或者使用 watch -n1 ‘cat /proc/mdstat’

一段时间后 数据重建好了 

 
  1. 0       8       25        0      active sync   /dev/sdb9 
  2.       1       8       22        1      active sync   /dev/sdb6 
  3.       2       8       23        2      active sync   /dev/sdb7 
  4.       3       8       24        3      active sync   /dev/sdb8 
  5.  
  6.       4       8       21        –      faulty spare   /dev/sdb5 

将出错的磁盘删除并加入新的磁盘

    #mdadm –manage /dev/md0 –add /dev/sdb10 –remove (-r) /dev/sdb5 

这一切都可以在开机的状态下进行 不影响正常操作 

 

开机自动启动RAID并自动挂载

   设置mdadm的配置文件 

 

[root@localhost ~]# mdadm –detail (-D)/dev/md0 |grep -i uuid

           UUID : c4d40765:514c4618:bbdd9c4c:56d359b0

 

[root@localhost ~]# vim /etc/mdadm.conf
    ARRAY /dev/md0 UUID=4d40765:514c4618:bbdd9c4c:56d359b0e

设置开机自动挂载

   #vim /etc/fstab

/dev/md0 /mnt/raid ext3 defaults 1 2

   #umount /dev/md0 

   #mount -a  测试一下是否可以挂载    

   #df     查看 

关闭软件RAID

    1、先卸载并删除配置文件 并删除/etc/fstab 中刚写入的那行 

    2、直接关闭

   #mdadm –stop(-S) /dev/md0  

3、重新启用 

[root@localhost ~]# mdadm -A /dev/md0 /dev/sdb{6,7,8,9}

4、将md0的信息保存到配置文件里 

 

[root@localhost ~]# mdadm –examine –scan >>/etc/mdadm.conf

[root@localhost ~]# cat /etc/mdadm.conf 

ARRAY /dev/md0 UUID=4d40765:514c4618:bbdd9c4c:56d359b0e

ARRAY /dev/md0 level=raid5 num-devices=4 UUID=c4d40765:514c4618:bbdd9c4c:56d359b0

 

 

拙笔小结,望路过的多多指教。