一、RAID简述

磁盘阵列(Redundant Arrays of Independent Disks,RAID),是把多个物理磁盘组成一个阵列,当作一个逻辑磁盘使用,它将数据以分段或条带的方式储存在不同的磁盘中,这样可以通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量。

二、RAID分类

  1. 外接式磁盘阵列:常被使用在大型服务器上,专业的硬件磁盘阵列盘柜,价格昂贵,主要厂商:IBM、HP、EMC等。
  2. 内接式磁盘阵列:需要技术人员来使用操作,同时需要配备硬件RAID卡或者阵列卡。
  3. 软件仿真式磁盘阵列:通过操作系统自身提供的磁盘管理功能(软件功能实现)将多个硬盘配置成逻辑盘,价格相对较便宜。

三、RAID级别

  1. RAID 0
    CentOS7下使用mdadm实现RAID - 图1
    最早出现的RAID模式,属于条带模式,至少需要两块磁盘,成本低,可以提高整个磁盘的性能和吞吐量;但是没有容错机制,磁盘损坏易丢失数据。
  2. RAID 1
    CentOS7下使用mdadm实现RAID - 图2
    磁盘镜像模式,数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,通过二次读写实现磁盘镜像,磁盘控制器的负载也相当大,所以多磁盘控制器使用可以缓解读写负载。
  3. RAID 1 + 0
    CentOS7下使用mdadm实现RAID - 图3
    高可靠性与高效磁盘结构,下层是两个RAID 1,两个RAID 1之上是RAID 0,至少四块硬盘。
  4. RAID 0 + 1
    CentOS7下使用mdadm实现RAID - 图4
    高效率与高性能磁盘结构, 下层是两个RAID 0,两个RAID 1之上是RAID 1,至少四块硬盘。
  5. RAID 2
    CentOS7下使用mdadm实现RAID - 图5
    带海明码校验,这种编码技术需要多个磁盘存放检查及恢复信息,使得RAID 2技术实施更复杂,商业中用的比较少。
  6. RAID 3
    CentOS7下使用mdadm实现RAID - 图6
    带奇偶校验码的并行传送,只能查错不能纠错。
  7. RAID 4
    CentOS7下使用mdadm实现RAID - 图7
    它对数据的访问是按数据块进行的,也就是按磁盘进行的,每次是一个盘。在图上可以这么看,RAID3是一次一横条,而RAID4一次一竖条。
  8. RAID 5
    CentOS7下使用mdadm实现RAID - 图8
    分布式奇偶校验的独立磁盘结构,可靠性强,只损坏一块硬盘时,系统会根据存储的奇偶校验位重建数据,如果同时损坏两块硬盘时数据将完全损坏。
  9. RAID 6
    CentOS7下使用mdadm实现RAID - 图9
    带有两种分布存储的奇偶校验码的独立磁盘结构,多一种校验主要是用于要求数据绝对不能出错的场合。
  10. RAID 7
    CentOS7下使用mdadm实现RAID - 图10
    所有的I/O传送均是同步进行的,可以分别控制,这样提高了系统的并行性,提高系统访问数据的速度,带有高速缓冲存储器,由于采用并行结构和高速缓冲存储器,因此数据访问效率大大提高。

四、常见RAID级别总结

CentOS7下使用mdadm实现RAID - 图11

五、mdadm命令参数详解

