分类: 服务器与存储
2015-03-25 17:53:32
RAID:Redundant Arrays of IIndependent Disks (独立冗余磁盘阵列)
扇区:磁盘级别; data block:数据级别
IDE(ATA),133Mbps,并行
SATA:6Gbps,穿行
USB:串行
SCSI:320Mbps,并行总线
SAS:2.5英寸
RAID:将许多硬盘做成一个阵列,当成一个逻辑盘来用就叫RAID
级别:进代表磁盘组织方式不同,没有上下之分
考虑速度和数据的可用性
RAID revel:
0:条带模式,数据分散存储在不同磁盘上,实现并行的读写,所以读写性能强,但是不允许任何磁盘损坏
性能提升:读,写
冗余能力(容错能力):无
空间利用率:n
至少2快
1:镜像:也就是相同的数据分别读入两块或多块磁盘中。允许其中的某块磁盘损坏,但是读写慢
性能表现:写性能下降,读性能提升
冗余能力:有
空间利用率:1/2
至少两块
2:汉明码校验
RAID 2是RAID 0的改良版,以汉明码(Hamming Code)的方式将数据进行编码后分割为独立的位元,并将数据分别写入硬盘中。因为在数据中加入了错误修正码(ECC,Error Correction Code),所以数据整体的容量会比原始数据大一些。
3:奇偶校验:
RAID3的数据存取方式和RAID2一样,把数据以位为单位来分割并且存储到各个硬盘上,并且在数据安全方面以奇偶校验取代海明码做错误校正及检测,所以只需要一个额外的校验盘。奇偶校验值的计算是以各个硬盘的相对应位进行异或的逻辑运算,然后将结果写入奇偶校验硬盘,在通常情况下,RAID3比较适合大文件类型且安全性要求较高的应用,如视频编辑、硬盘播出机、大型数据库等。
4:奇偶校验:
RAID4即带奇偶校验码的独立磁盘结构,RAID4和RAID3很象。在独立访问阵列中,每个磁盘都是独立运转的,因此不同的I/O请求可以并行地满足,在数据分割上RAID3对数据的访问是按位进行的,RAID4是以数据块为单位,小型文件的写入要比RAID3快,因其校验计算较简单而非进行位的计算,但校验硬盘和RAID3一样,也形成其性能的瓶颈。在失败恢复时,它的难度比RAID3大得多,控制器的设计难度也要大许多,而且访问数据的效率不怎么好。
5:奇偶校验:
RAID 5 是一种存储性能、
数据安全和存储成本兼顾的存储解决方案。 RAID 5可以理解为是RAID 0和RAID 1的折中方案。RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低,是目前运用较多的一种解决方案。
数据平均分配到 n-1个盘,最后一个盘放校验码,读取的时候需要全读出来,校验出来
坏一个盘可以恢复,坏两个以上数据才会完全损坏,速度取决于校验码盘的速率。校验码盘比其他盘压力大,因此,轮换做校验码盘是raid5的特点
性能表现:读,写提升
冗余能力:有
空间利用率:(n-1)/n
至少3块
5E:相当于5的升级版
RAID 5E(RAID 5 Enhencement): RAID 5E是在 RAID 5级别基础上的改进,与RAID 5类似,数据的校验信息均匀分布在各硬盘上,但是,在每个硬盘上都保留了一部分未使用的空间,这部分空间没有进行条带化,最多允许两块物理硬盘出现故障。看起来,RAID 5E和RAID 5加一块热备盘好象差不多,其实由于RAID 5E是把数据分布在所有的硬盘上,性能会与RAID5 加一块热备盘要好。当一块硬盘出现故障时,有故障硬盘上的数据会被压缩到其它硬盘上未使用的空间,逻辑盘保持RAID 5级别。
6:奇偶校验:
与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”非常差。较差的性能和复杂的实施方式使得RAID 6很少得到实际应用。
7:新标准
这是一种新的RAID标准,其自身带有智能化实时操作系统和用于存储管理的软件工具,可完全独立于主机运行,不占用主机CPU资源。RAID 7可以看作是一种存储计算机(Storage Computer),它与其他RAID标准有明显区别。除了以上的各种标准(如表1),我们可以如RAID 0+1那样结合多种RAID规范来构筑所需的RAID阵列,例如RAID 5+3(RAID 53)就是一种应用较为广泛的阵列形式。用户一般可以通过灵活配置磁盘阵列来获得更加符合其要求的磁盘存储系统。
10:raid1+0
RAID10也被称为镜象阵列条带。象RAID0一样,数据跨磁盘抽取;象RAID1一样,每个磁盘都有一个镜象磁盘, 所以RAID 10的另一种会说法是 RAID 0+1。RAID10提供100%的数据冗余,支持更大的卷尺寸,但价格也相对较高。对大多数只要求具有冗余度而不必考虑价格的应用来说,RAID10提 供最好的性能。使用RAID10,可以获得更好的可靠性,因为即使两个物理驱动器发生故障(每个阵列中一个),数据仍然可以得到保护。RAID10需要4 + 2*N 个磁盘驱动器(N >=0), 而且只能使用其中一半(或更小, 如果磁盘大小不一)的磁盘用量, 例如 4 个 250G 的硬盘使用RAID10 阵列, 实际容量是 500G。
性能表现:读写提升
冗余能力:有
空间利用率:1/2
至少4块
234一般没人用
50:先5后0
它具有RAID 5和RAID 0的共同特性。它由两组RAID 5磁盘组成(每组最少3个),每一组都使用了分布式奇偶位,而两组硬盘再组建成RAID 0,实验跨磁盘抽取数据。RAID 50提供可靠的数据存储和优秀的整体性能,并支持更大的卷尺寸。即使两个物理磁盘发生故障(每个阵列中一个),数据也可以顺利恢复过来。RAID 50最少需要6个驱动器,它最适合需要高可靠性存储、高读取速度、高数据传输性能的应用。
性能表现:读写提升
冗余能力:有
空间利用率:(n-2)/n
至少6块
jbod:简单的说就是将磁盘摞起来,当做一个磁盘来用,jbod就不属于raid了
性能表现:无
冗余能力:无
空间利用率:1
至少2个
企业中一般 1+0,没钱就用5
总结:
类型 |
读写性能 |
安全性 |
磁盘利用率 |
成本 |
应用方面 |
RAID0 |
最好(因并行性而提高) |
最差(完全无安全保障) |
最高(100%) |
最低 |
个人用户 |
RAID1 |
读和单个磁盘无分别,写则要写两边 |
最高(提供数据的百分之百备份) |
差(50%) |
最高 |
适用于存放重要数据,如服务器和数据库存储等领域。 |
RAID5 |
读:RAID 5=RAID 0(相近似的数据读取速度)
写:RAID 5<对单个磁盘进行写入操作(多了一个奇偶校验信息写入) |
RAID
5 |
RAID 5>RAID 1 |
RAID
5 |
是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 |
RAID10 |
读:RAID10=RAID0
写:RAID10=RAID1 |
RAID10=RAID1 |
RAID10=RAID1(50%) |
RAID10=RAID1 |
集合了RAID0,RAID1的优点,但是空间上由于使用镜像,而不是类似RAID5的“奇偶校验信息”,磁盘利用率一样是50% |
RAID分类:
1、硬件RAID:
如果主板集成了RAID,或者RAID适配器去配置的话去BIOS,安装操作系统的时候是安装在raid上,如果操作系统不识别raid卡,需要在安装操作系统的时候提供驱动程序。
2、软件RAID:
内核中的MD模块支持支持(md模块:multi disks),软件raid性能取决于cpu
在/dev/下显示 mdN,N代表数字,如果操作系统坏了,内核也就坏了,所以raid中的东西就读不出来了,所以要标记成内核识别的类型,fd:linux软raid,用不用看水平
下面介绍一下mdadm的用法和常用选项
mdadm:将任何块设备做成RAID
模式化命令:
创建模式:创建raid设备的
-C
专用选项:
-l N:级别
-n N:设备个数
-a{yes|no}:自动为其创建设备文件
-c N:指定的数据的大小默认64k
-x N:指定空闲盘个数 -x和-n数一样
管理模式:停止,拆散
--add(-a),--remove(-r)(移除坏的)
mdadm /dev/md1 -r /dev/sdb1
mdadm /dev/md1 -a /dev/sdb2 添加盘,和原来的盘的大小相同
--fail,-f,--set-faulty:模拟损坏
mdadm /dev/md1 -f /dev/sdb1
-S(--stop):停止一个阵列
mdadm -S /dev/md1
监控模式:是否正常
-F(--monitor):选择监控模式
-D(--detail):显示指定raid的详细信息
mdadm -D /dev/md1
-D(--detail) --scan 当前主机raid设备
将当前raid信息保存至配置文件,以便以后进行装配:
mdadm -D --scan(-s) >/etc/mdadm.conf
直接 mdadm -A /dev/md1 就行了
增长模式:添加盘用到
-G(--grow):改变激活阵列的大小或形态
装配模式:重新识别为raid
-A: mdadm -A /dev/md1 /dev/sda1 /dev/sdc1
举个例子:
创建一个1G的RAID1
需要:4个512或者2个1G硬盘,我们就用2个1G的
1、加硬盘,分区,修改id(调整类型为fd)
Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ fd Linux raid autodetect
/dev/sdc1 1 130 1044193+ fd Linux raid autodetect
/dev/sdd1 1 130 1044193+ fd Linux raid autodetect
这里的sdd1是在模拟故障时做备份的
cat /proc/partitions :查看可用分区
[root@localhost ~]# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 204800 sda1
8 2 10485760 sda2
8 3 2097152 sda3
8 16 1048576 sdb
8 17 1044193 sdb1
8 32 1048576 sdc
8 33 1044193 sdc1
8 48 1048576 sdd
8 49 1044193 sdd1
如果没有看到分区,就用partprobe这个命令刷新一下
2、创建raid
mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sd{b1,c1}
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sd{b1,c1}
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
cat /proc/mdstat :查看raid设备的状态
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
1043648 blocks super 1.2 [2/2] [UU]
unused
devices:
解释:
md0:raid名字
active:显示活动的硬盘,也就是可用的硬盘,[1]代表在阵列中的顺序,这个顺序可
以从mdadm -D /dev/md0中的number中体现
1043648个block ,
[UU]:都在使用中,也就是正常运行的如果是 [U_ ]的话,_就是出问题的,faulty状态
3、格式化:
mke2fs -j /dev/md0
格式化之后就可以用了。
4、挂载:
[root@localhost ~]# mount /dev/md0 /mnt
[root@localhost ~]# cp /root/install.log /mnt/#复制一个文件,后面做恢复实验
5、模拟磁盘损坏:
a)现在模拟/dev/sdb1损坏
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0](F)
1043648 blocks super 1.2 [2/1] [_U] <==========有个 _ 的是坏的
unused
devices:
b)移除:坏了就要拔掉啊
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md0
c)添加一个硬盘:拔掉硬盘就要再上一块
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdd1
mdadm: added /dev/sdd1
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdd1[2] sdc1[1]
1043648 blocks super 1.2 [2/2] [UU]
unused
devices:
查看里面的文件:
less /mnt/install.log 没有任何问题
d)阵列不想用了:
[root@localhost ~]# umount /mnt/
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
如果/dev/md0删除就彻底删除了这个阵列
e)我又想使用了。
[root@localhost ~]# mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1
mdadm: /dev/md0 assembled from 1 drive - need all 2 to start it (use --run to insist).
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : inactive sdc1[1](S) sdb1[0](S) S的意思处于热备状态的
2087363 blocks super 1.2
unused
devices:
在重组raid的时候出错了。出现的是需要2个硬盘同时来启动,但是上面有一个坏了,她就起不来了。所以此时这样
[root@localhost ~]# mdadm --run in insist /dev/md0
Personalities : [raid1]
md0 : active raid1 sdc1[1]
1043648 blocks super 1.2 [2/1] [_U]
unused
devices:
此时又可以添加硬盘了。
指定配置文件:
默认的在我的虚拟机上是没有配置文件的,所以要自己生成了,配置文件有什么作用?
配置文件的作用最大的一个好处就是 装配RAID的时候,可以根据配置文件来装配,如果
没有配置文件,你装配的时候就是:
mdadm -A /dev/md0 /dev/sdb1 /dev/sdc1
如过有配置文件的话,你装配的时候就会去扫描你的配置文件,自动进行装配,
此时,你只需要装配raid不用指定使用的硬盘了
mdadm -A /dev/md0
生成配置文件:可以自己手动去touch下面介绍第二种方法
[root@localhost ~]# mdadm -D --scan >/etc/m
--scan = -s 扫描配置文件
下面是效果
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
[root@localhost ~]# mdadm -A /dev/md0
mdadm: /dev/md0 has been started with 2 drives.
raid优化:
软raid每一次生成chunk 的时候会计算占用多少block,所以格式化的时候 -E stride=倍数
倍数就是 chunk 除以 block的商默认chunk=64k,如果格式化的时候block是4k那么stride就等于16了,这样会优化raid性能
mke2fs -j -E stride=16 -b 4096 /dev/md0