linux学习32 面试必备技能-Linux平台RAID技术全面讲解
一、回顾
1、mount/umount,fstab配置文件,ext文件系统基础原理,read,bash
二、磁盘阵列
1、RAID:
Redundant Arrays of Inexpensive Disks:廉价冗余磁盘阵列,今天这个Inexpensive 已经被改名为Independent(独立),即独立冗余磁盘阵列。
2、早期的时候单块硬盘 sata接口的7200转硬盘每秒的iops大概在70-100个,现在的固态硬盘iops最大也就600个左右。
3、Berkeley(伯克利):A case for Redundent Arrays of Inexpensive Disks RAID (论文名称)
提高IO能力:
磁盘并行读写
提高耐用性:
磁盘冗余来实现
级别:多块磁盘组织在一起的工作方式有所不同;
RAID实现的方式:
外接式磁盘阵列:通过扩展卡提供适配能力
内接式RAID:主板集成RAID控制器
Software RAID:软件方式的raid
三、RAID的级别(level)
1、RAID-0 :0,条带卷,strip;
a、阵列卡会将需要存储的数据先切割成相应的块(此处的块为chunk而不是磁盘中的block块),然后并行分散写入到阵列卡下所有的磁盘上。
b、读,写性能提升
c、可用空间:N*min(S1,S2,...)
d、无容错能力
e、最小磁盘数:2,2+
2、RAID-1:1,镜像卷,mirror
a、读性能提升,写性能略有下降
b、可用空间:1*min(S1,S2,...)
c、有冗余能力
d、最少磁盘数:2,2+..
3、RAID-2
4、RAID-4
a、三块盘也是将数据切割为chunk存储,然后两块数据盘和一块校验盘,任意一块数据盘和校验盘做异或就能算出另一块盘的数据,如果某一块盘坏了通过校验就能找到对应的盘的数据。如果其中一块数据盘坏了也是可以读数据的,不过坏了的盘的数据需要经过校验盘的校验才能读出来因此读会比较慢并且两块盘的压力会很大。
b、我们可以在其盘出现错误时及早进行更换。
5、RAID-5
a、校验块轮流放:
比如第一块数据放第一块盘上,第二块数据放第二块盘上那么校验块就放在第三块盘上
然后第三块数据放第三块盘,第四块数据放第二块盘,校验块就放在第一块盘
然后第五块数据放第一块盘,第六块数据放第三块盘,校验块就放在第二块盘
b、这样我们的校验码就是左对称或右对称,如果校验码以第一块盘开始那么就是左对称,如果校验码是以最后一块盘开始那么就是右对称。我们现在一般都是从第一块盘开始校验码。
c、读写性能提升
d、可用空间:(N-1)*min(S1,S2,...)
e、有容错能力:1块磁盘
f、最少磁盘数:3,3+
6、RAID-6:
a、与raid5差不多,用2块校验盘
b、可用空间:(N-2)*min(S1,S2,...)
c、有容错能力:2块磁盘
d、最少磁盘数:4,4+
7、RAID10
a、先做raid1再做raid0
b、假如我们有6块硬盘,然后我们就先两两做raid1,再将做好raid1的盘做raid0
c、读,写性能提升
d、可用空间:N*min(S1,S2,...)/2
e、有容错能力:2块磁盘
f、最少磁盘数:4,4+
8、RAID01(一般很少用)
a、先做raid0再做raid1
b、假如我们有6块硬盘,然后我们就先分成3个一组分成两组,先三个做成raid0然后再将两个做成raid1
9、RAID-50、RAID7
10、JBOD:Just a Bunch Of Disks
功能:将多块磁盘的空间合并一个大的连续空间使用
可用空间:sum(S1,S2,...)
11、常用级别:RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,JBOD
四、raid实现方式
1、硬件实现方式
2、软件实现方式
a、CentOS 6上的软件RAID的实现
结合内核中的md(multi devices)模块。
mdadm:模式化的工具,是基于md内核模块开发的一个工具。
命令的语法格式:mdadm [mode] <raiddevice> [options] <component-devices>
支持的RAID级别:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10;
模式:
显示raid的详细信息:-D
创建:-C
装配:-A
监控:-F
管理:-f,-r,-a
<raiddevice>:/dev/md#
<component-devices>:任意块设备
b、相应参数
-C:创建模式
-n #:使用#个块设备来创建此RAID
-l #:指明要创建的RAID的级别,也就是raid几
-a(yes|no):是否自动创建目标RAID设备的设备文件
-c CHUNK_SIZE:指明块大小
-x #:指明空闲盘的个数
例如:创建一个10G可用空间的RAID5。如果是虚拟机磁盘中的分区需要先将分区调整为fd,也就是Linux raid auto类型
首先我们查看系统上是否有md设备,可以发现没有
接下来我们来创建一个md设备/dev/md0,然后是自动创建,然后使用3个块来创建此RAID,然后1个块作为空闲盘,级别为RAID5,对应具体设备为/dev/sda7到/dev/sda9
然后我们就可以格式化我们/dev/md0就可以使用了
可以通过mdadm -D命令查看其详细信息
现在我们将/dev/md0设备下的/dev/sda7标记为损坏看是否还可以继续使用,并且在标记过后我们可以通过watch命令持续观察恢复情况
现在我们将/dev/md0设备下的/dev/sda7和/dev/sda8移除,使用-r命令
现在我们将/dev/md0设备加入一块设备,使用-a
c、总结
-D:显示raid的详细信息
mdadm -D /dev/md#
管理模式:
-f:标记指定磁盘为损坏
-a:添加磁盘
-r:移除磁盘
观察md的状态:
cat /proc/mdstat
停止md设备:
mdadm -S /dev/md#
d、watch:持续观察
-n #:刷新时间间隔,单位是秒
watch -n# 'COMMAND'
3、练习
练习1:创建一个可用空间为10G的RAID0设备,要求其chunk大小为128k,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录
练习2:创建一个可用空间为10G的RAID10设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录。