文章目录
4.1 大话七种RAID武器
4.1.1 RAID 0
- 图4-1所示的是4块普通硬盘,其上布满了扇区。扇区是实实在在存在于盘片上的,具有自己的格式。图4-2所示的是引入分割思想之后的硬盘。由于许多文件系统或者卷管理软件都使用块而不是扇区作为基本存储单元,所以图4-2中也使用4个扇区组成的块作为基本单元。不同磁盘的相同偏移处的块组成Stripe,也就是条带。
- 块的编号也是以横向条带方向开始一条一条的向下。这样,对于一个全新的文件系统和RAID 0磁盘组,如果有大块数据写入时,则数据在很大几率上可以以条带为单位写入。即数据被分成多块写入4块硬盘,而不是单独硬盘系统中的顺序写入一个硬盘,这就大大提高了速度。
4.1.2 RAID 1
- 将两块磁盘中的一块用于正常使用,另一块用作正常使用磁盘的影子。工作盘写了一个数据,影子盘在相同位置上也写了数据。读数据的时候,可以从两块盘读,所以增加了并发性。
- 写数据时需要同时写两份,速度会稍慢。RAID1提供的最大容量等于所有组成RAID1的磁盘中容量最小的一块,RAID1磁盘组的写性能等于所有磁盘中性能最低的那块磁盘的写性能。
4.1.3 RAID 2
- 组成一块三磁盘系统,两块数据盘,一块”校验盘“。当数据损坏时,根据校验盘上的数字,可恢复损坏磁盘上的数字。两个磁盘系统每次只能传输2路数据,因为数据盘就两块,而每块磁盘每次就传输出去一路。RAID2并不是使用加减法进行校验,而使汉明码。
Hamming Code ECC(汉明码错误检测与修正) - RAID2算法的复杂性在于它使用了很早期纠错技术——汉明码。汉明码在原有数据位中插入一定数量的校验位来进行错误检测和纠错。比如,对于一组4位数据编码,汉明码会在这4位中加入3个校验位,从而使得实际传输的数据位达到7位,如图4-5。需要被插入的汉明码的位数与数据位的数量关系为2^P≥P+D+1,P表示汉明码个数,D表示数据位个数。
- 在RAID2中,每个IO下发的数据以位为单位平均打散到所有数据盘上,迫使每次IO都要全部联动来存取,此时要求各个磁盘的主轴同步,才能达到最佳效果,否则就需要等待,这就造成了瓶颈。
- RAID2在写入数据块的同时还要计算出它们的汉明码并写入校验阵列,读取时也要对数据即时地进行校验,最后再发向系统。汉明码只能纠正一个位的错误,只能允许最大一块硬盘出问题。
- RAID2是早期为了能进行即时地数据校验而研制的一种技术,从它的设计上看也是主要为了即时校验以保证数据安全,针对了当时对数据即时性非常敏感的领域,如服务器、金融服务等。但由于校验盘数量太多、开销太大及成本昂贵,目前已基本不再使用,转而以更高级的即时校验RAID所代替,如RAID3、5等。
4.1.4 RAID 3
- 抛弃了冗余的RAID2的几块校验盘,只留下一块。按照布尔的思想,数据盘的每一位之间做XOR运算,然后将结果写入校验盘的对应位置。这样,任何一块数据盘损坏,或者其中的任何一个扇区损坏,都可以通过剩余的位和校验位一同进行XOR运算,找到丢失的位。
- RAID2中数据被打的太散了,索性把RAID3的条带长度设置为4KB,刚好适配了上层的数据组织,一般文件系统常用的是以4KB为一个块。保证条带长度为上层块的大小,上层的IO一般都会以块为单位,这样就可以保证在连续写的情况下,可以以条带为单位写入,大大提高磁盘并行度。RAID3中把一个条带做成4KB这个魔术值。
- RAID2和RAID3每次只能做一次IO,不适合要求多并发IO的情况,因为会造成IO等待。RIAD3的并发只是一次IO的多磁盘并发存取,适合IO块大、IO SIZE/IO PS比值大的情况。
- 总结一下,RAID3相比RAID2校验效率提升,成本减少。缺点是不支持错误纠正了,因为XOR算法无法纠正错误。但是这个缺点已经不重要,发生错误的机会少之又少,完全可以靠上层来处理错误了。
- 读又分为连续读和随机读。连续读指的是每个IO所需要提取的数据块在序号上是连续的,磁头不必耗费太多时间来寻道,此时寻道消耗的时间就很短。一个IO所用的时间约等于寻道时间加上旋转延迟时间再加上数据传输时间,IOPS=1/(寻道时间+旋转延迟时间+数据传输时间),由于寻道时间相对于传输时间要大几个数量级,所以影响IOPS的关键因素就是寻道时间。而在连续IO的情况下,仅在换磁道时需要寻道,而磁道都是相邻的,所以寻道时间也很短。在这个前提下,传输时间这个分母就显示出作用来了。由于RAI