Linux的磁盘与文件系统(3)----RAID 阵列

RAID 阵列

问题引入:    磁盘容量不够用怎么办?
                     万一遇到自然或者人为因素导致数据损坏或者丢失,怎么能够回复过来?

RAID  :   容错式廉价磁盘阵列(Redundant Arrays of Inexpensive Disks)

RAID可以通过一种技术,将多个较小的磁盘整合成为一个较大的磁盘装置。(不仅仅是具有储存功能,还具有数据保护功能)
RAID由于选择的等级(level)不同,而且使得整合后的磁盘具有不同的功能。
a)RAID-0 (等量模式, stripe):效能最佳
b)RAID-1 (映射模式, mirror):完整备份
c)RAID 0+1,RAID 1+0
d)RAID 5:效能与数据备份的均衡考量
e)Spare Disk:预备磁盘


RAID-0  (等量模式):效能最佳
这种模式如果使用相同型号与容量的磁盘来组成时,效果较佳。
这种模式的RAID 会将磁盘先切出等量的区块(如4KB),然后当一个文件要写入RAID 时,该文件会依据区块的大小切割好,之后再依序放到各个磁盘里面去。
由于每个磁盘会交错的存放数据,因此当你的数据要写入RAID 时, 数据会被等量的放置在各个磁盘上面。
举例来说,你有两颗磁盘组成RAID-0 ,当你有100MB 的数据要写入时,每个磁盘会各被分配到50MB 的储存量。

RAID-0特点
1、组成RAID-0 时,每颗磁盘(Disk A 与Disk B) 都会先被区隔成为小区块(chunk)。
2、当有数据要写入RAID 时,数据会先被切割成符合小区块的大小,然后再依序一个一个的放置到不同的磁盘去。
3、由于数据已经先被切割并且依序放置到不同的磁盘上面,因此 每颗磁盘所负责的数据量都降低了。
4、照这样的情况来看,越多颗磁盘组成的RAID-0 效能会越好,因为每颗负责的数据量就更低了,这表示 我的数据可以分散让多颗磁盘来储存,当然效能会变的更好。
5、磁盘总容量也变大了,因为每颗磁盘的容量最终会加总成为RAID-0  的总容量。

缺点
1,必须要自行负担数据损毁的风险,由上图我们知道文件是被切割成为适合每颗磁盘分区区块的大小,然后再依序放置到各个磁盘中。如果某一颗磁盘损毁了,那么 文件数据将缺一块,此时这个文件就损毁了由于每个文件都是这样存放的,因此RAID-0 只要有任何一颗磁盘损毁,在RAID 上面的所有数据都会遗失而无法读取。
2,如果使用不同容量的磁盘来组成RAID-0 时,由于数据是一直等量的依序放置到不同磁盘中, 当小容量磁盘的区块被用完了,那么所有的数据都将被写入到最大的那颗磁盘去。

例:我用200G 与500G 组成RAID-0 ,那么最初的400GB 数据可同时写入两颗磁盘(各消耗200G 的容量),后来再加入的数据就只能写入500G 的那颗磁盘中了。此时的效能就变差了,因为只剩下一颗可以存放数据。


RAID-1(映射模式,mirror):完整备份

RAID-1需要相同的磁盘容量的,最好是一模一样的磁盘。如果是不同容量的磁盘组成RAID-1时,那么总容量将会按照最小的那个磁盘来。

RAID-1主要是让同一份数据,完整的保存在两颗磁盘上头。

例:如果我有一个100MB 的文件,且我仅有两颗磁盘组成RAID-1  时,那么这两颗磁盘将会同步写入100MB 到他们的储存空间去。因此,整体RAID 的容量几乎少了50%。由于两颗硬盘内容一模一样,好像镜子映照出来一样,所以我们也称他为mirror 模式。


RAID-1特点
1、一份数据传送到RAID-1 之后会被分为两股,并分别写入到各个磁盘里头去。
2、由于同一份数据会被分别写入到其他不同磁盘,因此如果要写入100MB 时,数据会被复制多份到各个磁盘,结果就是数据量感觉变大了。
3、因此在大量写入RAID-1 的情况下,写入的效能可能会变的非常差(因为我们只有一个南桥)。

优点:
由于两颗磁盘内的数据一模一样,所以 任何一颗硬盘损毁时,你的数据还是可以完整的保留下来的!所以我们可以说,RAID-1 最大的优点大概就在于数据的备份!读取的效能则还可以,这是因为数据有两份在不同的磁盘上面,如果多个processes 在读取同一笔数据时,RAID 会自行取得最佳的读取平衡。
缺点:
不过由于磁盘容量有一半用在备份,因 此总容量会是全部磁盘容量的一半而已。RAID-1 的写入效能不佳。

