1、简介
前端
1.独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不一样,RAID比单颗硬盘有如下一个或多个方面的好处:加强数据集成度,加强容错功能,增长处理量或容量。另外,磁盘阵列对于电脑来讲,看起来就像一个单独的硬盘或逻辑存储单元。分为RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50,RAID-60。算法
2.简单来讲,RAID把多个硬盘组合成为一个逻辑扇区,所以,操做系统只会把它看成一个硬盘。RAID常被用在服务器电脑上,而且常使用彻底相同的硬盘做为组合。因为硬盘价格的不断降低与RAID功能更加有效地与主板集成,它也成为玩家的一个选择,特别是须要大容量存储空间的工做,如:视频与音频制做。数据库
3.最初的RAID分红不一样的档次,每种档次都有其理论上的优缺点,不一样的档次在两个目标间获取平衡,分别是增长数据可靠性以及增长存储器(群)读写性能。这些年来,出现对于RAID观念不一样的应用。数组
2、RAID实现的方式缓存
1.外接式磁盘阵列:经过扩展卡提供适配能力;
安全
2.内接式RAID:主板集成RAID控制器;
服务器
3.软件RAID:软件方式实现的RAID功能(Linux)
多线程
3、标准RAID异步
1.RAID 0
ide
RAID 0亦称为带区集。它将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,分段后分散存储在这些磁盘中,由于读写时均可以并行处理,因此在全部的级别中,RAID 0的速度是最快的。可是RAID 0既没有冗余功能,也不具有容错能力,若是一个磁盘(物理)损坏,全部数据都会丢失,危险程度与JBOD至关。
2.RAID 1
(1)两组以上的N个磁盘相互做镜像,在一些多线程操做系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的下降。只要一个磁盘正常便可维持运做,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写同样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工做。由于有镜像硬盘作数据备份,因此RAID 1的数据安全性在全部的RAID级别上来讲是最好的。但不管用多少磁盘作RAID 1,仅算一个磁盘的容量,是全部RAID中磁盘利用率最低的一个级别。
(2)若是用两个不一样大小的磁盘建RAID 1,可用空间为较小的那个磁盘,较大的磁盘多出来的空间也能够分区成一个区来使用,不会形成浪费。
3.RAID 5
RAID Level 5是一种储存性能、数据安全和存储成本兼顾的存储解决方案。它使用的是Disk Striping(硬盘分区)技术。RAID 5至少须要三块硬盘,RAID 5不是对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,而且奇偶校验信息和相对应的数据分别存储于不一样的磁盘上。当RAID5的一个磁盘数据发生损坏后,能够利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。RAID 5能够理解为是RAID 0和RAID 1的折衷方案。RAID 5能够为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具备和RAID 0相近似的数据读取速度,只是由于多了一个奇偶校验信息,写入数据的速度相对单独写入一块硬盘的速度略慢,若使用“回写缓存”可让性能改善很多。同时因为多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较便宜。
4.RAID 6
(1)与RAID 5相比,RAID 6增长第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不一样的算法,数据的可靠性很是高,任意两块磁盘同时失效时不会影响数据完整性。RAID 6须要分配给奇偶校验信息更大的磁盘空间和额外的校验计算,相对于RAID 5有更大的IO操做量和计算量,其“写性能”强烈取决于具体的实现方案,所以RAID6一般不会经过软件方式来实现,而更可能经过硬件/固件方式实现。
(2)同一数组中最多允许两个磁盘损坏。更换新磁盘后,数据将会从新算出并写入新的磁盘中。依照设计理论,RAID 6必须具有四个以上的磁盘才能生效。
3、混合RAID
1.JBOD
JBOD( Just a Bunch Of Disks)在分类上,JBOD并非RAID的档次。因为并无规范,市场上有两类主流的作法:
(1)使用单独的连接端口如SATA、USB或1394同时控制多个各别独立的硬盘,使用这种模式一般是较高级的设备,还具有有RAID的功能,不须要依靠JBOD达到合并逻辑扇区的目的。
(2)只是将多个硬盘空间合并成一个大的逻辑硬盘,没有错误备援机制。
数据的存放机制是由第一颗硬盘开始依序日后存放,即操做系统看到的是一个大硬盘(由许多小硬盘组成的)。但若是硬盘损毁,则该颗硬盘上的全部数据将没法救回。若第一颗硬盘损坏,一般没法做救援(由于大部分文件系统将磁盘分区表(partition table)存在磁盘前端,即第一颗),失去磁盘分区表即失去一切数据,若遭遇磁盘阵列数据或硬盘出错的情况,危险程度较RAID 0更剧。它的好处是不会像RAID,每次访问都要读写所有硬盘。但在部分的JBOD数据恢复实践中,能够恢复未损毁之硬盘上的数据。同时,由于每次读写操做只做用于单一硬盘,JBOD的传输速率与I/O表现均与单颗硬盘无异。
2.RAID 7
RAID 7并不是公开的RAID标准,而是Storage Computer Corporation的专利硬件产品名称,RAID 7是以RAID 3及RAID 4为基础所发展,可是通过强化以解决原来的一些限制。另外,在实现中使用大量的高速缓存以及用以实现异步数组管理的专用即时处理器,使得RAID 7能够同时处理大量的IO要求,因此性能甚至超越了许多其余RAID标准的实作产品。但也由于如此,在价格方面很是的高昂。
3.RAID 10
(1)RAID 10是先镜射再分区数据,再将全部硬盘分为两组,视为是RAID 0的最低组合,而后将这两组各自视为RAID 1运做。
(2)当RAID 10有一个硬盘受损,其他硬盘会继续运做。
4.RAID 01
(1)RAID 01则是跟RAID 10的程序相反,是先分区再将数据镜射到两组硬盘。它将全部的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运做。
(2)RAID 01只要有一个硬盘受损,同组RAID 0的全部硬盘都会中止运做,只剩下其余组的硬盘运做,可靠性较低。若是以六个硬盘建RAID 01,镜射再用三个建RAID 0,那么坏一个硬盘便会有三个硬盘离线。所以,RAID 10远较RAID 01经常使用,零售主板绝大部分支持RAID 0/1/5/10,但不支持RAID 01。
5.RAID 50
(1)RAID 5与RAID 0的组合,先做RAID 5,再做RAID 0,也就是对多组RAID 5彼此构成Stripe访问。因为RAID 50是以RAID 5为基础,而RAID 5至少须要3颗硬盘,所以要以多组RAID 5构成RAID 50,至少须要6颗硬盘。以RAID 50最小的6颗硬盘配置为例,先把6颗硬盘分为2组,每组3颗构成RAID 5,如此就获得两组RAID 5,而后再把两组RAID 5构成RAID 0。
(2)RAID 50在底层的任一组或多组RAID 5中出现1颗硬盘损坏时,仍能维持运做,不过若是任一组RAID 5中出现2颗或2颗以上硬盘损毁,整组RAID 50就会失效。
(3)RAID 50因为在上层把多组RAID 5构成Stripe,性能比起单纯的RAID 5高,容量利用率比RAID5要低。好比一样使用9颗硬盘,由各3颗RAID 5再组成RAID 0的RAID 50,每组RAID 5浪费一颗硬盘,利用率为(1-3/9),RAID 5则为(1-1/9)。
6.RAID 60
(1)RAID 6与RAID 0的组合:先做RAID 6,再做RAID 0。换句话说,就是对两组以上的RAID 6做Stripe访问。RAID 6至少需具有4颗硬盘,因此RAID 60的最小需求是8颗硬盘。
(2)因为底层是以RAID 6组成,因此RAID 60能够允许任一组RAID 6中损毁最多2颗硬盘,而系统仍能维持运做;不过只要底层任一组RAID 6中损毁3颗硬盘,整组RAID 60就会失效,固然这种状况的几率至关低。
(3)比起单纯的RAID 6,RAID 60的上层经过结合多组RAID 6构成Stripe访问,所以性能较高。不过使用门槛高,并且容量利用率低是较大的问题。
4、应用
(1)RAID2、三、4较少实际应用,由于RAID5已经涵盖了所需的功能,所以RAID二、三、4大多只在研究领域有实现,而实际应用上则以RAID5为主。
(2)RAID4有应用在某些商用机器上,像是NetApp公司设计的NAS系统就是使用RAID4的设计概念。
5、RAID具体实现方式
1.硬件方式实现:经过BIOS参数调整来实现;
2.软件实现方式:经过软件工具mdadm来实现;
3.RAID设备可命名为/dev/md0、/dev/md一、/dev/md2等等;
6、mdadm工具使用
1.mdadm:是一个模式化工具
2.语法:mdadm [mode] <raiddevice> [option] <component-devices>
mode(模式):
-C:建立;
-A:装配;从新识别此前实现的RAID;
-F:监控;
-f,-r,-a:管理;
<raiddevice>:/dev/md#;
<component-devices>:任意块设备;
option:
-C:建立模式,还有如下子选项:
-n #: 使用#个块设备来建立此RAID;
-l #:指明要建立的RAID的级别;
-a {yes|no}:自动建立目标RAID设备的设备文件;
-c CHUNK_SIZE: 指明块大小;
-x #: 指明空闲盘的个数;
3.支持的RAID级别有:RAID0,RAID1,RAID4,RAID5,RAID6,RAID10
4.-D:显示RAID详细信息:
mdadm -D /dev/md#;
5.管理模式:
-f:标记指定磁盘为损坏;
-a:添加磁盘;
-r:删除磁盘;
6.观察md状态:
cat /proc/mdstat;
7.中止md设备:
mdadm -S /dev/md#;
7、建立一个10G可用空间的RAID5设备
示例:我用四块硬盘作实验,分别是/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde
1.具体步骤以下:
(1)分区:
① fdisk /dev/sdb;(划分/dev/sdb1设备,大小为10G,并修改ID,这里ID修改成fd;同理,其余三块硬盘也按照一样方法分区,这里我用命令来分区;)
②dd if=/dev/sdb of=/dev/sdc bs=1 count=512;
②dd if=/dev/sdb of=/dev/sdd bs=1 count=512;
②dd if=/dev/sdb of=/dev/sde bs=1 count=512;
(2)同步分区:
①partx -a /dev/sdb;
②partx -a /dev/sdc;
③partx -a /dev/sdd;
④partx -a /dev/sde;
(3)使用mdadm建立并定义RAID设备:
① mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1;
(4)显示RAID详细信息:
①mdadm -D /dev/md0;
(5)观察md状态:
①cat /proc/mdstat;
②blkid;
(6)生成配置文件:
①mdadm -Ds /dev/md0 > /etc/mdadm.conf;
②cat /etc/mdadm.onf
(7)格式化:
①mkfs.ext4 /dev/md0;
(8)挂载,写进/etc/fstab文件里实现自动挂载:
①mkdir /mnt/raid;
②/dev/md0 /mnt/raid ext4 defaults 0 0;
③mount -a;
④df -h;
⑤cp -r /etc/* /mnt/raid
(9)测试,模拟磁盘故障:
场景再现:设备/dev/sdb1,/dev/sdc1,/dev/sdd1为活动硬盘;/dev/sde1为空闲硬盘;如今模拟/dev/sdb1硬盘损坏,看空闲硬盘/dev/sde1会不会自动顶替损坏硬盘工做,用户可否正常访问数据,步骤以下:
① mdadm /dev/md0 -f /dev/sdb1;
②mdadm -D /dev/md0;
③mdadm /dev/md0 -r /dev/sdb1;移除磁盘
④mdadm /dev/md0 -a /dev/sdb1;添加磁盘
经过实验证实,空闲硬盘会顶替损坏硬盘工做,用户能够正常访问数据;
(10)测试,模拟真实硬盘故障:
场景再现:假设硬盘/dev/sdd1,/dev/sde1故障了,修复方法:咱们能够找个容量大的硬盘划分分区,并把分区加入RAID成员或者从新加磁盘,方法以下
①fdisk /dev/sda;(划分/dev/sda6,/dev/sda7分区,大小为10G,修改ID,改成fd)
②mdadm /dev/md0 -a /dev/sda6
③mdadm /dev/md0 -a /dev/sda7
##这条命令与上面无关④mdadm –G /dev/md0 –n4 -a /dev/sd##;添加新成员
注:RAID实验能够用硬盘或者分区,用硬盘作RAID实验就不用划分分区;用分区作RAID实验要注意分区大小要一致;
8、删除RAID
步骤:
(1)取消挂载:
①umount /mnt/raid;
(2)中止md设备:
①mdadm -S /dev/md0;
②mdadm -D /dev/md0;
(3)启动md设备:
①mdadm -A /dev/md0;
②mdadm -R /dev/md0;强制启动
③②mdadm -D /dev/md0;
注:中止或启动md设备都须要依赖于/etc/mdadm.conf文件,因此这个文件要事先生成;
(4)删除RAID成员信息:
①blkid;
②mdadm --zero-superblock /dev/sda#;
(5)删除成员分区:
①fdisk /dev/sda;(/dev/sda7,/dev/sda8)
(6)清除/etc/fstab文件信息;
(7)删除md文件:
①rm -f /etc/mdadm.conf
9、磁盘阵列比较表
RAID档次 |
最少硬盘 |
最大容错 | 可用容量 | 读取性能 |
写入性能 | 安全性 | 目的 | 应用产业 |
单一硬盘 | 参考 | 0 | 1 | 1 | 1 | 无 | ||
JBOD | 1 | 0 | n | 1 | 1 | 无(同RAID0) | 增长容量 | 我的(暂时)存储备份 |
0 | 2 | 0 | n | n | n | 一个硬盘异常,所有硬盘都会异常 |
追求最大容量、速度 |
视频剪接缓存用途 |
1 | 2 | n-1 | 1 | n | 1 | 最高,一个正常便可 | 最球最大安全性 | 我的、企业备份 |
5 | 3 | 1 | n-1 | n-1 | n-1 |
高 | 最求最大容量、最小预算 |
我的、企业备份 |
6 | 4 | 2 | n-1 | n-2 | n-2 | 安全性较RAID5高 | 同RAID5,但较安全 | 我的、企业备份 |
10 | 4 | n/2 | n/2 | n | n/2 | 安全性高 | 综合RAID0/1优势,理论速度较快 | 大型数据库、服务器 |
注:一、n表明硬盘总数;
二、JBOD可接到现有硬盘,直接增长容量;