RAID入门基础及RAID0技术详解
随着计算机应用的日益普及,人们对计算速度和性能的要求也逐渐提高。在一个完整的计算机系统中,CPU和内存的作用固然重要,但是数据存储设备性能的好坏和速度的快慢也直接影响到整个系统的表现。本文所要讲解的RAID技术起初主要应用于服务器高端市场,但是随着个人用户市场的成熟和发展,正不断向低端市场靠拢,从而为用户提供了一种既可以提升硬盘速度,又能够确保数据安全性的良好的解决方案。本文将对RAID技术进行较为详细的介绍,希望能够对广大读者有所帮助。
入门基础
RAID是英文Redundant Array of Inexpensive Disks的缩写,中文简称为磁盘阵列。其实,从RAID的英文原意中,我们已经能够多少知道RAID就是一种由多块廉价磁盘构成的冗余阵列。虽然RAID包含多块磁盘,但是在操作系统下是作为一个独立的大型存储设备出现。RAID技术分为几种不同的等级,分别可以提供不同的速度,安全性和性价比。
人们在开发RAID时主要是基于以下设想,即几块小容量硬盘的价格总和要低于一块大容量的硬盘。虽然目前这一设想还没有成为现实,RAID在节省成本方面的作用还不是很明显,但是RAID可以充分发挥出多块硬盘的优势,实现远远超出任何一块单独硬盘的速度和吞吐量。除了性能上的提高之外,RAID还可以提供良好的容错能力,在任何一块硬盘出现问题的情况下都可以继续工作,不会受到损坏硬盘的影响。
RAID 0
提到RAID分为几种不同的等级,其中,RAID 0是最简单的一种形式。RAID 0可以把多块硬盘连接在一起形成一个容量更大的存储设备。最简单的RAID 0技术只是提供更多的磁盘空间,不过我们也可以通过设置,使用RAID 0来提高磁盘的性能和吞吐量。RAID 0没有冗余或错误修复能力,但是实现成本是最低的。
RAID 0最简单的实现方式就是把几块硬盘串联在一起创建一个大的卷集。磁盘之间的连接既可以使用硬件的形式通过智能磁盘控制器实现,也可以使用操作系统中的磁盘驱动程序以软件的方式实现。图示如下:
在上述配置中,我们把4块磁盘组合在一起形成一个独立的逻辑驱动器,容量相当于任何一块单独硬盘的4倍。如图中彩色区域所示,数据被依次写入到各磁盘中。当一块磁盘的空间用尽时,数据就会被自动写入到下一块磁盘中。
这种设置方式只有一个好处,那就是可以增加磁盘的容量。至于速度,则与其中任何一块磁盘的速度相同,这是因为同一时间内只能对一块磁盘进行I/O操作。如果其中的任何一块磁盘出现故障,整个系统将会受到破坏,无法继续使用。从这种意义上说,使用纯RAID 0方式的可靠性仅相当于单独使用一块硬盘的1/4(因为本例中RAID 0使用了4块硬盘)。
虽然我们无法改变RAID 0的可靠性问题,但是我们可以通过改变配置方式,提供系统的性能。与前文所述的顺序写入数据不同,我们可以通过创建带区集,在同一时间内向多块磁盘写入数据。具体如图所示:
上图中,系统向逻辑设备发出的I/O指令被转化为4项操作,其中的每一项操作都对应于一块硬盘。我们从图中可以清楚的看到通过建立带区集,原先顺序写入的数据被分散到所有的四块硬盘中同时进行读写。四块硬盘的并行操作使同一时间内磁盘读写的速度提升了4倍。
在创建带区集时,合理的选择带区的大小非常重要。如果带区过大,可能一块磁盘上的带区空间就可以满足大部分的I/O操作,使数据的读写仍然只局限在少数的一、两块硬盘上,不能充分的发挥出并行操作的优势。另一方面,如果带区过小,任何I/O指令都可能引发大量的读写操作,占用过多的控制器总线带宽。因此,在创建带区集时,我们应当根据实际应用的需要,慎重的选择带区的大小。
我们已经知道,带区集可以把数据均匀的分配到所有的磁盘上进行读写。如果我们把所有的硬盘都连接到一个控制器上的话,可能会带来潜在的危害。这是因为当我们频繁进行读写操作时,很容易使控制器或总线的负荷超载。为了避免出现上述问题,建议用户可以使用多个磁盘控制器。示意图如下:
这样,我们就可以把原先控制器总线上的数据流量降低一半。当然,最好解决方法还是为每一块硬盘都配备一个专门的磁盘控制器。
RAID 1技术详解
虽然RAID 0可以提供更多的空间和更好的性能,但是整个系统是非常不可靠的,如果出现故障,无法进行任何补救。所以,RAID 0一般只是在那些对数据安全性要求不高的情况下才被人们使用。
RAID 1和RAID 0截然不同,其技术重点全部放在如何能够在不影响性能的情况下最大限度的保证系统的可靠性和可修复性上。RAID 1是所有RAID等级中实现成本最高的一种,尽管如此,人们还是选择RAID 1来保存那些关键性的重要数据。
RAID 1又被称为磁盘镜像,每一个磁盘都具有一个对应的镜像盘。对任何一个磁盘的数据写入都会被复制镜像盘中;系统可以从一组镜像盘中的任何一个磁盘读取数据。显然,磁盘镜像肯定会提高系统成本。因为我们所能使用的空间只是所有磁盘容量总和的一半。下图显示的是由4块硬盘组成的磁盘镜像,其中可以作为存储空间使用的仅为两块硬盘(画斜线的为镜像部分)。
RAID 1下,任何一块硬盘的故障都不会影响到系统的正常运行,而且只要能够保证任何一对镜像盘中至少有一块磁盘可以使用,RAID 1甚至可以在一半数量的硬盘出现问题时不间断的工作。当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据。
通常,我们把出现硬盘故障的RAID系统称为在降级模式下运行。虽然这时保存的数据仍然可以继续使用,但是RAID系统将不再可靠。如果剩余的镜像盘也出现问题,那么整个系统就会崩溃。因此,我们应当及时的更换损坏的硬盘,避免出现新的问题。 更换新盘之后,原有好盘中的数据必须被复制到新盘中。这一操作被称为同步镜像。同步镜像一般都需要很长时间,尤其是当损害的硬盘的容量很大时更是如此。在同步镜像的进行过程中,外界对数据的访问不会受到影响,但是由于复制数据需要占用一部分的带宽,所以可能会使整个系统的性能有所下降。
因为RAID 1主要是通过二次读写实现磁盘镜像,所以磁盘控制器的负载也相当大,尤其是在需要频繁写入数据的环境中。为了避免出现性能瓶颈,使用多个磁盘控制器就显得很有必要。下图示意了使用两个控制器的磁盘镜像。
使用两个磁盘控制器不仅可以改善性能,还可以进一步的提高数据的安
全性和可用性。我们已经知道,RAID 1最多允许一半数量的硬盘出现故障,所以按照我们上图中的设置方式(原盘和镜像盘分别连接不同的磁盘控制),即使一个磁盘控制器出现问题,系统仍然可以使用另外一个磁盘控制器继续工作。这样,就可以把一些由于意外操作所带来的损害降低到最低程度。
RAID 0+1
单独使用RAID 1也会出现类似单独使用RAID 0那样的问题,即在同一时间内只能向一块磁盘写入数据,不能充分利用所有的资源。为了解决这一问题,我们可以在磁盘镜像中建立带区集。因为这种配置方式综合了带区集和镜像的优势,所以被称为RAID 0+1。
RAID3和RAID5技术详解
热插拔
一些面向高端应用的磁盘镜像系统都可以提供磁盘的热插拔功能。所谓热插拔功能,就是允许用户在不关闭系统,不切断电源的情况下取出和更换损害的硬盘。如果没有热插拔功能,即使磁盘损坏不会造成数据的丢失,用户仍然需要暂时关闭系统,以便能够对硬盘进行更换。现在,使用热插拔技术只要简单的打开连接开关或者转动手柄就可以直接取出硬盘,而系统仍然可以不间断的正常运行。
校验
RAID 3和RAID 5都分别使用了校验的概念提供容错能力。简单的说,我们可以把校验想象为一种二进制的校验和,一个可以告诉你其它所有字位是否正确的特殊位。 在数据通信领域,奇偶校验被用来确定数据是否被正确传送。例如,对于每一个字节,我们可以简单计算数字位1的个数,并在字节内加入附加校验位。在数据的接收方,如果数字位1的个数为奇数,而我们使用的又是奇数校验的话,则说明该字节是正确的。同样对偶数校验也是如此。然而,如果数字位1的个数和校验位的奇偶性不一致的话,则说明数据在传送过程中出现了错误。
RAID系统也采用了相似的校验方法,可以在磁盘系统中创建校验块,校验块中的每一位都用来对其它关联块中的所有对应位进行校验。
在数据通讯领域,虽然校验位可以告诉我们某个字节是否正确,但是无法告诉我们到底是哪一位出现了问题。这就是说我们可以检测错误,但是不能改正错误。对于RAID,这是远远不够的。固然错误的检测非常重要,但是如果不能对错误进行修复,我们就无法提高整个系统的可靠性。
举个例子来说,假设我们发现校验块中第10个字节的第5位不正确。如果这个校验块包含的是另外8个数据块的校验信息,那么哪一个数据块才是问题的罪魁祸首呢?也许你可能会想为每一个数据块都建立一个校验块就可以解决问题。但是这种方法很难实现。事实上,RAID主要是借助磁盘控制器的错误报告检测错误位置,并进行修复。如果磁盘控制器在读取数据时没有发出任何“抱怨”,那么系统将会视该数据为正确数据,继续使用。
RAID 3
RAID 3采用的是一种较为简单的校验实现方式,使用一个专门的磁盘存放所有的校验数据,而在剩余的磁盘中创建带区集分散数据的读写操作。例如,在一个由4块硬盘构成的RAID 3系统中,3块硬盘将被用来保存数据,第四块硬盘则专门用于校验。这种配置方式可以用3+1的形式表示,具体如图:
在上图中,我们用相同的颜色表示使用同一个校验块的所有数据块,斜线标出的部分为校验块。校验块和所有对应的数据块一起构成一个带区。
第四块硬盘中的每一个校验块所包含的都是其它3块硬盘中对应数据块的校验信息。RAID 3的成功之处就在于不仅可以像RAID 1那样提供容错功能,而且整体开销从RAID 1的50%下降为25%(RAID 3+1)。随着所使用磁盘数量的增多,成本开销会越来越小。举例来说,如果我们使用7块硬盘,那么总开销就会将到12.5%(1/7)。
在不同情况下,RAID 3读写操作的复杂程度不同。最简单的情况就是从一个完好的RAID 3系统中读取数据。这时,只需要在数据存储盘中找到相应的数据块进行读取操作即可,不会增加任何额外的系统开销。
当向RAID 3写入数据时,情况会变得复杂一些。即使我们只是向一个磁盘写入一个数据块,也必须计算与该数据块同处一个带区的所有数据块的校验值,并将新值重新写入到校验块中。例如,当我们向上图中的绿色数据块写入数据时,必须重新计算所有3个绿色数据块的校验值,然后重写位于第四块硬盘的绿色校验块。由此我们可以看出,一个写入操作事实上包含了数据读取(读取带区中的关联数据块),校验值计算,数据块写入和校验块写入四个过程。系统开销大大增加。
我们可以通过适当设置带区的大小使RAID系统得到简化。如果某个写入操作的长度恰好等于一个完整带区的大小(全带区写入),那么我们就不必再读取带区中的关联数据块计算校验值。我们只需要计算整个带区的校验值,然后直接把数据和校验信息写入数据盘和校验盘即可。
到目前为止,我们所探讨的都是正常运行状况下的数据读写。下面,我们再来看一下当硬盘出现故障时,RAID系统在降级模式下的运行情况。
RAID 3虽然具有容错能力,但是系统会受到影响。当一块磁盘失效时,该磁盘上的所有数据块必须使用校验信息重新建立。如果我们是从好盘中读取数据块,不会有任何变化。但是如果我们所要读取的数据块正好位于已经损坏的磁盘,则必须同时读取同一带区中的所有其它数据块,并根据校验值重建丢失的数据。
当我们更换了损坏的磁盘之后,系统必须一个数据块一个数据块的重建坏盘中的数据。整个过程包括读取带区,计算丢失的数据块和向新盘写入新的数据块,都是在后台自动进行。重建活动最好是在RAID系统空闲的时候进行,否则整个系统的性能会受到严重的影响。
RAID 3的性能问题
除了我们在上文讨论过的有关数据写入和降级模式的问题之外,在使用RAID 3的过程中还有其他一些性能上的问题需要引起我们的注意。RAID 3所存在的最大一个不足同时也是导致RAID 3很少被人们采用的原因就是校验盘很容易成为整个系统的瓶颈。 我们已经知道RAID 3会把数据的写入操作分散到多个磁盘上进行,然而不管是向哪一个数据盘写入数据,都需要同时重写校验盘中的相关信息。因此,对于那些经常需要执行大量写入操作的应用来说,校验盘的负载将会很大,无法满足程序的运行速度,从而导致整个RAID系统性能的下降。鉴于这种原因,RAID 3更加适合应用于那些写入操作较少,读取操作较多的应用环境,例如数据库和WEB服务器等。
RAID 5
RAID 3所存在的校验盘的性能问题使几乎所有的RAID系统都转向了RAID 5。在运行机制上,RAID 5和RAID 3完全相同,也是由同一带区内的几个数据块共享一个校验块。
RAID 5和RAID 3的最大区别在于RAID 5不是把所有的校验块集中保存在一个专门的校验盘中,而是分散到所有的数据盘中。RAID 5使用了一种特殊的算法,可以计算出任何一个带区校验块的存放位置。具体如图所示:
注意图中的校验块已经被分散保存在不同的磁盘中,这样就可以确保任何对校验块进行的读写操作都会在所有的RAID磁盘中进行均衡,从而消除了产生瓶颈的可能。
分类 : 技术文摘 | 发表时间 14-06-2006
分类 : 技术文摘 | 发表时间 13-06-2006
文章作者:Fr. Qaker [E.S.T]
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
备注:AXLFilter研究中
本软件开源目的
防御CC类型攻击,共享ISAPI编程思路,追求共享精神。
开源花絮
AAFW在2005年12月底就已经完成,现在需要的就是一些功能的补充和界面的优化,所以还是具有一定学习意义的。
原来发布过CC的源代码,但是发生了一些很不开心的事。这次要发布代码,很多朋友因此建议我不要开源。但是,代码放在手里,放着也是浪费,也不符合自己的共享精神。当初,我自己成长的时候也是读别人的代码提高自身的过程,乘凉不忘栽树人。虽然有不少小人,就让他去吧,真理永远变不了,小人得逞只是一时,大家技术的共同提高,共享精神的保持才是最重要的。
AntiAttackFireWall(AAFW)介绍
AA防火墙是一款IIS ISAPI防火墙,利用ISAPI FILTER进行系统保护,利用ISAPI EXTENTION进行管理。
目前代码已经实现了,有效防止盗链,有效防止CC攻击,有效控制文件下载,有效IP连接限制等功能,而且很多功能都考虑到了扩充问题,所以很容易的修改代码进行功能添加。
特别提下,里面的Base64的编码功能是我从网络上复制的一段代码改编来的。
IP管理用的是二叉树进行内存查找,正常情况下,十万次IP记录(十万数量级)的查找能在0.01秒内完成,建议修改的时候将数据进行hash算法。
原创SQL注入保护代码混合在Decode里面,过滤了()<>‘;= 因为<>=是判断符号,没有这三个符号,基本无法进行条件语句的构造,用()限制了decalre这样的使用和sql语句的套用,用’;杜绝了SQL语句的分隔,应该说,这样的过滤是相对比较安全,而且有效的。
程序本身有访问者按IP管理,所以很方便进行下载限制。
盗链问题,用的是IP判断,看访问者是否访问过本站,用以判断,而不是refer判断,建议加上refer判断增加精确性,接下来会专门研究这个问题。
防止CC攻击用的就是原来我给出的asp防御的思路,采用IIS ASP的随机生成Session的方法,而且session值绑定在访问者的IP记录下。
控制文件下载,也是基于IP的,建议参考后台管理的登录代码,运用Base64的解码,可以很方便的开发会员区这样专业级别的登录控制,甚至可以考虑使用数据库存储用户,比ASP的管理有效的多,而且安全。
顺带感叹
近日的迅雷事件,我在这里支持天空,鄙视华军和迅雷。
迅雷的软件,思路,效率令人佩服,确实是个好东西。但是,大家听说过杀鸡取卵的故事么,迅雷现在就是,他自己建立了门户,提供软件搜索,软件从其他软件下载站下载。看上去挺不错的。潜在问题发生了,一个软件,很多地方同时提供,但是在迅雷中显示的站点只有一个,那么以后各家下载的站估计都要给迅雷送钱,这样才能让自己的站点多显示几次,多一些广告收入阿。下载的时候,管你是谁,只要有这个文件,迅雷就能下,流量上去了。这样做来,用户感觉不错,速度快,但是下载站呢?流量上去了,广告下来了,收入比支出少了,而且广告成倍的少,流量成倍的加,后果是什么?还记得baidu的mp3搜索吧,现在音乐站还有多少?还记得baidu的竞价广告吧,不给钱,你的页面别显示了,你的软件我照样用,不服?叫天天不应,叫地地不灵。说实话,迅雷作软件,佩服,做门户,卑鄙。杀鸡取卵,不改大家以后都没软件下,不信看吧。迅雷可是说了哦,我们不提供软件下载的,嘿嘿。
再说一个潜在威胁,迅雷就使加强版的CC,不信就看,千万用户一起用,每人5个连接,迅雷说今天,天空和我闹,大家一起去挤它的软件下载吧,天空崩溃了。明天,华军这个小人又出尔反尔了,大家去挤它吧。别和我说什么它很有商业道德,baidu多大的一个网站,不照样出来一个8848攻击事件,这次迅雷的做法,嘿嘿,好像更猛。
华军,嘿嘿,就是一个炒作家,先领头出来说,迅雷卑鄙阿,坏阿,然后,不知道得到什么好处,嘿嘿,第一个叛变了,不信大家去华军网上看看,这样的领头羊,嘿嘿,就是披着狼皮,自己炒作自己,能活到最后,但是第一个出卖用户的肯定是它。
天空,赞一个,支持一个,顶住,你要倒了,我们以后软件下载没了,一定要坚持住,让迅雷改。谢谢。
推荐网站
VIF:一个商业版本的IIS防火墙,界面比我的好看多了,功能呢,说实话是同类产品,但是有后续性,不断更新重,大家支持一个http://vif.foosun.cn
邪恶八进制:我的根据地,欢迎大家来指导 http://forum.eviloctal.com/ ,
我的软件首发地色釉-信手绾红尘:美文欣赏http://blog.sina.com.cn/u/1236648217强烈推荐里面的诱惑,嘿嘿http://blog.sina.com.cn/u/49b5c1190100043h
NDS论坛:喜欢玩NDS的朋友可以去看看http://www.ndsman.com/bbs,好像遇到了和天空一样的问题,被某个叫NDSBBS的网站盗链加恶意中伤。
浩联电子:http://www.591hl.com家乡的一个公司,感谢一个长期支持我的朋友 [m*],估计他不想在这里出名,嘻嘻
近日计划
集中精力研究AXLFilter,用IIS ISAPI FILTER彻底解决盗链问题,然后发布源代码,希望相关下载站与我联系测试盗链效果和防迅雷下载,概念代码将在第一时间发布。
我的联系方式:bigboyq[at]eviloctal[dot]com
点击下载