1、主要模式

  1. Assemble:装配模式,将原来属于一个阵列的每个块设备组装为阵列

    1. -A, --assemble 开启一个阵列
    2. -u, --uuid:可以根据组件设备的uuid开启RAID
    3. -m, --super-minor:保存在每个组件设备中的超级块中的minor号,可以根据这个开启RAID
    4. -N, -–name:根据RAID名开启RAID
    5. -R, –-run:即使RAID中的磁盘设备不完整(例如原来创建4块盘的RAID5,现在只发现3块成员盘),RAID也被开启-–no-degraded:和–scan选项一起使用,禁止RAID中的磁盘设备不完整时启动RAID
    6. -a, -–auto:如-–create中的 auto
    7. -b, -–bitmap:指定bitmap位图文件-–backup-file:保存关键信息的文件,例如:如果中途断电可以重启继续
    8. -U, –-update:更新每个磁盘设备的超级块信息
  2. Build: 创建或组装不需要元数据(没有超级块)的阵列,每个设备没有元数据块

  3. Create: 创建一个新的阵列,每个设备具有超级块

    -C, --create:创建一个新的阵列 
    -l, --level: RAID级别 
    -n, --raid-devices: 活动设备个数 
    -a, {yes|no}: 是否自动为其创建设备文件 
    -c, --chunk: CHUNK大小, 默认为64K,重要的参数,决定了一次向阵列中每个磁盘写入数据的大小 
    -x, --spare-devices: 备用盘个数
    
  4. Grow:改变阵列中每个设备被使用的容量或阵列中的设备的数目,改变阵列属性

    -G, --grow: 改变阵列的大小或设备的数量
    -n, --raid-devices=: 活动设备个数
    -x, --spare-devices=:备用盘个数
    -c, --chunk=: CHUNK大小, 默认为64K,重要的参数,决定了一次向阵列中每个磁盘写入数据的大小
    -z, --size=:阵列中从每个磁盘获取的空间总数
    -l, --level=: RAID级别
    -p, --layout=:设定raid5 和raid10的奇偶校验规则;并且控制故障的故障模式--parity: 类似于--layout--assume-clean:目前仅用于 --build 选项
    -R, --run: 强制激活RAID,使用这个选项,设备上有旧的元数据信息的提示会被忽略
    -N, --name=: 设定阵列的名称–-rounding:在linear array中的rounding factor,等于条带大小
    
  5. Monitor:监控RAID的状态,报指定的事件,可以实现全局热备

    -F, --follow, 
     --monitor:选择监控(Monitor)模式
     --alert:当检测到一个事件时运行指定的程序
    -m,--mail: 事件报警时给谁发电子邮件-p,--program, 
    -y, --syslog: 事件记录于syslog中
    -d, --delay:隔多少秒轮询各个RAID,默认是60秒
    -f, --daemonise:创建一个子进行作为后台监控程序
    -i, --pid-file:与--daemonise一起使用,子进程PID记录文件
    -l, --oneshot:只会检测RAID一次
    -t, --test,生成test报警信息,用来测试报警信息是否能正确收到
    
  6. Manage:管理存储阵列中的设备,比如增加热备磁盘或者设置某个磁盘失效、阵列中移除失效的磁盘

    -a,--add:在线添加磁盘设备,例如可以添加热备盘
    --re-add:给RAID重新添加一个以前被移除的设备
    -r,--reomve:移除设备,只能移除failed(失效)磁盘和spare(热备)磁盘设备
    -f,--fail:使RAID中某个磁盘设备失效
    
  7. Incremental Assembly:添加设备到阵列中

  8. Misc: 报告或者修改阵列中相关设备的信息,比如查询阵列或者设备的状态信息、对阵列中的某个设备进行操作(例如抹去超级块或停止阵列)

    -Q, --query: 查询一个RAID或者一个RAID组件设备的信息
    -D, --detail: 查询一个RAID的详细信息
    -E, --examine:查询组件设备上的超级块信息
    -R, -–run:启动不完整的RAID(例如本来是有4块盘的RAID5,现在3块盘也可以启动)
    -S, -–stop:停止RAID
    -o, -–readonly:使RAID只能只读
    -w, -–readwrite:使RAID能读写
     -–zero-superblock:超级块信息被写0覆盖。
    
  9. Auto-detect: 只是要求在Linux内核启动时自动检测到阵列

2、无任何模式参数

```
-v, -–verbose:显示更详细的信息
-f, -–force:某些选项强制执行
-c, -–config:指定配置文件,默认是 /etc/mdadm.conf 或者是/etc/mdadm/mdadm.conf
-s, –-scan:从配置文件或者/proc/mdstat中扫描信息
-e, -–metadata:定义组件设备上超级块的类型-–homehost:创建一个RAID时,homehost名会记录在超级块中
-b, --brief:较少的细节,用于 --detail 和 --examine选项
-q, --quit:安静模式;加上该选项能使mdadm不显示纯消息性的信息,除非那是一个重要的报告;
-c, --config=: 指定配置文件,缺省为 /etc/mdadm.conf

<a name="ba5d09d6"></a>
## 六、创建RAID5举例

如下有5个分区:

/dev/sdb 10GB
/dev/sdc 10GB
/dev/sdd 10GB
/dev/sde 10GB /dev/sdf 10GB


1. 建各个分区,以/dev/sdb1分区为例,其他分区依次建立<br />
fdisk /dev/sdb<br />
![](https://cdn.nlark.com/yuque/0/2019/jpeg/120856/1562745156499-ba8e56f8-1e92-4148-8ddd-f74f3251b5d9.jpeg#align=left&display=inline&height=677&originHeight=677&originWidth=543&size=0&status=done&width=543)
1. 创建RAID5,加入sdb,sdc,sdd

mdadm -Cv /dev/md0 -a yes -l 5 -n 3 /dev/sd{b,c,d} 或 mdadm —creat /dev/md0 —level=5 —raid-device=3 /dev/sd{b,c,d}


3. 添加一个热备盘

mdadm -a /dev/md0 /dev/sde1


4. 移除一个热备盘

mdadm -r /dev/md0 /dev/sde1


5. 模拟硬盘故障

mdadm -f /dev/md0 /dev/sdb1


6. 移除故障的硬盘,现在已经没有热备盘了,再添加一个热备盘

mdadm -r /dev/md0 /dev/sdb1 mdadm -a /dev/md0 /dev/sdf1


7. 生成mdadm的配置文件

echo DEVICE /dev/sd[c-f]1 > /etc/mdadm.conf mdadm -Ds >>/etc/mdadm.conf


8. 格式化并挂载 /dev/md0 设备

mkdir /mnt/raid5 mkfs.ext4 /dev/md0 mount /dev/md0 /mnt/raid5 ```