RAID详解

                                   RAID详解


主要内容:

 一、 RAID详解
 二、 创建一个RAID的基本过程
 三、 实验创建一个raid0

一、RAID详解

1.描述

   RAID:(Redundant Array of indenpensive Disk) 独立磁盘冗余阵列: 磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段(striping)的方式储存在不同的磁盘中,存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。
 磁盘阵列利用的不同的技术称为RAID level,不同的level针对不同的系统及应用,以解决数据安全的问题。
 简单来说,RAID把多个硬盘组合成为一个逻辑扇区。因此,操作系统只会把它当作一个硬盘。

 一般高性能的磁盘阵列都是以硬件的形式来达成,进一步的把磁盘存取控制及磁盘阵列结合在一个控制器(RAID controler)或控制卡上,针对不同的用户解决人们对磁盘输入输出系统的四大要求:

 (1)增加存取速度
 (2)容错(fault tolerance),即安全性
 (3)有效的利用磁盘利用率
 (4)尽量的平衡CPU,内存及磁盘的性能差异,提高主机的整体工作性能

2.可提供的功能

  (1)冗余(容错)
  (2)性能提升

3.硬软RAID

    (1)硬件RAID:用RAID接口卡来实现;需要内核支持其驱动,并且该类设备设备显示为SCSI设备,代号为/dev/sd*

    (2)软件RAID:用内核中的MD(multiple devices)模块实现,该类设备在/etc/下表示为:md*;在现在的RH5版本中使用mdadm工具管理软RAID;(虽然来说可以用软件模拟实现raid,但是相对对磁盘控制的功能及性能不如硬件实现的好,生产环境中最好使用硬件raid

4.几种常见RAID类型描述

    RAID0:striping(条带卷),至少需要两块磁盘,做RAID分区的大小最好是相同的(可以充分发挥并优势);而数据分散存储于不同的磁盘上,在读写的时候可以实现并发,所以相对其[读写性能最好];但是[没有容错功能],任何一个磁盘的损坏将损坏全部数据

    RAID1:mirroring(镜像卷),至少需要两块硬盘,RAID大小等于两个RAID分区中最小的容量(最好将分区大小分为一样),可增加热备盘提供一定的备份能力;数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;但相对降低了写入性能,但是读取数据时可以并发,几乎类似于raid-0的读取效率

    RAID5:需要三块或以上硬盘,可以提供热备盘实现故障的恢复;采用奇偶效验,可靠性强,且只有同时损坏两块硬盘时数据才会完全损坏,只损坏一块硬盘时,系统会根据存储的奇偶校验位重建数据,临时提供服务;此时如果有热备盘,系统还会自动在热备盘上重建故障磁盘上的数据

5.存储方式

   简单来说就是 磁盘阵列的第一个磁盘分段是校验值,第二个磁盘至后一个磁盘再折回第一个磁盘的分段是数据,然后第二个磁盘的分段是校验值,从第三个磁盘再折回第二个磁盘的分段是数据,以此类推,直到放完数据为止。这样数据与校验值的循环分离存储就可以达到一定的故障重建功能;但是raid-5的控制较为复杂,且计算大量的校验码,可能给系统造成额外计算的负担(软raid来说,硬件有自己的数据处理能力)

注:
   RAID中的容错:即使磁盘故障,数据仍能保持完整,可让系统存取到正确的数据,而SCSI的磁盘阵列更可在工作中抽换磁盘,并可自动重建故障磁盘的数据。

   热备份(hot spare or hot standby driver):为了加强容错的功能以及使系统在磁盘故障的情况下能迅速的重建数据,以维持系统的性能,一般的磁盘阵列系统都可使用热备份(hot spare or hot standby driver)的功能,所谓热备份是在建立(configure) 磁盘阵列系统的时候,将其中一磁盘指定为后备磁盘,该磁盘在平常并不操作,但若阵列中某一磁盘发生故障时,磁盘阵列即以后备磁盘取代故障磁盘,并自动将故障磁盘的数据重建(rebuild)在后备磁盘之上,因为反应快速,加上快取内存减少了磁盘的存取,所以数据重建很快即可完成,对系统的性能影响很小。

6.总结

   对上面几种常用的RAID类型分析后,可知,RAID0主要可以提高磁盘性能,RAID1主要可以实现备份容错,所以可以在实际生产环境下考虑结合RAID0和RAID1来实现磁盘存储系统的高性能、高容错。

二、创建一个RAID的基本过程

   # mdadm -C /dev/md0 -a yes -l0 -n2 /dev/sd[a,b]1
   -a: 是否激活
   -C:创建一个阵列,后跟阵列名称
   -l:指定阵列的级别;
   -n:指定阵列中活动devices的数目

   # cat /proc/mdstat    # 查看所有运行的RAID阵列的状态
   # mdadm --detail /dev/md0 # 查看阵列的详细信息
   # mkfs.ext3 /dev/md0 # 格式化raid
   # mount /dev/md0 /mnt # 挂载
   # vi /etc/fstab # 修改/etc/fstab让raid自动挂载
   /dev/md0 /mnt ext3    defaults 0 0

三、 实验创建一个raid0

   实验环境vmw9 + centos6.2

1.先添加一块硬盘并分区 步骤如下:

   [root@butbueatiful ~]> fdisk -l |grep sdb # 查看 sdb 硬盘(也就是我们刚添加的硬盘)分区情况
   Disk /dev/sdb doesn't contain a valid partition table
   Disk /dev/dm-0 doesn't contain a valid partition table
   Disk /dev/dm-1 doesn't contain a valid partition table
   Disk /dev/sdb: 2147 MB, 2147483648 bytes
   [root@butbueatiful ~]> fdisk /dev/sdb # 现在开始分区
   Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
   Building a new DOS disklabel with disk identifier 0xd3eba9b3.
   Changes will remain in memory only, until you decide to write them.
   After that, of course, the previous content won't be recoverable.

   Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

   WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
            switch off the mode (command 'c') and change display units to
            sectors (command 'u').

   Command (m for help): n # 新建分区,关于fdisk创建分区可以google一下
   Command action
      e   extended
      p   primary partition (1-4)
e # 创建扩展分区
   Partition number (1-4):
   Value out of range.
   Partition number (1-4): 1
   First cylinder (1-261, default 1):
   Using default value 1
   Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261):
   Using default value 261

   Command (m for help): p # 打印分区信息

   Disk /dev/sdb: 2147 MB, 2147483648 bytes
   255 heads, 63 sectors/track, 261 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes
   Sector size (logical/physical): 512 bytes / 512 bytes
   I/O size (minimum/optimal): 512 bytes / 512 bytes
   Disk identifier: 0xd3eba9b3

      Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         261     2096451    5  Extended

   Command (m for help): n
   Command action
      l   logical (5 or over)
      p   primary partition (1-4)
