主要内容介绍

  • RAID的介绍

  • madam工具介绍

  • 创建RAID

  • RAID管理


RAID的介绍

总体介绍

独立磁盘冗余数组(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余数组(RAID, Redundant Array ofInexpensive Disks),简称磁盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于电脑来说, 看起来就像一个单独的硬盘或逻辑存储单元。分为RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50,RAID-60。

简单来说,RAID把多个硬盘组合成为一个逻辑扇区,因此,操作系统只会把它当作一个硬盘。RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合。由于硬盘价格的不断下降与RAID功能更加有效地与主板集成,它也成为了玩家的一个选择,特别是需要大容量存储空间的工作,如:视频与音频制作。


优点:

(1) RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput)

(2) 通过数据校验,RAID可以提供容错功能


分类:

(1) 纯软件磁盘阵列(Pure Software RAID):只需要主板支持即可,不需要任何磁盘阵列卡。

(2) 硬件辅助磁盘阵列(Hardware-Assisted RAID):需要一张磁盘阵列卡,以及磁盘阵列卡厂商所提供的驱动程序。


RAID等级(介绍常用的三种)

磁盘阵列RAID_ 配置磁盘阵列RAID_RAID_02磁盘阵列RAID_RAID_03

RAID0:将多个磁盘合并成一个大的磁盘,不具有冗余,并行I/O,速度最快。RAID 0亦称为带区集。它是将多个磁盘并列起来,成为一个大磁盘。在存放数据时,其将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能,如果一个磁盘(物理)损坏,则所有的数据都会丢失,危险程度与JBOD相当。


RAID1:两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,另外写入速度有微小的降低。除非拥有相同数据的主磁盘与镜像同时损坏,否则只要一个磁盘正常即可维持运作,可靠性最高。RAID 1就是镜像。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID上磁盘利用率最低的一个级别。


RAID5:采用Bit-interleaving(数据交错存储)技术,它需要通过编码再将数据比特分区后分别存在硬盘中,而将同比特检查后单独存在一个硬盘中,但由于数据内的比特分散在不同的硬盘上,因此就算要读取一小段数据资料都可能需要所有的硬盘进行工作,所以这种规格比较适于读取大量数据时使用。


RAID等级需要硬盘数最小容错硬盘数可用容量
性能安全性目的应用产业
0
≧20n最高
追求最大容量、速度3D产业实时渲染、视频剪接高速缓存用途
1≧2总数一半总量一半少有提升最高追求最大安全性个人、企业备份
5≧31n-1追求最大容量、最小预算个人、企业备份


热备份(Hot Spare):与CPU系统带电连接的硬盘,它能替换下系统中的故障盘。与冷备份的区别是,冷备份盘平时与机器不相连接,硬盘故障时才换下故障盘。


madam工具介绍

mdadm(multiple devices admin)是 linux下标准的的软raid管理工具,是一个模式化工具(在不同的模式下);程序工作在内存用户程序区,为用户提供RAID接口来操作内核的模块,实现各种功能;


基本语法

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


模式(RHEL6下):

madam一共有共有9种模式:Assemble, Build,Create, Follow or Monitor, Grow, Incremental Assembly, Manager, Misc, Autodetect.

本文主要讲解Assemble:

-a {yes|no}: 是否为新建的raid设备自动创建设备文件/dev/md#;

-l : 指定Raid级别;

-n : 指定用于Raid的块设备的个数;不包括备盘;

-c :制定chunk大小,chunk为数据分块放到物理硬盘上的大小

-x : 指定用于备盘的块设备个数


创建RAID(以RAID5例)

1.分区准备

准备用/dev/sdb1, /dev/sdc1, /dev/sdd1组成RAID5,然后/dev/sda9用作热备份。

#分区如下
   Device Boot    Start      End      Blocks   Id  System
/dev/sda9         3456      4761    10488205   fd  Linux raid autodetect
/dev/sdb1          1        1306    10490413+  fd  Linux raid autodetect
/dev/sdc1          1        1306    10490413+  fd  Linux raid autodetect
/dev/sdd1          1        1306    10490413+  fd  Linux raid autodetect

注:分好区,不重启,直接让内核加载分区的方法。

RHEL5时

#    partprobe

RHEL6时

# partx -a /dev/sdd
BLKPG: Device or resource busy
# partx -a /dev/sdd1 /dev/sdd


2. 创建RAID5

/dev/sdb1和/dev/sdc1由于之前做过RAID,所以会出现下面情况

# mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sda9
mdadm: /dev/sdb1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Tue Oct  1 19:02:32 2013
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=raid5 devices=3 ctime=Tue Oct  1 19:02:32 2013
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.


3. 查看阵列情况

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[4] sda9[3](S) sdc1[1] sdb1[0]
      20963328 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>

