什么是RAID
独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),简称磁盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。
简单来说,RAID把多个硬盘组合成为一个逻辑扇区,因此,操作系统只会把它当作一个硬盘。RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合。由于硬盘价格的不断下降与RAID功能更加有效地与主板集成,它也成为玩家的一个选择,特别是需要大容量存储空间的工作,如:视频与音频制作。
最初的RAID分成不同的档次,每种档次都有其理论上的优缺点,不同的档次在两个目标间获取平衡,分别是增加数据可靠性以及增加存储器(群)读写性能。这些年来,出现对于RAID观念不同的应用。
根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于电脑来说,看起来就像一个单独的硬盘或逻辑存储单元。分为RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50,RAID-60。我们在本次学习过程中只学习RAID-0,RAID-1,RAID-4,RAID-5,RAID-10,RAID-50。
RAID-0
RAID 0亦称为带区集。它将两个以上的磁盘并联起来,成为一个大容量的磁盘。在存放数据时,是分段后分散存储在这些磁盘中的。因为读写时都可以并行处理,所以在所有的级别中,RAID 0的速度是最快的。但是RAID 0既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
一般家用我们可以考虑这种使用方式,目的是增加读写速度和存储量,但是妖姬存放及其重要的数据时最好还是单独存放。
RAID-1
两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原理为在主硬盘上存放数据的同时也在镜像硬盘上写一样的数据。当主硬盘(物理)损坏时,镜像硬盘则代替主硬盘的工作。因为有镜像硬盘做数据备份,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。但无论用多少磁盘做RAID 1,仅算一个磁盘的容量,是所有RAID中磁盘利用率最低的一个级别。
如果用两个不同大小的磁盘建RAID 1,可用空间为较小的那个磁盘,较大的磁盘多出来的空间也可以分区成一个区来使用,不会造成浪费。
RAID-4
RAID-4至少有三块硬盘组成,两块盘用来存储数据,一块盘作为校验盘。分区时是以区块为单位分别存在硬盘中。当我们读取数据时,都会将数据与检验盘里的校验的护具对比,当出现错误时能够将数据进行恢复,由于它是将数据盘同一位置区块数据相加的和作为校验方式,当每个数据盘同一数据区块相加为偶数是校验位是0,奇数时为1,所以当数据盘的同一位置的一个区块发生数据损坏时,可以修复,如果是两个或多个数据盘损坏就没办法进行修复。
RAID 5
RAID 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高,存储成本相对较便宜。
RAID 10/01
RAID 10是先镜射再分区数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。
RAID 01则是跟RAID 10的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。
当RAID 10有一个硬盘受损,其余硬盘会继续运作。RAID 01只要有一个硬盘受损,同组RAID 0的所有硬盘都会停止运作,只剩下其他组的硬盘运作,可靠性较低。如果以六个硬盘建RAID 01,镜射再用三个建RAID 0,那么坏一个硬盘便会有三个硬盘离线。因此,RAID 10远较RAID 01常用,零售主板绝大部分支持RAID 0/1/5/10,但不支持RAID 01。
RAID 50
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。
RAID 50在底层的任一组或多组RAID 5中出现1颗硬盘损坏时,仍能维持运作,不过如果任一组RAID 5中出现2颗或2颗以上硬盘损毁,整组RAID 50就会失效。
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)。
软件模拟RAID
一般在企业里面用的都是硬件的RAID,但是我是在学习环境中,买不起硬件的RAID,学习RAID的功能还可以通过软件来进行模拟学习,我模拟的是RAID5的功能。
首先,第一步,我在虚拟机里面加了六块50G的硬盘(其实用不到这么多,但是还是可以模拟一下的嘛)。我会用这六块硬盘中的几块来进行模拟。
然后我们需要知道一个命令,就是mdadm,这个命令就是用来创造,修改增加关闭RAID的命令,使用它来完成我们对RAID的学习。现在我们先介绍一下这个命令的使用方法,然后在一步一步的完成我们的实验。
一般的,RAID设备可命名为/dev/md0、 /dev/md1、 /dev/md2、/dev/md3等。在本次试验中我们也会将RAID命令为/dev/mdX。
命令:mdadm
格式:mdadm [mode] <raiddevice> [option] <component-devices>
参数:
[mode]:
-C:创建
[option]
-n #:使用#个块设备来创建此RAID
-l #:指定要创建的RAID级别
-a{yes|no}:自动创建目标RAID设备的设备文件
-c chunk_size:指定chunk大小
-x #:指定空闲盘的个数
-A:装配
-F:监控
-D:显示RAID的详细信息
如:mdadm –D /dev/md1
管理:
-f:标记指定磁盘为损坏
-a:添加磁盘
-r:移除磁盘
<raiddevice>:/dev/md# [#={0..111}]
<component-devices>:任意块设备
Mdadm支持的RAID级别是: LINEAR/RAID0, RAID1, RAID4,RAID5, RAID6, RAID10对应的数字是:0,1,4,5,6,10
软RAID的管理
生成配置文件: mdadm –D –s >> /etc/mdadm.conf
停止设备: mdadm –S /dev/md0
激活设备: mdadm –A –s /dev/md0 激活
强制启动: mdadm –R /dev/md0
删除raid信息: mdadm --zero-superblock /dev/sdb1
观察md的状态:
cat /proc/mdstat
软RAID实验
首先,第一步,我们在虚拟机上安装了六个硬盘,如下图所示:
我们就用sdb,sdc,sdd,sde,sdf这五块硬盘做实验。
我们来用这五块盘创建一个RAID5 加一块热备盘。命令如下:
mdadm –C /dev/md0 –a yes –l 5 –n 4 –x 1 –c 1024 /dev/sd{b..f}
解释:
-C /dev/md0 :创建一个RAID块文件
-a yes:如果有此块文件则使用,没有测创建
-l 5 :级别5,也就是RAID5
-n 4 :使用四块硬盘
-x 1:将一块盘作为热备盘
-c 1024 :chunk大小为1024K
/dev/sd{b..f} :我们使用的五块硬盘
创建效果如下图:
然后我们可以使用mdadm –D /dev/md0查看一下RAID的详细信息:
由于RAID5 最大可用空间是(n-1)*min(sda,sdb,sdc,sde……),所以此RAID最大的可用空间是(4-1)*min(50G)=150G
这时候,如果我们模拟一块磁盘损坏了会发生什么呢,我们来看一下:
mdadm /dev/md0 -f /dev/sdc(破坏硬盘sdc,注意格式)
我们很容易就能发现,当我们将一块盘损坏之后,在有热备盘的情况下,热备盘会马上代替损坏的硬盘,并停止使用损坏的硬盘,其他硬盘将数据同步到启用的热备盘中。
假设在我们没有添加热备盘的情况下,根据RAID5的原理,我们依旧可以读出我们的数据,但是如果再有一块硬盘损坏的话,我们的数据就会受损了。这里不再演示。
接下来我么将坏掉的硬盘给移除掉,再添加一块新硬盘进去:
我们假装/dev/sdc是一块好硬盘,再给它加上:
我们组一个磁盘整阵列是要干嘛呢,当然是用在我们的系统上呀,接下来我们将这块盘分区并进行格式化,然后挂载在我们想要挂载的目录下:
分区命令:fdisk /dev/md0(我只将分一个区,全分)
格式化的命令我们使用:mke2fs –t ext4 –L TEST /dev/md0p1
格式化完成后,我就将这块盘挂载在/bakup目录下,完全没问题,接下来我们可以里面创建一些文件:
我们既然可以使用RAID设备自然也可以停止他们,我们可以使用一个命令来停止设备:mdadm –S /dev/md0,我们在停止设备前需要先卸载挂载的设备使用umount
设备能停止就能激活,我们使用的激活命令是mdadm –A –s /dev/md0
我们发现我们使用这个命令,但是没有得到预期的效果,RAID5并没有被激活,反而提醒我们/dev/md0这个设备没有在配置文件中指明。这是由于RAID都是由一个个的硬盘组成的,所以我们需要把一块一块的硬盘给启动起来,这样就显得很是麻烦,我们还有一个方法,那就是写一个配置文件,我们只需要启动指定的设备,其他的设备也都能启动起来,这个配置文件是/etc/mdadm.conf,我们需要做的操作是:mdadm –D –s >> /etc/mdadm.conf
有一点是我们需要注意的是,这步操作是在我们没有停止RAID时做的,如果我们之前没有写配置文件直接停掉,在停掉之后我们是无法在写配置文件的,这一点需要注意。
还有一个强制重启命令,但是我们一边不要使用这个命令:
mdadm –R /dev/md0
当我们的RAID不在使用时,我们需要将RAID信息处理掉,此时我们只需要破坏其中一个块的信息,我们就不能再使用该RAID了:
mdadm --zero-superblock /dev/sdb