l # 创建逻辑分区
   First cylinder (1-261, default 1):
   Using default value 1
   Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261): +10M # 大小为10M

   Command (m for help): p

   Disk /dev/sdb: 2147 MB, 2147483648 bytes
   255 heads, 63 sectors/track, 261 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes
   Sector size (logical/physical): 512 bytes / 512 bytes
   I/O size (minimum/optimal): 512 bytes / 512 bytes
   Disk identifier: 0xd3eba9b3

      Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         261     2096451    5  Extended
   /dev/sdb5               1           2       16002   83  Linux

   Command (m for help): n
   Command action
      l   logical (5 or over)
      p   primary partition (1-4)
l
   First cylinder (3-261, default 3):
   Using default value 3
   Last cylinder, +cylinders or +size{K,M,G} (3-261, default 261): +10M

   Command (m for help): p

   Disk /dev/sdb: 2147 MB, 2147483648 bytes
   255 heads, 63 sectors/track, 261 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes
   Sector size (logical/physical): 512 bytes / 512 bytes
   I/O size (minimum/optimal): 512 bytes / 512 bytes
   Disk identifier: 0xd3eba9b3

      Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         261     2096451    5  Extended
   /dev/sdb5               1           2       16002   83  Linux
   /dev/sdb6               3           4       16033+  83  Linux

   Command (m for help): t # 指定分区类型
   Partition number (1-6): 5 # 5是我们刚分的区即/dev/sdb5
   Hex code (type L to list codes): fd # 类型为fd
   Changed system type of partition 5 to fd (Linux raid autodetect)

   Command (m for help): t
   Partition number (1-6): 6
   Hex code (type L to list codes): fd
   Changed system type of partition 6 to fd (Linux raid autodetect)

   Command (m for help): p

   Disk /dev/sdb: 2147 MB, 2147483648 bytes
   255 heads, 63 sectors/track, 261 cylinders
   Units = cylinders of 16065 * 512 = 8225280 bytes
   Sector size (logical/physical): 512 bytes / 512 bytes
   I/O size (minimum/optimal): 512 bytes / 512 bytes
   Disk identifier: 0xd3eba9b3

      Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1               1         261     2096451    5  Extended
   /dev/sdb5               1           2       16002   fd  Linux raid autodetect
   /dev/sdb6               3           4       16033+  fd  Linux raid autodetect

   Command (m for help): w
   The partition table has been altered!

   Calling ioctl() to re-read partition table.
   Syncing disks.

