《操作系统导论》第四部分 持久性 P3 廉价冗余磁盘阵列(RAID)

C3 廉价冗余磁盘阵列 RAID

廉价冗余磁盘阵列(RAID),这种技术使用多个磁盘一起构建更快,更大,更可靠的磁盘系统

从外部看,RAID看起来像一个磁盘,一组可以读取或写入的块,在内部,RAID是一个复杂的庞然大物,由多个磁盘,内存,一个或多个处理器来管理系统,硬件RAID非常像一个计算机系统,专门用于管理一组磁盘

RAID有许多好处,一个好处就是性能,并行使用多个磁盘可以大大加快I/O时间,另一个好处是容量,大型数据集需要大型磁盘,最后RAID可以提高可靠性,通过冗余,RAID允许损失一个磁盘并继续工作

RAID对于主机来说就像一个大磁盘,主机可以简单地用RAID替换磁盘,而不需要更换一行软件,这种方式极大地提高了RAID地可部署性,使用户和管理员可以使用RAID,而不必担心软件兼容性问题

3.1 接口和RAID内部

RAID看起来是一个快速的,可靠的,很大的磁盘。它将自己展现为线性的块数组,每个块都可以通过文件系统读取或写入

当文件系统向RAID发出逻辑I/O请求时,RAID内部必须计算要访问的磁盘以完成请求,然后发出一个或多个物理I/O来执行此操作

RAID系统通常为单独的硬件盒,它包括一个微控制器,运行固件以指导RAID的操作,它还包括像DRAM这样的易失性存储器,它甚至包含专用的逻辑电路,来执行奇偶校验计算,RAID可以看作是一个很专业的计算机系统,它有处理器,内存和磁盘,然而它不是运行应用程序,而是运行专门用于操作RAID的软件

3.2 一个故障模型和RAID的评估标准

(1) 假设一个故障模型

要理解RAID并比较不同的构建方法,需要先考虑一个故障模型,准确的知道可能存在哪些故障对于实现设计工作至关重要

假设一个故障模型,称为故障-停止,在这种模式下,磁盘可以处于两种状态之一:工作状态或故障状态,使用工作状态的磁盘时,所有的块都可以读取和写入,相反当磁盘出现故障时,认为它永久丢失

当磁盘发生故障时,我们认为这很容易检测到,如在RAID阵列中,假设RAID控制器硬件可以立刻观察到磁盘何时发生故障

(2) RAID的简单评估标准

构建RAID有多种不同的方法,每种方法都有不同的特点,需要设计一个合理的RAID评估标准

第一方面是容量,给定一组N个磁盘的情况下,RAID的客户端可用的容量是多少,当没有冗余时,可用容量是N,如果一个系统保存每个块的两个副本,将获得N/2的有用容量,不同的方案常介于两者之间

第二方面是可靠性,给定设计允许有多少磁盘故障,这里只根据给定的故障模型判断,只假设整个磁盘会故障

第三方面是性能,性能很大程度上取决于磁盘阵列提供的工作负载,在评估性能前,先得有一组典型的工作负载

现在考虑3个重要的RAID设计:RAID 0级(条带化),RAID 1级(镜像化),和RAID 4/5 级(基于奇偶校验的冗余)

3.3 RAID 0级:条带化

在这里插入图片描述

第一个RAID级别实际上不是RAID级别,因为没有冗余,但是RAID 0级拥有高性能和大容量,所以值得了解

(1) RAID 0级的原理

最简单的条带形式是在RAID系统的磁盘上将块条带化,假设此处为4个磁盘阵列:
在这里插入图片描述
以轮转的方式将磁盘阵列的块分布在磁盘上,这种方法的目的是在对数组的连续块进行请求时,从阵列中获取最大的并行性(如在一个大的顺序读取中),将同一行中的块称为条带,因此块0,1,2,3在相同的条带中

上述的示例中,假设同一行条带的每个磁盘只有一个块(4KB),但是这不是必要的,也可以增大块的大小:
在这里插入图片描述
现在假设同一条带上的放置两个块,因此RADI阵列中的大块大小为8kb,条带由4个大块(32KB)组成

(2) 大块大小不同的结果

一方面,大块大小主要影响阵列的性能,如大小较小的大块意为着许多文件将跨多个磁盘进行条带化,从而增加了对单个文件的读取和写入的并行性,但是跨多个磁盘访问块的定位时间会增加

另一方面,较大的大块大小减少了这种文件内的并行性,因此依靠多个并发请求来实现高吞吐量,但是较大的大块减少了定位时间

因此确定“最佳”大块大小是很难做到的,因为需要大量关于提供给磁盘系统的工作负载的知识

(3) RAID 0级的评估

