1、.为什么需要磁盘阵列? 如何增加磁盘的存取(access)速度,如何防止数据因磁盘的故障而失落及如何有效的利用磁盘空间,一直是电脑专业人员和用户的困扰;而大容量磁盘的价格非常昂贵, 对用户形成很大的负。磁盘阵列技术的产生一举解决了这些问题。 过去十几年来,CPU 的处理速度增加了五十倍有多,内存(memory)的存取速度亦大幅增加,而数据储存装置-主要是磁盘(hard disk)-的存取速度只增加了三、四倍, 形成电脑系统的瓶颈,拉低了电脑系统的整体性能(through put),若不能有效的提升磁盘的存取速度,CPU、内存及磁盘间的不平衡将使 CPU 及内存的改进形成浪费。 目前改进磁盘存取
2、速度的的方式主要有两种。一是磁盘快取控制(disk cache controller),它将从磁盘读取的数据存在快取内存(cache memory)中以减少磁盘存取的次数,数据的读写都在快取内存中进行,大幅增加存取的速度,如要读取的数据不在快取内存中,或要写数据到磁盘时,才做磁盘的存取动作。这种方式在单工环境(single-tasking envioronment)如 DOS之下,对大量数据的存取有很好的性能(量小且频繁的存取则不然),但在多工(multi-tasking)环境之下(因为要不停的作数据交换(swapping)的动作)或数据库(database)的存取( 因为每一记录都很小)就不
3、能显示其性能。这种方式没有任何安全保障。 其二是使用磁盘阵列的技术。磁盘阵列是把多个磁盘组成一个阵列, 当作单一磁盘使用,它将数据以分段(striping)的方式储存在不同的磁盘中,存取数据时, 阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列所利用的不同的技术,称为 RAID level,不同的 level 针对不同的系统及应用,以解决数据安全的问题。 一般高性能的磁盘阵列都是以硬件的形式来达成,进一步的把磁盘快取控制及磁盘阵列结合在一个控制器(RAID controler 或控制卡上,针对不同的用户解决人们对磁盘输出入系统的四大要求: (1)增加存取速度,
4、 (2)容错(fault tolerance),即安全性 (3)有效的利用磁盘空间; (4)尽量的平衡 CPU,内存及磁盘的性能差异 ,提高电脑的整体工作性能。 2.磁盘阵列原理 磁盘阵列中针对不同的应用使用的不同技术,称为 RAID level,RAID 是 RedundentArray of Inexpensive Disks 的缩写,而每一 level 代表一种技术,目前业界公认的标准是 RAID 0RAID 5。这个 level 并不代表技术的高低,level 5 并不高于 level 3,level 1 也不低过 level 4,至于要选择那一种 RAID level 的产品,纯视用
5、户的环境(operating environment)及应用(application)而定,与 level 的高低没有必然的关系。 RAID 0 及 RAID 1 适用于 PC 及 PC 相关的系统如小型的网络服务器 (network server)及需要高磁盘容量与快速磁盘存取的工作站等,比较便宜;RAID 3 及 RAID 4 适用于大型电脑及影像、CAD/CAM 等处理;RAID 5 多用于 OLTP,因有金融机构及大型数据处理中心的迫切需要,故使用较多而较有名气, RAID 2 较少使用,其他如 RAID 6,RAID 7,乃至 RAID 10 等,都是厂商各做各的,并无一致的标准,在
6、此不作说明。介绍各个 RAID level 之前, 先看看形成磁盘阵列的两个基本技术: 磁盘延伸(Disk Spanning): 译为磁盘延伸,能确切的表示 disk spanning 这种技术的含义。如图磁盘阵列控制器 ,联接了四个磁盘,这四个磁盘形成一个阵列(array),而磁盘阵列的控制器 (RAID controller)是将此四个磁盘视为单一的磁盘,如 DOS 环境下的 C:盘。这是 disk spanning 的意义, 因为把小容量的磁盘延伸为大容量的单一磁盘,用户不必规划数据在各磁盘的分布 ,而且提高了磁盘空间的使用率。并使磁盘容量几乎可作无限的延伸;而各个磁盘一起作取存的动作,
7、比单一磁盘更为快捷。很明显的,有此阵列的形成而产生 RAID 的各种技术。 磁盘或数据分段(Disk Striping or Data Striping): 因为磁盘阵列是将同一阵列的多个磁盘视为单一的虚拟磁盘(virtual disk),所以其数据是以分段(block or segment)的方式顺序存放在磁盘阵列中,数据按需要分段, 从第一个磁盘开始放,放到最後一个磁盘再回到第一个磁盘放起,直到数据分布完毕。至于分段的大小视系统而定,有的系统或以 1KB 最有效率,或以 4KB,或以 6KB,甚至是 4MB 或 8MB 的,但除非数据小于一个扇区(sector,即 521bytes),否则
8、其分段应是 512byte 的倍数。因为磁盘的读写是以一个扇区为单位,若数据小于 512bytes,系统读取该扇区后,还要做组合或分组(视读或写而定 )的动作 ,浪费时间。从上图我们可以看出, 数据以分段于在不同的磁盘,整个阵列的各个磁盘可同时作读写,故数据分段使数据的存取有最好的效率 ,理论上本来读一个包含四个分段的数据所需要的时间约=(磁盘的 access time+数据的 tranfer time)X4 次,现在只要一次就可以完成。 若以 N 表示磁盘的数目,R 表示读取 ,W 表示写入,S 表示可使用空间 ,则数据分段的性能为: R:N(可同时读取所有磁盘) W:N(可同时写入所有磁盘
9、) S:N(可利用所有的磁盘,并有最佳的使用率) Disk striping 也称为 RAID 0,很多人以为 RAID 0 没有甚么,其实这是非常错误的观念, 因为RAID 0 使磁盘的输出入有最高的效率。而磁盘阵列有更好效率的原因除数据分段外,它可以同时执行多个输出入的要求,因为阵列中的每一个磁盘都能独立动作 ,分段放在不同的磁盘,不同的磁盘可同时 1 2 3 作读写,而且能在快取内存及磁盘作并行存取(parallel access)的动作,但只有硬件的磁盘阵列才有此性能表现。 从上面两点我们可以看出,disk spanning 定义了 RAID 的基本形式, 提供了一个便宜、灵活、高性能
10、的系统结构,而 disk striping 解决了数据的存取效率和磁盘的利用率问题 ,RAID 1 至RAID 5 是在此基础上提供磁盘安全的方案。 RAID 1 RAID 1 是使用磁盘镜像(disk mirroring)的技术。磁盘镜像应用在 RAID 1 之前就在很多系统中使用,它的方式是在工作磁盘(working disk)之外再加一额外的备份磁盘 (backup disk),两个磁盘所储存的数据完全一样,数据写入工作磁盘的同时亦写入备份磁盘。磁盘镜像不见得就是 RAID 1,如 Novell Netware 亦有提供磁盘镜像的功能 ,但并不表示 Netware 有了RAID 1 的功
11、能。一般磁盘镜像和 RAID 1 有二点最大的不同: RAID 1 无工作磁盘和备份磁盘之分, 多个磁盘可同时动作而有重叠(overlaping)读取的功能,甚至不同的镜像磁盘可同时作写入的动作,这是一种最佳化的方式 ,称为负载平衡(load-balance)。例如有多个用户在同一时间要读取数据,系统能同时驱动互相镜像的磁盘,同时读取数据,以减轻系统的负载,增加 I/O 的性能。 RAID 1 的磁盘是以磁盘延伸的方式形成阵列,而数据是以数据分段的方式作储存,因而在读取时,它几乎和 RAID 0 有同样的性能。从 RAID 的结构就可以很清楚的看出 RAID 1 和一般磁盘镜像的不同。 下图为
12、 RAID 1,每一笔数据都储存两份: 从图可以看出: R:N(可同时读取所有磁盘) W:N/2(同时写入磁盘数) S:N/2(利用率) 读取数据时可用到所有的磁盘,充分发挥数据分段的优点;写入数据时, 因为有备份,所以要写入两个磁盘,其效率是 N/2,磁盘空间的使用率也只有全部磁盘的一半。 很多人以为 RAID 1 要加一个额外的磁盘 ,形成浪费而不看好 RAID 1,事实上磁盘越来越便宜,并不见得造成负担,况且 RAID 1 有最好的容错(fault tolerence)能力, 其效率也是除 RAID 0 之外最好的。 在磁盘阵列的技术上,从 RAID 1 到 RAID 5,不停机的意思表
13、示在工作时如发生磁盘故障,系统能持续工作而不停顿,仍然可作磁盘的存取,正常的读写数据;而容错则表示即使磁盘故障,数据仍能保持完整,可让系统存取到正确的数据,而 SCSI 的磁盘阵列更可在工作中抽换磁盘,并可自动重建故障磁盘的数据。磁盘阵列之所以能做到容错及不停机,是因为它有冗余的磁盘空间可资利用,这也就是 Redundant 的意义。 RAID 2 RAID 2 是把数据分散为位(bit)或块(block), 加入海明码 Hamming Code,在磁盘阵列中作间隔写入(interleaving)到每个磁盘中,而且地址(address) 都一样, 也就是在各个磁盘中,其数据都在相同的磁道(cy
14、linder or track)及扇区中。RAID 2 的设计是使用共轴同步(spindle synchronize)的技术,存取数据时,整个磁盘阵列一起动作, 在各作磁盘的相同位置作平行存取,所以有最好的存取时间(accesstime),其总线(bus)是特别的设计 ,以大带宽(band wide)并行传输所存取的数据,所以有最好的传输时间(transfer time)。在大型档案的存取应用 ,RAID 2 有最好的性能,但如果档案太小,会将其性能拉下来,因为磁盘的存取是以扇区为单位, 而 RAID 2 的存取是所有磁盘平行动作,而且是作单位元的存取,故小于一个扇区的数据量会使其性能大打折扣
15、。RAID 2 是设计给需要连续且大量数据的电脑使用的,如大型电脑(mainframe to supercomputer)、作影像处理或 CAD/CAM 的工作站(workstation)等,并不适用于一般的多用户环境、网络服务器(network server),小型机或 PC。 RAID 2 的安全采用内存阵列(memory array)的技术,使用多个额外的磁盘作单位错误校正(single-bit correction)及双位错误检测(double-bit detection);至于需要多少个额外的磁盘,则视其所采用的方法及结构而定,例如八个数据磁盘的阵列可能需要三个额外的磁盘 ,有三十二
16、个数据磁盘的高档阵列可能需要七个额外的磁盘。 RAID 3 RAID 3 的数据储存及存取方式都和 RAID 2 一样,但在安全方面以奇偶校验(parity check)取代海明码做错误校正及检测,所以只需要一个额外的校检磁盘 (parity disk)。 奇偶校验值的计算是以各个磁盘的相对应位作 XOR 的逻辑运算 ,然后将结果写入奇偶校验磁盘,任何数据的修改都要做奇偶校验计算,如图: 如某一磁盘故障,换上新的磁盘后,整个磁盘阵列(包括奇偶校验磁盘) 需重新计算一次,将故障磁盘的数据恢复并写入新磁盘中;如奇偶校验磁盘故障,则重新计算奇偶校验值, 以达容错的要求. 较之 RAID 1 及 RA
17、ID 2,RAID 3 有 85%的磁盘空间利用率,其性能比 RAID 2 稍差,因为要做奇偶校验计算;共轴同步的平行存取在读档案时有很好的性能,但在写入时较慢, 需要重新计算及修改奇偶校验磁盘的内容。RAID 3 和 RAID 2 有同样的应用方式,适用大档案及大量数据输出入的应用,并不适用于 PC 及网络服务器。 RAID 4 RAID 4 也使用一个校验磁盘,但和 RAID 3 不一样,如图: RAID 4 是以扇区作数据分段 ,各磁盘相同位置的分段形成一个校验磁盘分段(parity block),放在校验磁盘。这种方式可在不同的磁盘平行执行不同的读取命今,大幅提高磁盘阵列的读取性能;
18、但写入数据时 ,因受限于校验磁盘 ,同一时间只能作一次,启动所有磁盘读取数据形成同一校验分段的所有数据分段,与要写入的数据做好校验计算再写入。即使如此 ,小型档案的写入仍然比 RAID 3 要快,因其校验计算较简单而非作位(bit level)的计算; 但校验磁盘形成 RAID 4 的瓶颈,降低了性能,因有 RAID 5 而使得 RAID 4 较少使用。 RAID 5 RAID5 避免了 RAID 4 的瓶颈 ,方法是不用校验磁盘而将校验数据以循环的方式放在每一个磁盘中,磁盘阵列的第一个磁盘分段是校验值,第二个磁盘至后一个磁盘再折回第一个磁盘的段是数据,然后第二个磁盘的分段是校验值,从第三个磁
19、盘再折回第二个磁盘的分段是数据,以此类推,直到放完为止。图中的第一个 parity block 是由 A0,A1.,B1,B2 计算出来,第二个 parity block 是由 B3,B4,.,C4,D0 计算出来,也就是校验值是由各磁盘同一位置的分段的数据所计算出来。这种方式能大幅增加小档案的存取性能,不但可同时读取 ,甚至有可能同时执行多个写入的动作,如可写入数据到磁盘 1 而其 parity block 在磁盘 2,同时写入数据到磁盘 4 而其 parity block 在磁盘 1,这对联机交易处理 (OLTP,On-Line Transaction Processing)如银行系统、金
20、融、股市等或大型数据库的处理提供了最佳的解决方案(solution),因为这些应用的每一笔数据量小,磁盘输出入频繁而且必须容错。 事实上 RAID 5 的性能并无如此理想,因为任何数据的修改,都要把同一 parityblock 的所有数据读出来修改后,做完校验计算再写回去,也就是 RMW cycle(Read-Modify-Write cycle,这个cycle 没有包括校验计算);正因为牵一而动全身,所以: R:N(可同时读取所有磁盘) W:1(可同时写入磁盘数) S:N-1(利用率) RAID 5 的控制比较复杂,尤其是利用硬件对磁盘阵列的控制,因为这种方式的应用比其他的RAID leve
21、l 要掌握更多的事情,有更多的输出入需求,既要速度快 ,又要处理数据,计算校验值,做错误校正等,所以价格较高;其应用最好是 OLTP,至于用于图像处理等,不见得有最佳的性能。 2.磁盘阵列的额外容错功能:Spare or Standby driver 事实上容错功能已成为磁盘阵列最受青睐的特性,为了加强容错的功能以及使系统在磁盘故障的情况下能迅速的重建数据,以维持系统的性能,一般的磁盘阵列系统都可使用热备份(hot spare or hot standby driver)的功能,所谓热备份是在建立(configure)磁盘阵列系统的时候,将其中一磁盘指定为后备磁盘,此一磁盘在平常并不*作,但若
22、阵列中某一磁盘发生故障时, 磁盘阵列即以后备磁盘取代故障磁盘,并自动将故障磁盘的数据重建 (rebuild)在后备磁盘之上,因为反应快速,加上快取内存减少了磁盘的存取,所以数据重建很快即可完成,对系统的性能影响很小。对于要求不停机的大型数据处理中心或控制中心而言,热备份更是一项重要的功能,因为可避免晚间或无人值守时发生磁盘故障所引起的种种不便。 另一个额外的容错功能是坏扇区转移(bad sector reassignment)。坏扇区是磁盘故障的主要原因,通常磁盘在读写时发生坏扇区的情况即表示此磁盘故障 ,不能再作读写,甚至有很多系统会因为不能完成读写的动作而死机,但若因为某一扇区的损坏而使工
23、作不能完成或要更换磁盘,则使得系统性能大打折扣,而系统的维护成本也未免太高了。坏扇区转移是当磁盘阵列系统发现磁盘有坏扇区时,以另一空白且无故障的扇区取代该扇区 ,以延长磁盘的使用寿命,减少坏磁盘的发生率以及系统的维护成本。所以坏扇区转移功能使磁盘阵列具有更好的容错性,同时使整个系统有最好的成本效益比。其他如可外接电池备援磁盘阵列的快取内存,以避免突然断电时数据尚未写回磁盘而损失;或在 RAID 1 时作写入一致性的检查等,虽是小技术,但亦不可忽视。 3.硬件磁盘阵列还是软件磁盘阵列 市面上有所谓硬件磁盘阵列与软件磁盘阵列之分,因为软件磁盘阵列是使用一块 SCSI 卡与磁盘连接,一般用户误以为是
24、硬件磁盘阵列。以上所述主要是针对硬件磁盘阵列 ,其与软件磁盘阵列有几个最大的区别: l 一个完整的磁盘阵列硬件与系统相接。 l 内置 CPU,与主机并行运作,所有的 I/O 都在磁盘阵列中完成, 减轻主机的工作负载,增加系统整体性能。 l 有卓越的总线主控(bus mastering)及 DMA(Direct Memory Access)能力, 加速数据的存取及传输性能。 l 与快取内存结合在一起,不但增加数据的存取及传输性能,更因减少对磁盘的存取而增加磁盘的寿命。 l 能充份利用硬件的特性,反应快速。 软件磁盘阵列是一个程序,在主机执行,透过一块 SCSI 卡与磁盘相接形成阵列,它最大的优点
25、是便宜,因为没有硬件成本(包括研发、生产、维护等),而 SCSI 卡很便宜(亦有的软件磁盘阵列使用指定的很贵的 SCSI 卡);它最大的缺点是使主机多了很多进程(process),增加了主机的负担,尤其是输出入需求量大的系统。目前市面上的磁盘阵列系统大部份是硬件磁盘阵列 ,软件磁盘阵列较少。 4.磁盘阵列卡还是磁盘阵列控制器 磁盘阵列控制卡一般用于小系统,供单机使用。与主机共用电源,在关闭主机电源时存在丢失 Cache 中的数据的的危险。磁盘阵列控制卡只有常用总线方式的接口,其驱动程序与主机、主机所用的*作系统都有关系,有软、硬件兼容性问题并潜在地增加了系统的不安定因素。在更换磁盘阵列卡时要冒磁盘损坏,资料失落,随时停机的风险。 独立式磁盘阵列控制一般用于较大型系统,可分为两种: 单通道磁盘阵列和多通道式磁盘阵列,单通道磁盘阵列只能接一台主机,有很大的扩充限制。多通道磁盘阵列可接多个系统同时使用,以群集(cluster)的方式共用磁盘阵列, 这使内接式阵列控制及单接式磁盘阵列无用武之地。目前多数独立形式的磁盘阵列子系统,其本身与主机系统的硬件及环境。