想把好多硬盘组在一起使用的基本方式为:连接所有硬盘,先向第一个硬盘中写数据,满了之后,再向第二个硬盘上写数据,如此只是简单的连通了多个硬盘。
再此基础上发展了RAID技术:由独立磁盘组成的具有冗余特性的阵列
1.RAID0技术
假设有4块硬盘,把每块硬盘根据硬盘中的扇区来分割成同样大小的块,因为硬盘中的扇区是真实存在的,块是我们抽象出来的,如此每个硬盘都被分为好几个块
此时存储方式是并行的将数据存入所有磁盘,即将数据同时写入所有磁盘的第一块。然后再同时写入所有磁盘的第二块
方法:数据被分成多块,同时并行的写入多个磁盘,而不是顺序写入
优点:并发IO操作。大大提供的IO速度,阵列的容量是整个磁盘的总和
缺点:只要有一块磁盘坏掉,整个数据就全部丢失
2.RAID1技术
RAID0是并行IO操作,但是有个问题,当整个阵列中有一个硬盘出现了问题,整个阵列就不行再使用了。为了解决这个问题,就有了RDIA1,增加镜像盘
方法:每次写数据,将同样一份数据写入两个硬盘里。其中一个做备份,每次写入都要写成功两块盘才算成功,数据块以位为单位打散在多块磁盘上存储
优点:提供了备份功能,当一个数据出现损坏,可以读取第二份
缺点:短板效应,速度取决于最慢的盘,容量取决于最小的盘,总容量是所有磁盘的1/2
3.RAID2技术
RAID1虽然有了备份,但是写入太慢,以及极大的浪费了硬盘容量。在此基础上通过设置校验盘,以减少冗余盘就有了RAID2
方法:采用汉明码进行数据校验,具有一位校验能力,每次读写之前先进行校验。每次IO的数据被以位为单位平均打散在所有数据盘上。
缺点:校验盘数量太多,开销太大,成本昂贵,比较初期的一种校验方式,现在已经不用了
4.RAID3技术
RAID2使用汉明码校验,造成很大的校验盘浪费,对校验方法进行改进,使用逻辑运算XOR,只需要一块校验盘,就有了RAID3,RAID2是用位计算写入,RAID3使用固定大小IO
方法:使用逻辑运算“亦或XOPR“来进行计算校验。每次IO的大小是4kb,而一个扇区固定大小是512B,这样根据多少盘就可以算出每次IO时对每个硬盘写入多少。一次IO尽量让每块磁盘的都参与
优点:校验效率较高,成本减少
缺点:不支持IO并发,一次IO是4KB,在同次IO下要操作所有的硬盘。对随机小块读写时,一个很小的IO(小于4KB)会占用所有盘
5.RAID4技术
RAID3的原理是每次写4KB,分散到每次磁盘。但是实际应用中的读写数据都要远远小于4KB,这样即使数据很小,但是还是每个磁盘都参与了,一次都能有一个IO操作,就会有很多磁盘闲置了。针对RAID3中IO不能并行的问题进行改善,就有了RAID4
方法:通过增大“条带深度”,如果一次IO操作,这个IO块小于条带深度,那么这次IO就被完全禁锢在一个磁盘上了,此时其他磁盘空闲就可以共存一个IO对空闲的磁盘进行操作
缺点:校验盘是瓶颈,每个IO不管目标在哪个数据盘,但是一定要读写校验盘。此时,虽然数据IO是并发,但是操作校验盘的时候依旧是一个一个来。所以在RAID3的基础上性能并没有提升
6.RAID5技术
RAID4只实现了数据盘上的并行IO操作,但是忘记了每次校验的时候IO都会霸占所有的校验盘。针对校验盘不能实现并行IO的问题,推出了RAID5
方法:把校验盘分割,打散在数据盘上。这样每次磁盘保存的有数据部分和校验部分
优点:实现了并发IO,随机读性能高。
缺点:写的性能差,因为每写一扇区的数据就要产生其校验扇区,一并写入校验盘。这个是有校验功能的通病。连续性不如RAID3
RAID5EE:RAID5使用的校验方法是逻辑XOR运算,只有一个硬盘损坏时,如果是读可以逆运算得到,但是却没办法写入了。此时可以在每个磁盘中分出一部分空间,如果有磁盘损坏,就把损坏磁盘上的数据分开保存在每次磁盘上。提供一个备份盘的作用。
7.RAID6技术
RAID5中还有一个问题就是:当只有一个校验盘时,如果是损坏一块盘还可以算出之前存的数据,但是如果损坏了两块盘就无法得到之前写入的数据了,为了解决这个问题,就有了RAID6
方法:增加校验码,通过组成方程组求解多个未知数
缺点:因为要多读写一个校验数据,写性能更差了