RAID 0+1,RAID 1+0

(1)先让两颗磁盘组成RAID 0,并且这样的配置共有两组;
(2)将这两组RAID 0 再组成一组RAID 1。这就是RAID 0+1。
反过来说,RAID  1+0 就是先组成RAID-1 再组成RAID-0 的意思。

RAID5:效能和数据备份的均衡考量
RAID-5 至少需要三颗以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似RAID-0 ,不过每个循环的写入过程中,在每颗磁盘还加入一个 同位检查数据(Parity) ,这个数据会记录其他磁盘的备份数据,用于当有磁盘损毁时的救援。


就是假设A0数据消失,我根据B0和parity0也可以推算出A0的值。

优缺点:
在读写效能的比较上,读取的效能与RAID-0 差不多,不过写的效能一般,这是因为要写入RAID 5 的数据还得要经过计算同位检查码(parity) 的关系。由于加上这个计算的动作,所以写入的效能与系统的硬件关系较大。


Spare Disk : 预备磁盘的功能

所谓的spare disk 就是一颗或多颗没有包含在原本磁盘阵列等级中的磁盘,这颗磁盘平时并不会被磁盘阵列所使用,当磁盘阵列有任何磁盘损毁时,则这颗spare disk 会被主动的拉进磁盘阵列中,并将坏掉的那颗硬盘移出磁盘阵列!然后立即重建数据系统。




RAID阵列

磁盘阵列的优点
你的系统如果需要磁盘阵列的话,其实重点在于:
数据安全与可靠性:指的并非资讯安全,而是当硬件(指磁盘) 损毁时,数据是否还能够安全的救援或使用之意;
读写效能:例如RAID 0 可以加强读写效能,让你的系统I/O 部分得以改善;
容量:可以让多颗磁盘组合起来,故单一文件系统可以有相当大的容量。
尤其数据的可靠性与完整性更是使用RAID 的考量重点!毕竟硬件坏掉换掉就好了,软件数据损毁那可不是闹着玩的!

软件磁盘阵列
硬件磁盘阵列卡较贵,发展出利用软件来模拟磁盘阵列的功能,这就是所谓的软件磁盘阵列(software RAID)。目前计算机CPU性能较强,以前因CPU的处理能力不足导致的速度限制现在已经不存在 !
CentOS提供的软件磁盘阵列为mdadm这套软件,这套软件会以partition 或disk 为磁碟的单位
mdadm支持RAID0/RAID1/RAID5/spare disk 等,而且提供的管理机制还可以达到类似热拔插的功能



接下来演示RAID0 ,RATD1, RAID5  的创建

(这里创建了八个硬盘)RAID0 需要两块硬盘,RAID1 需要两块硬盘,RAID5需要四块硬盘




fdisk   -l     查看  。   确实都存在   从  sdc   -    sdj



创建RAID0
(用sdc,sdd来演示)

fdisk  /dev/sdc
fdisk  /dev/sdd




修改分区类型
默认新建分区的类型是Linux,代号83,我们需要将其修改为raid 类型。输入"t" ,然后输入"L" 列出所有的文件格式,这里我们选择"fdLinux raid auto", 输入"fd",然后再输入"p" 查看分区情况,这是分区格式已经变成了Linux raid autodetect.




输入"w" 保存分区。


同理设置sdd


再接下来的操作的时候,先fdisk -l   /dev/sdc  /dev/sdd   


开始创建RAID0



-C        create;创建阵列
/dev/md0    阵列的设备名称
-a         auto    同意创建设备。  推荐使用   -ayes 参数一次性创建
-l      阵列模式     支持的阵列模式有linear, raid0, raid1, raid4, raid5, raid6, raid10,  multipath, faulty, container
-n    --raid-devices     阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目;
/dev/sd{c,d}1参与创建阵列的磁盘名称


查看raid0状态




还需要创建RAID配置文件。不然在启动的时候就会失败

创建/etc/mdadm.conf
# echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf
# mdadm–Ds >> /etc/mdadm.conf



先格式化磁盘阵列
mkfs.ext4  /dev/md0
建立挂载点并挂载
mkdir   /mnt/raid0
mount /dev/md0   /mnt/raid0


此时可以看到我们的/dev/md0是2.0G

最后一步,写入/etc/fstab 。目的是为了下次开机我们能够正常使用我们的RAID设备。