从容量的角度来看,RAID 0级是顶级的,给定N个磁盘,就有N个磁盘的可用空间,从可靠性的角度来看,条带化最糟糕的是:任何磁盘故障都会导致数据丢失,最后,其性能非常好,通常并行使用所有磁盘来为用户I/O请求提供服务

3.4 RAID 1级:镜像

在这里插入图片描述

第一个超越条带化的RAID级别称为RAID 1级,即镜像,对于镜像系统,只需要生成系统中每个块的多个副本,每个副本放在一个单独的磁盘上,通过这样做,可以容许磁盘故障

(1) RAID 1级的原理

在一个典型的镜像系统中,假设对于每个逻辑块,RAID保留两个物理副本:
在这里插入图片描述
这个例子中,磁盘0和磁盘1具有相同的内容,而磁盘2和磁盘3页具有相同的内容,数据在这些镜像之间条带化

从镜像阵列读取块时,RAID有一个选择,它可以读取任一副本,如对RAID发出逻辑块5的读取,则可以自由地从磁盘2或磁盘3读取它,但是在写入块时,RAID必须更新两个副本的数据,以保证可靠性,这种写入可以并行执行

(2) RAID 1级的评估

从容量角度看,RAID 1级价格昂贵,在镜像级别等于2的情况下,只能获得峰值有用容量的一半,因此对于N个磁盘,镜像的有用容量为N/2。从可靠性的角度看,RAID 1级表现良好,它可以容许任何一个磁盘的故障

3.5 RAID 4级:通过奇偶校验节省空间

(1) RAID 4级的原理

现在有一种向磁盘阵列添加冗余的不同方法,称为奇偶校验基于奇偶校验的方法视图使用较少的容量,从而克服由镜像系统付出的巨大空间损失,不过这也会降低性能

对于每一条数据,都添加一个奇偶校验块,用于存储该条块的冗余信息,如奇偶校验块P1具有块4,5,6,7计算出的冗余信息:
在这里插入图片描述
为了计算奇偶性,需要使用一个数学函数,使我们能承受条带中任何一个块的损失,异或 XOR相当的符合,对于给定的一组比特,如果比特中有偶数个1,则所有这些比特的XOR返回0,如果有奇数个1则返回1:
在这里插入图片描述
如果C2的列丢失了,想要重新获取C2中的值,那么就只需要读取该行的所有其它值,通过先前XOR的结果来重构C2中的值,假设C2第一行的值原本为1现在丢失了,通过读取该行中的其它值0,0,1和XOR结果0,根据奇偶校验的原理,那么可以确定C2第一行丢失的数据一定是1

上述的示例只是一个比特,在RAID 4级中假设每个块大小为4KB,想要通过奇偶校验的方式保证可靠性只需在数据块上的每一位上执行按位XOR,将每个位按XOR的结果放入奇偶校验块相应的位置中
在这里插入图片描述
将每个块的每个比特计算奇偶校验,结果放在奇偶校验块中

(2) RAID 4级的评估

从容量的角度来看,RAID 4级使用1个磁盘作为它所保护的每组磁盘的奇偶校验信息,因此RAID组的有效容量是N-1,可靠性也很容易理解,RAID 4级允许1个磁盘故障,不允许更多,如果丢失多个磁盘,则无法重建丢失的数据

3.6 RAID 5级:旋转奇偶校验

在这里插入图片描述

(1) RAID 5级的原理

RAID5与RAID4原理几乎相同,只是它将奇偶校验块跨驱动器旋转
在这里插入图片描述
每个条带的奇偶校验块现在都在磁盘上旋转,以消除RAID 4的奇偶校验磁盘瓶颈

(2) RAID 5级的评估

RAID 5大部分与RAID 4相同,如两级的有效容量和容错能力是相同的,顺序读写性能也是如此,单个请求的延迟也与RAID 4相同

由于RAID 5基本上和RAID 4相同,只是少数情况下它更好,所以它几乎完全取代了市场上的RAID 4,唯一没有取代的地方是系统知道自己绝对不会执行大写入以外的任何事情,从而完全避免小写入问题

3.7 小结

RAID将大量独立磁盘扩充成更大,更可靠的单一实体,重要的是,它是透明的,因此上面的硬件和软件对这种变化相对不任意

使用确切的RAID级别在很大程度上取决于最终用户的优先级,如镜像RAID是简单的,可靠的,并且通常提供良好的性能,但是容量成本高,相比之下,RAID 5从容量来看是可靠和更好的,但在工作负载中有小写入时性能很差,为特定工作负载正确地挑选RAID并设置参数(块大小,磁盘数量)是困难的

猜你喜欢

转载自blog.csdn.net/weixin_43541094/article/details/111561379