2.创建raid0
关于下面步骤的相关命令可以看 二

   [root@butbueatiful ~]> mdadm -C /dev/md0 -ayes -l0 -n2 /dev/sdb{5..6}
   [root@butbueatiful ~]>mdadm -D /dev/md0
   /dev/md0:
           Version : 1.2
     Creation Time : Fri Aug  3 11:09:06 2012
        Raid Level : raid0
        Array Size : 29696 (29.00 MiB 30.41 MB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Fri Aug  3 11:09:06 2012
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

        Chunk Size : 512K

              Name : butbueatiful:0  (local to host butbueatiful)
              UUID : 355eec1d:2bf0a16e:e477900d:ccef1cda
            Events : 0

       Number   Major   Minor   RaidDevice State
          0       8       21        0      active sync   /dev/sdb5
          1       8       22        1      active sync   /dev/sdb6
   [root@butbueatiful ~]> cat /proc/mdstat
   Personalities : [raid0]
   md0 : active raid0 sdb6[1] sdb5[0]
         29696 blocks super 1.2 512k chunks

   unused devices: <none>
   [root@butbueatiful ~]> ll /dev/md0
   brw-rw----. 1 root disk 9, 0 Aug  3 11:09 /dev/md0
   [root@butbueatiful ~]> mkdir /raid0
   [root@butbueatiful ~]> mkfs.ext3 /dev/md0
   mke2fs 1.41.12 (17-May-2010)
   Filesystem label=
   OS type: Linux
   Block size=1024 (log=0)
   Fragment size=1024 (log=0)
   Stride=512 blocks, Stripe width=1024 blocks
   7424 inodes, 29696 blocks
   1484 blocks (5.00%) reserved for the super user
   First data block=1
   Maximum filesystem blocks=30408704
   4 block groups
   8192 blocks per group, 8192 fragments per group
   1856 inodes per group
   Superblock backups stored on blocks:
           8193, 24577

   Writing inode tables: done
   Creating journal (1024 blocks): done
   Writing superblocks and filesystem accounting information: done

   This filesystem will be automatically checked every 37 mounts or
   180 days, whichever comes first.  Use tune2fs -c or -i to override.
   [root@butbueatiful ~]> mount /dev/md0 /raid0/
   [root@butbueatiful ~]> df
   Filesystem    Type    Size  Used Avail Use% Mounted on
   /dev/mapper/VolGroup-lv_root
                 ext4     19G  5.1G   13G  30% /
   tmpfs        tmpfs    250M     0  250M   0% /dev/shm
   /dev/sda1     ext4    485M   29M  431M   7% /boot
   /dev/md0      ext3     29M  1.4M   26M   6% /raid0

3.测试自动挂载

   [root@butbueatiful ~]> vi /etc/fstab # 添加如下信息
    /dev/md0                /raid0                  ext3    defaults        0 0

   [root@butbueatiful ~]> umount /raid0
   [root@butbueatiful ~]> mount -a # 此时如果df里显示/raid0那么说明自动挂载成功
   [root@butbueatiful ~]> df
   Filesystem    Type    Size  Used Avail Use% Mounted on
   /dev/mapper/VolGroup-lv_root
                 ext4     19G  5.1G   13G  30% /
   tmpfs        tmpfs    250M     0  250M   0% /dev/shm
   /dev/sda1     ext4    485M   29M  431M   7% /boot
   /dev/md0      ext3     29M  1.4M   26M   6% /raid0
   [root@butbueatiful ~]>


你可能感兴趣的:(raid)