早在1978年,美国加州大学伯克利分校就提出了RAID (edundant Array of Independen Disk)虚拟存储系统。RAID即独立冗余磁盘阵列,其思想是将多块独立的磁盘按不同的方式组合为一个逻辑磁盘,从而提高存储容量,提升存储性能或提供数据备份功能。
RAID 存储系统的组合方式根据RAID级别定义。
RAID分为软件RAID和硬件RAID两类。在现有的操作系统中,如Windows、Linux、UNIX等已经集成了软RAID的功能。软件RAID可以实现与硬件RAID相同的功能,但由于其没有独立的硬件控制设备,所以性能不如硬件RAID,但软件RAID 实现简单,不需要额外的硬件设备。
硬件RAID通常需要有RAID卡,RAID卡本身会有独立的控制部件和内存,所以不会占有系统资源,效率高、性能强。
当然目前市面上有很多主板已经集成了RAID卡,具体的使用方式可以参考硬件说明书。
现在RAID存储系统被广泛应用于生产环境作为存储解决方案。
RAID根据组合的方式不同,有多种设计解决方案,以下介绍儿种常见的RAID方案(RAID级别)。
多块磁盘组合为RAID 0后,数据将被分割并分别存储在每块硬盘中,
所以能最大地提升存储性能与存储空间,但无法容错,RAID0至少需要两块磁盘
缺点:因为没有校验与备份,两块硬盘中如果有一块磁盘损坏,
即磁盘中的任何一个数据块损坏将导致整个文件无法读取。
多块磁盘组合为RAID 1后,数据将被同时复制到每块硬盘中,制作这种磁盘阵列至少需要两块硬盘,
该级别的RAID只要有一块磁盘可用,即可正常工作,
该级别的阵列安全性是最好的,磁盘利用率是最低的
缺点: RAID 1的写入效率低下。此外,磁盘的利用率极低,
如果两块磁盘的存储空间均为120GB,则RaID 1的总存储空间依然为120GB。
多块磁盘组合为RAID 2后,数据将以位(bit) 为单位同步式分别存储在不同的硬盘上,
并采用海明码( 海明码是一种 具有纠错功能的校验码)对数据进行校验与恢复。
如果有一个文件要写入RAiD2,则该文件会被分成数据位分别同步写入不同的磁盘中,
DATA1与DATA2进行海明码运算后再写入校验盘中,其他部分依此类推。
拥有校验位的RAID2允许E三块磁盘中的任何一块磁盘损坏,
并能够对未损坏的两块磁盘进行运算后还原已损坏磁盘上的数据,从而实现数据恢复的功能。
RAID 2对大数据量的读写具有很高的性能,但对少量数据的读写时性能反而不好,该磁盘阵列至少需要三块硬盘。
下面还有RAID3(字节级别的校验式条带存储)
RAID4 (数据块级别的校验式条带存储))
RAID5 (数据块级别得到分布式的校验式条带存储))
RAID 10(镜像与条带存储)
1.查看磁盘信息
[root@localhost ~]# fdisk -l..部分内容省略...
Disk /dev/sdb: 2147 MB, 2147483648 bytes255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065★512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/sdc: 2147 MB, 2147483648 bytes255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdc doesn't contain a valid partition table
Disk /dev/sdd: 2147 MB, 214 7483648 bytes255 heads, 63 sectors/ track, 261 cyl inders
Units = cyl inders of 16065★512 = 8225280 bytes
Disk /dev/sdd doesn't contain a valid partition table
从以上输出信息可以看出,本机有sdb、sdc、 sdd三块硬盘未分区,如果需要在Linux中实现软RAID,可以将每块硬盘分-一个区组建RAID,也可以对硬盘分多个区实现软RAID,这里我们将每块硬盘分两个区。
[root@localhost ~]# fdisk /dev/sdb
划分两个分区 sd1 sd2后 其他两块磁盘执行相同的操作,这里就不在赘述
[root@localhost ~]# partprobe -a
Linux中创建磁盘阵列可以使用mdadm命令,在CentOS 7中,目前支持的RAID级别RAIDO、RAID1、 RAID4、RAIDS、RAID6、 RAID10。
下面我们看看该命令的使用方法。
名称: mdadm
描述:管理Linux软件RAID设备。
用法: mdadm [模式]选项<raid 设备>
创建软件RAID (create)。-1 指定RAID级别(level)。
指定磁盘个数。
指定备用设备个数。
[root@localhost ~]# mdadm -C /dev/md0 -1 0 -n 3 /dev/sdb1 /dev/sdc1 , dev/sdd1
mdadm: array /dev/md0 started.
[ root@ localhost ~] # mdadm -C /dev/md1 -1 5 -n 3-x 1 \
> /dev/sdb2 /dev/sdc2 /dev/sdd2 /dev/sde2
> mdadm: array /dev/md1 started.
以上两条命令分别创建了名称为md0的RAID0设备以及名称为md1的RAID5设备,这里的名称可以根据自己的习惯自行指定。
刚刚创建的RAIDO及RAID 5的详细信息如下。
[root@localhost ~]# mdadm --detail /dev/md0/dev/md0:
Version : 0. 90
Creation Time : Thu May 17 03:46:55 2012
Raid Level : raid0
Arrav size : 2963520 12.83 GiB 3.03 GB)
#查看md0信息
#创建时间#RAID级别
#RAID磁盘空间
Etecetec
Preferred Minor : O
Persistence : superblock is persistent IUpdate Time : Thu May 17 03:46:55 2012
State : cleanActive Devices : 3Working Devices : 3Failed Devices : CSpare Devices : 0
Chunk Size : 64K
UUID : 62e9bd3e: f4dcf02d: 31 9e2a62: 8099eb72 ix 1 UUIDEvents : 0.1Numbe r Major
0 8 01 82 8
/dev/md1 :
Number Major
0 81 8
/dev/ sdb1/dev/ sdc1/dev/ sdd1#*~ md1 íTï ÉA
Minor1834
RaidDevice State
0 active sync1 active sync
/dev/ sdb2/dev/ sdc2
[root@localhost ~]# mkfs. xfs /dev/md0[root@localhost ~]# mkdir /raid0
[ root@localhost ~]# mount /dev/md0 /raid0[root@localhost ~]# mkfs.xfs /dev/md1[root@localhost ~]# mkdir /raid5
[root@localhost ~]# mount /dev/md1 /raid5
将磁盘阵列设备设置为开机自动挂载项,CeniOS 系统开机会读取磁盘阵列的配置文件/etc/mdadm.conf以启动RAID设备。下面两条命令可以帮助我们快速创建这样的配置文件,DEVICE行代表填写所有磁盘阵列的设备成员名称,ARRAY 行描述磁盘阵列具体的基本信息,包括名称、级别、UUID等信息。
[root@localhost ~] #echo "DEVICE /dev/sdb1 /dev/sdb2 \
/dev/sdc1 /dev/sdc2 /dev/sdd1 /dev/sdd2 /dev/sde2" > /etc/mdadm . conf
[root@localhost ~]# mdadm -Evs > > / dev/ mdadm. conf
ARRAY /dev/md/0 level=raid0 metadata=1.2 num-devices=32591cc4d:a588f799:88123b79 name=centos7 . example. com:0
devices=/dev/ sddl, /dev/ sdcl, /dev/ sdb1
ARRAY /dev/md/1 level=raid5 metadata=1.2 num-devices= 3 6bc3a 612: 969239d8: 7a78a301 name=centos7. example. com: 1
spares=1 devices=/dev/sde2, /dev/sdd2, /dev/ sdc2, /dev/sdb2
[root@localhost ~]# echo "/dev/md0 /raid0 xfs defaults 0 0" >> /etc/fstab
[root@localhost ~]# echo "/dev/md1 /raid5 xfs defaults 0 0" >> /etc/fstab
UUID=4282a2c2:
UUID=d6cc7bdc:
**************************
★* 普通磁盘:写入模拟 ★★
**************************
[root@localhost ~]# time dd if=/dev/zero of=txt bs=1M count=1000
1000+0 records in1000+0 records out
1048576000 bytes (1.0 GB) copied, 21. 7965
real 0m23.262s
user 0m0.001s
sys 0m2.209s
seconds, 48.1 MB/s
可以看出,对普通磁盘写入1GB的数据所需总时间为23.262s.
** RAID 0:写入模拟 ★*★********
[root@localhost raid0]# time dd if=/dev/zero of=txt bs=1M count =1000
1000+0 records in1000+0 records out
1048576000 bytes (1.0 GB) copied, 3. 87193 seconds, 271 MB/s
real 0m4.308s
user 0m0.001s
sys 0ml.604s
可以看出,对RAIDO写入1GB数据所需总时间为4.308s。
★★★★★*★★★****************
工件 ★★ RAID 5:写入模拟★*
★★★★★★★★**★**************
[root@localhost raid5]# time dd if=/dev/zero of=txt bs=1M count= 1000
1000+0 records in1000+0 records out
1048576000 bytes (1.0 GB) copied, 12. 5047 seconds, 83.9 MB/s
real 0m12.614s
use r 0m0.004s
sys 0m3.705s
可以看出,由于RAID 5需要生成校验位数据,
所以写入数据的速度比RAIDO慢,但比普通磁盘快,写入1GB数据所需总时间为12.614s。
[root@localhost raid5]# mdadm /dev/md1 -f /dev/sdb2
mdadm : set /dev/sdb2 faulty in /dev /md1
注释:使用-f选项( failed)模拟磁盘sdb2的损坏。
由于上面做性能测试时已经往RAID5中写入了1GB的数据,所以使用命令模拟磁盘损坏后,快速查看Rald详细信息可以看出正在使用/dev/sde2重建数据(还原数据),而原来的/dev/sdb2成了损坏的空闲设备。
[root@localhost ~]# mdadm --detail /dev/md1
Numbe r
Major
Minor
RaidDevice State