存储篇(3)

344 阅读4分钟

raid篇

全称Redundant Array of Independent Disks,主要是为了扩充磁盘能力。

raid0

许多文件系统和卷管理系统都使用块而不是扇区作为基本的存储单位。假如以4个扇区作为块大小,不同磁盘相同偏移的块组成条带这个概念。所以当有大文件写入的时候,数据有大概率可以以条带为单位写入,也就是说分块写入多个盘,而不是一个硬盘系统顺序写入,大大提高了速度。

raid1

raid0的缺点很明显,但有一块盘出现故障,整个阵列就会出现问题。那么假如每次都是写冗余盘则提高数据安全性,即数据写到工作盘,也必须写到影子盘中。raid1的容量和写入性能存在着木桶效应。

raid2

raid2的想法是在每个条带做一个备份,其提供的思路是找到一个算法,通过掩盖一个数字,可以通过其他数字进行推算。raid2没有引入加减,加法只能判断是否出错,没办法纠错。所以raid2是采取了汉明码进行校验,汉明码具有一位的纠错能力,但如果两位出错则无法纠正。
科普:海明码 2^K -1 >=M+K (m为信息位个数)
海明码(i=1,2,...,k)排在第位,然后将数据位依照从低到高的顺序填在剩余的空间里,构成H1~H12。其中Ci的确定方法如下:

三.当接收方收到信息T后,对T依据同样的异或规则重新计算校验码。然后对接收到的C1C2C3C4和新计算出的C1C2C3C4进行按位异或运算,如果结果全为0,则传输无误,如果结果不为0,则计算的结果对应的十进制就表明了错误发生的位置,如结果为0101这表示第5位出错也就是D2出错(对应校验位位置索引号和计算包含该编码的位置)。

raid3

raid3的校验盘使用xor进行保存,raid3的条带设置为4kb,适配了上层的数据组织,如果使用四块盘,则条带深度为2个扇区或者1kb。总之保持条带大小为上层块大小,在连续写入时,可以以条带为单位写入,大大提高磁盘并行度。
raid3和raid2每次只能做一次io(io大于block size),不适合要求多io并发的情况,因此会造成io等待。raid3并发是一次io多磁盘并发存取。

raid4

为了提高io并行,raid4提高了条带的宽度,使得一个io被禁锢在一个磁盘中,这个时候其他io就可以跟这个io同时进行,所以实现io并发需要增加数据的随机分布性。但这个方式有一个很大的错误就是会使得校验盘变成热点盘。

raid5

假设一块磁盘没办法被多个io占用,那么将校验盘做多块则可以避免这个问题,因此raid5的设计就是将校验盘分割开,组合在数据盘之中,避开raid4的问题。raid5的节省空间随着磁盘数量的增加越来越少。raid5在随机iops大的读方面具有高性能。但其缺点是写性能较差,它每次写一个扇区就需要产生其校验扇区。
Raid5写的过程是这样,新数据过来后,控制器立即读取更新扇区旧数据,同时读取这个条带上的校验数据,然后三者运算后将新的校验数据写会磁盘。

因此可以看到随机并发io和写性能二者取其一。所以对于raid4和raid5来说处理写方面是失败的,raid2和raid3比raid5好,因为其条带小,正常的io可以覆写所有盘。

raid5ee

加一块冗余校验盘做热备

raid10和raid01

raid10是在raid1的基础上做raid0,当io落到raid0某位置上,假如第一块raid1盘坏了,则备份盘可以代替,所以raid10只有在一组raid1坏了前提下才不可用,而对于raid01,假如第一块盘有一个坏了,下一次io只能落到冗余的raid0上,利用率低。