创建RAID1   (使用/dev/sde,/dev/sdf)

其实步骤和创建RAID0差不多

1,新建分区并修改分区类型。   fdisk  /dev/sde        fdisk /dev/sdf
2,开始创建RAID1     mdadm -C /dev/md1  -ayes -l1 -n2  /dev/sd[e,f]1
3,查看raid的状态      cat  /proc/mdstat    或者     mdadm -D /dev/md1
4,添加raid1到RAID配置文件/etc/mdadm.conf 并修改   
 echo  DEVICE /dev/sd{e,f}1 >>/etc/mdadm.conf
mdadm -Ds >> /etc/mdadm.conf
5,格式化磁盘阵列     mkfs.ext4  /dev/md1
6,建立挂载点并挂载     
#mkdir/mnt/raid1
# mount /dev/md1 /mnt/raid1/
7,写入/etc/fstab
8,reboot即可



创建RAID5

RAID5 至少需要三块硬盘,我们拿/dev/sdg,  /dev/sdh, /dev/sdi,/dev/sdj这四块硬盘来做实验,三块做为活动盘,另一块做为热备盘。


1,新建分区并修改分区类型。 fdisk /dev/sdg  fdisk  /dev/sdh       fdisk /dev/sdi   fdisk /dev/sdj
2,开始创建RAID5    mdadm -C /dev/md5  -ayes -l5 -n2  -x1 /dev/sd[g,h,i,j]1
3,查看raid的状态      cat  /proc/mdstat    或者     mdadm -D /dev/md5
4,添加raid5到RAID配置文件/etc/mdadm.conf 并修改   
 echo  DEVICE /dev/sd{g,h,i,j}1 >>/etc/mdadm.conf
mdadm -Ds >> /etc/mdadm.conf              (在这里会将md0的内容复写一遍,所以需要手动删除,这是因为我们在一个虚拟机内。)
5,格式化磁盘阵列     mkfs.ext4  /dev/md5
6,建立挂载点并挂载     
#mkdir/mnt/raid5
# mount /dev/md5     /mnt/raid5/
7,写入/etc/fstab
8,reboot


RAID维护

1,启用阵列
mdadm   -As   /dev/md0
-A      启用已存在的阵列
-s       以/etc/mdadm.conf为依据
没有创建mdadm.conf文件(或文件有误),可采用如下方法启用
#mdadm      –A   /dev/md0    /dev/sd[bc]1
mdadm-Ds
2.停止阵列
#mdadm   –S   /dev/md0
3.显示阵列详细信息
#mdadm   –D   /dev/md0


下面我们将模拟raid5 中磁盘损坏来讲解软RAID 的维护操作


1,向/raid5 里面写入测试数据,以验证磁盘损坏后数据是否丢失:
   # touch test_raid5.failed# touch test_raid5.fail
   # ls


2,模拟磁盘损坏     
         当RAID检测到某个磁盘有故障时,会自动标记该磁盘为故障磁盘,并且停止对故障磁盘的读写操作。
我们将/dev/sdh1模拟为出现故障的磁盘

#mdadm  /dev/md5  -f  /dev/sdh1



3,查看重建状态。
在上面创建RAID 5过程中,我们设置了一个热备盘,所以当有标记为故障磁盘的时候,热备盘会自动顶替故障磁盘工作,阵列也能够在短时间内实现重建。通过查看"/proc/mdstat" 文件可以看到当前阵列的状态。

在这里,由于我创建的文件小,我的已经完成重建了。



#mdadm -D /dev/md5


4,查看之前的测试数据是否还在


数据正常,没有丢失

5,移除损坏的磁盘


显示一下



新增热备磁盘




向RAID中增加存储硬盘

首先先在虚拟机上增加一个硬盘,具体操作和前几步一模一样。

向RAID中新增加一块硬盘  (此时就是把硬盘当做了热备盘)


我们需要把热备盘加入到RAID中的活动盘中。



说明一下:如果是 -n5的话,那么就会把sdh1 ,sdk1两个盘都放到了活动盘上。如果只是想加入一个的话,-n4就可以了。



然后扩容一下文件系统。
RAID 构建完毕后,阵列容量增加,但是文件系统还没有增加,这时
我们还需要对文件系统进行扩容。
# df–TH
# resize2fs /dev/md5
# df–TH


修改RAID配置文件 /etc/mdadm.conf

reboot






猜你喜欢

转载自blog.csdn.net/lvxiaojiahuo/article/details/79980901
今日推荐