磁盘阵列(RAID)

一、什么是 RAID

  RAID 即容错廉价磁盘阵列。RAID 可以通过一些技术(软件或硬件)将多个较小的磁盘整合成为一个较大的磁盘设备;而这个较大的磁盘功能可不止是存储而已,它还具有数据保护的功能。整个 RAID 由于选择的等级不同,而使得整合后的磁盘具有不同的功能,基本常见的等级有以下几种:

1、RAID-0(等量模式,stripe):性能最佳

  这种模式如果使用相同型号与容量的磁盘来组成时,效果最佳。这种模式的RAID 会将磁盘先切出等量的区块(举例来说,4KB),然后当一个文件要写入 RAID 时,该文件会依据块的大小切割好,之后再依序放到各个磁盘里面去。由于每个磁盘会交错存放数据,因此当你的数据要写入 RAID 时,数据会被等量放置在各个磁盘上面。举例来说,你有两块磁盘组成 RAID-0时,当你有100MB 的数据要写入时,每个磁盘会被分配到50MB 的存储量。RAID-0的示意图如下图所示:

磁盘阵列(RAID)

  上图的意思是,在组成 RAID-0时,每块磁盘(Disk A与 Disk B)都会被分割成为小区块。当有数据要写入 RAID 时,数据会先被分成符合小区块的大小,然后再依序一个一个放置到不同的磁盘去。由于数据已经先被分并且依序放置到不同的磁盘上面,因此每块磁盘所负责的数据量都降低了。照这样的情况来看,越多块磁盘组成的 RAID-0性能会越好,因为每块负责的数据量就更低了,这表示我的数据可以分散让多块磁盘来存储,当然性能会变得更好。此外,磁盘总容量也变大了!因为每块磁盘的容量最终会加总成为 RAID-0的总容量。
  使用此等级你必须要自行负担数据损毁的风险,由上图我们知道文件是被切割成为适合每块磁盘分区区块的大小,然后再依序放置到各个磁盘中。如果某一块磁盘损毁了,那么文件数据将缺一块,此时这个文件就损毁了。由于每个文件都是这样存放的,因此RAID-0只要有任何一块磁盘损毁,在 RAID 上面的所有数据都会丢失而无法读取
  另外,如果使用不同容量的磁盘来组成 RAID-0时,由于数据是一直等量依序放置到不同磁盘中,当小容量的区块被用完了,那么所有的数据都将被写入到最大的那块磁盘去。此时的性能就变差了,因为只剩下一块可以存放数据。

2、RAID-1(映像模式,mirror):完整备份

  这种模式也是需要相同的磁盘容量,最好是一模一样的磁盘。如果是不同容量的磁盘组成 RAID-1时,那么总容量将以最小的那一块磁盘为主!这种模式主要是让同一份数据完整保存在两块磁盘上面。举例来说,如果我有一个100MB 的文件,且我仅有两块磁盘组成 RAID-1时,那么这两块磁盘将会同步写入100MB 到它们的存储空间去。因此,整体 RAID 的容量几乎少了50%。由于两块硬盘内容一模一样,好像镜子映照出来一样,所以称他为镜像模式。

磁盘阵列(RAID)

  如上图所示,一份数据传送到 RAID-1之后会被分为两股,并分别写入到各个磁盘里面去。由于同一份数据会被分别写入到其它不同磁盘,因此如果要写入100MB 数据时,数据传送到 I/O 总线后会被复制多份到各个磁盘,结果就是数据量感觉变大了,因此在大量写入 RAID-1的情况下,写入的性能可能会变得非常差。好在如果你使用的是硬件 RAID(磁盘阵列卡)时,磁盘阵列卡会主动复制一份而不使用系统的 I/O 总线,性能方面则还可以。如果使用软件磁盘阵列,可能性能就不好了。
  由于两块磁盘内的数据一模一样,所以任何一块磁盘损毁时,你的数据还可以完整保留下来。所以我们可以说,RAID-1最大的优点大概就在于数据的备份。不过由于磁盘容量有一半用在备份,因此总容量会是全部磁盘容量的一半而已。虽然 RAID-1的写入性能不佳,不过读取的性能则还可以。这是因为数据有两份在不同的磁盘上面,如果多个进程在读取同一条数据时,RAID 会自行取得最佳的读取平衡。

3、RAID 0+1,RAID 1+0

  所谓的 RAID 0+1就是先让两块磁盘组成 RAID-0,并且这样的设置共有两组;然后将这两组 RAID-0 再组成一组 RAID-1。这就是 RAID 0+1。反过来说,RAID 1+0就是先组成 RAID-1再组成 RAID-0的意思。
  如下图所示,Disk A+Disk B 组成第一组 RAID 0,Disk C+Disk D 组成第二组 RAID 0,然后这两组再整合成为一组 RAID 1.如果有100MB 的数据要写入,则由于 RAID 1的关系,两组 RAID 0都会写入100MB,但由于 RAID 0 的关系,因此每块磁盘仅会写入50MB 而已。如此一来不论哪一组 RAID 0的磁盘损毁,只要另外一组 RAID 0还存在,那么就能够通过 RAID-1的机制来恢复数据。

磁盘阵列(RAID)

  由于具有 RAID-0的优点,所以性能得以提升,由于具有 RAID-1的优点,所以数据得以备份。但是也由于 RAID-1的缺点,所以总容量会少一半用来作备份。

4、RAID-5:性能与数据备份的均衡考虑

  RAID-5至少要3块以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似 RAID-0,不过每个循环的写入过程中,在每块磁盘加入一个同位检查数据(Parity),这个数据会记录其它磁盘的备份数据,用于当有磁盘损毁时的救援。RAID-5读写的情况如下图所示。

磁盘阵列(RAID)

  图中每次循环写入时,都会有部分的同位检查码被记录下来,并且记录的同位检查码每次都记录在不同的磁盘,因此,任何一个磁盘损毁时都能够通过其他磁盘的检查码来重建原本磁盘内的数据。不过需要注意的是,由于有同位检查码,因此 RAID-5的总容量会是整体磁盘数量减一块。以上图为例,原本的三块磁盘只会剩下两块磁盘的容量,而且当损毁的磁盘数量大于等于两块时,整组 RAID5的数据就损毁了。因为 RAID5默认仅能支持一块磁盘的损毁情况。
  在读写性能的比较上,读取的性能还不赖,与 RAID-0有的比,不过写的性能就不见得能够增加很多。
  由于 RAID-5仅能支持一块磁盘的损毁,还有另外一种等级就是 RAID-6,这个 RAID-6则使用两块磁盘的容量作为 Parity 的存储,同时两块磁盘损毁时,数据还是可以救回来。