通过cat /proc/mdstat信息查看所有运行的RAID阵列的状态,在第一行中首先是MD的设备名md0,active和inactive选项表示阵列是否能读/写,接着是阵列的RAID级别raid5,后面是属于阵列的块设备,方括号[]里的数字表示设备在阵列中的序号,(S)表示其是热备盘,(F)表示这个磁盘是 faulty状态。下一行中首先是阵列的大小,用块数来表示;后面有chunk-size的大小,然后是layout类型,不同RAID级别的 layout类型不同,[3/3] [UUU]表示阵列有3个磁盘并且3个磁盘都是正常运行的,而[2/3]和[_UU] 表示阵列有3个磁盘中2个是正常运行的,下划线对应的那个位置的磁盘是faulty状态。


要查看更详细的信息

# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Oct  7 22:35:05 2013
     Raid Level : raid5
     Array Size : 20963328 (19.99 GiB 21.47 GB)
  Used Dev Size : 10481664 (10.00 GiB 10.73 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
    Update Time : Mon Oct  7 22:36:26 2013
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1
         Layout : left-symmetric
     Chunk Size : 512K
           Name : FLyence.Wu:0  (local to host FLyence.Wu)
           UUID : 9c64a911:b493c140:b88fb98f:5e429ec3
         Events : 18
    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1
       3       8        9        -      spare   /dev/sda9



4. mdadm.conf配置文件

mdadm.conf是该软件的默认配置文件,主要作用是方便跟踪软RAID的配置,尤其是可以配置监视和事件上报选项。其中写入每一个阵列组成的详细情况,用于在下次开启阵列后依据此文件重新装配(assemble)开启阵列,否则就需要在开启时手动定义阵列中的成员;当然是推荐创建该文件,防止出现意外情况,具体的详细配置及示例可以参看man文档# man mdadm.conf。

若不配置该文件,重新开机的时候,配置的md0会消失,变为md126

mdadm -Ds >> /etc/man.conf


5. 格式化md0

#    mkfs.ext /dev/md0

将md0格式化为ext4。


6. 挂载md0

#    mount /dev/md0 /mnt


7. 开机挂载md0

1
 2 #
 3 # /etc/fstab
 4 # Created by anaconda on Fri Sep 27 14:58:41 2013
 5 #
 6 # Accessible filesystems, by reference, are maintained under '/dev/disk'
 7 # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
 8 #
 9 UUID=ca3b7678-7fc9 /              ext4    defaults        1 1
10 UUID=70a23119-c173 /boot          ext4    defaults        1 2
11 UUID=2f2b2e90-298c /home          ext4    defaults        1 2
12 UUID=ed19a022-71af /usr           ext4    defaults        1 2
13 UUID=0bcd9605-3cb7 swap           swap    defaults        0 0
14 tmpfs              /dev/shm       tmpfs   defaults        0 0
15 devpts             /dev/pts      devpts  gid=5,mode=620  0 0
16 sysfs              /sys           sysfs   defaults        0 0
17 proc               /proc          proc    defaults        0 0
18 /dev/sda7          swap           swap    defaults        0 0
19 /dev/md0           /mnt           ext4    defaults,acl    0 0

在挂载后加参数acl,启用facl。


RAID的管理

1. 将某个分区设为故障

#     mdadm /dev/md0 -f /dev/sdb1
#     cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[4] sda9[3] sdc1[1] sdb1[0](F)
      20963328 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
      [=>...................]  recovery =  7.9% (831104/10481664) finish=1.9min speed=83110K/sec
                                                                                                                                  
md1 : inactive sda8[0](S)
      10482221 blocks super 1.2
                                                                                                                                   
unused devices: <none>

将sdb1设为故障,查看md0情况,正在重建恢复中。

#    cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[4] sda9[3] sdc1[1] sdb1[0](F)
      20963328 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
      [=>...................]  recovery =  9.0% (948100/10481664) finish=2.1min speed=72930K/sec
                                                                                                
md1 : inactive sda8[0](S)
      10482221 blocks super 1.2
                                                                                                 
unused devices: <none>
[root@FLyence ~]# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Oct  7 22:35:05 2013
     Raid Level : raid5
     Array Size : 20963328 (19.99 GiB 21.47 GB)
  Used Dev Size : 10481664 (10.00 GiB 10.73 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent
    Update Time : Mon Oct  7 23:17:32 2013
          State : clean, degraded, recovering
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1
         Layout : left-symmetric
     Chunk Size : 512K
 Rebuild Status : 20% complete
           Name : FLyence.Wu:0  (local to host FLyence.Wu)
           UUID : 9c64a911:b493c140:b88fb98f:5e429ec3
         Events : 23
    Number   Major   Minor   RaidDevice State
       3       8        9        0      spare rebuilding   /dev/sda9
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1
       0       8       17        -      faulty spare   /dev/sdb1


2. 移除故障分区

#    mdadm /dev/md0 -r /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0


3. 删除阵列

#    umount /dev/md0 
#    mdadm -Ss /dev/md0 
#    mdadm --zero-superblock /dev/sd{b,c,d}1 
# --zero-superblock 加上该选项时,会判断如果该阵列是否包
# 含一个有效的阵列超级快,若有则将该超级块中阵列信息抹除。
#    rm /etc/mdadm.conf