软件RAID的缺点如此之多,使人们不断地思考更多实现RAID的方法。既然软件缺点太多,那么用硬件实现如何呢?

RAID卡就是一种利用独立硬件来实现RAID功能的方法。要在硬件上实现RAID功能,必须找一个物理硬件作为载体,SCSI卡或者主板上的南桥无疑就是这个载体了。人们在SCSI卡上增加了额外的芯片用于实现RAID功能。这些芯片是专门用来执行RAID算法的,可以是ASIC这样的高成本高速度运算芯片,也可以是通用指令CPU这样的通用代码执行芯片,可以从ROM中加载代码直接执行,也可以现在入RAM后执行,从而实现RAID功能。

  实现了RAID功能的板卡(SCSI卡或者IDE拓展卡)就叫做RAID卡。同样,在主板南桥芯片上也可以实现RAID功能。由于南桥中的芯片不能靠CPU来完成它们的功能,所以这些芯片完全靠电路逻辑来自己运算,尽管速度很快,但是功能相对插卡式的RAID卡要弱。

  对于软件RAID,至少操作系统最底层还是能感知到实际物理磁盘的,但是对于硬件RAID来说操作系统根本无法感知底层的物理磁盘。而只能通过厂家提供的RAID卡的管理软件来查看卡上所连接的物理磁盘。而且,配置RAID卡的时候,也不能在操作系统下完成,而必须进入这个硬件来完成(或者在操作系统下通过RAID卡配置工具来设置)。一般的RAID卡都是在开机自检的时候,进入它的ROM配置程序来配置各种RAID功能。

RAID卡的结构

  带CPU的RAID卡俨然就是一个小的计算机系统,有自己的CPU、内存、ROM、总线和IO接口,只不过这个小计算机是为大计算机服务的。

SCSI RAID卡上一定要包含SCSI控制器,因为其后端连接的依然是SCSI物理磁盘。其前端连接到主机的PCI总线上,所以一定要有一个PCI总线控制器来维护PCI总线的仲裁、数据发送接收等功能。还需要有一个ROM,一般都是用Flash芯片作为ROM,其中存放着初始化RAID卡必须的代码以及实现RAID功能所需的代码。

  RAM的作用,首先是作为数据缓存,提高性能;其次作为RAID卡上的CPU执行RAID运算所需要的内存空间。XOR芯片是专门用来做RAID3、5、6等这类校验型RAID的校验数据计算用的。如果让CPU来做校验计算,需要执行代码,将耗费很多周期。而如果直接使用专用的数字电路,一进一出就立即得到结果。所以为了解脱CPU,增加了这块专门用于XOR运算的电路模块,大大增加了数据校验计算的速度。

  RAID卡与SCSI卡的区别就在于RAID功能,其他没有太大区别。如果RAID卡上有多个SCSI通道,那么就称为多通道RAID卡。目前SCSI RAID卡最高有4通道的,其后端可以接入4条SCSI总线,所以最多可连接64个SCSI设备(16位总线)。

  RAID思想中有个条带化的概念。所谓的条带化,并不是真正的像低级格式化一样将磁盘划分成条和带。这个条带化是虚拟的,也就是体现在程序代码上。因为条带的位置、大小一旦设置之后,就是固定的。一个虚拟盘上的某个LBA地址块,就对应了真正物理磁盘上的一个或者多个LBA块,这些映射关系都是预先通过配置界面设定好的。而且某种RAID算法往往体现为一些复杂公式,而不是去用一张表来记录每个虚拟磁盘LBA和物理磁盘LBA的对应,用表的效率会很差。因为每个IO到来之后,RAID都要查询这个表来获取对应物理磁盘的LBA,而查询速度是非常慢的,更何况面对如此大的一张表。如果用一个逻辑LBA与物理LBA之间的函数关系公式来做运算,则速度是非常快的。

  正是因为映射完全通过公式来进行,所以物理磁盘上根本不用写入什么标志,以标注所谓的条带。条带的概念只是逻辑上的,物理上并不存在。所以,条带等概念只需“记忆”在RAID程序代码之中就可以了,要改变也是改变程序代码即可。唯一要向磁盘上写入的就是一些RAID信息,这样即使将这些磁盘拿下来,放到同型号的另一块RAID卡上,也能无误地认出以前做好的RAID信息。SNIA协会定义了一种DDF RAID信息标准格式,要求所有RAID卡厂家都按照这个标准来存放RAID信息,这样,所有RAID卡就都通用了。

RAID卡的结构详解的更多相关文章

  1. Android系统目录结构详解

    Android系统基于linux内核.JAVA应用,算是一个小巧精致的系统.虽是开源,但不像Linux一般庞大,娇小可亲,于是国内厂商纷纷开发出自己基于Android的操作系统.在此呼吁各大厂商眼光放 ...

  2. Linux文件系统的目录结构详解

    Linux文件系统的目录结构详解   一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...

  3. 软RAID管理命令mdadm详解

    软RAID管理命令mdadm详解 mdadm是linux下用于创建和管理软件RAID的命令,是一个模式化命令.但由于现在服务器一般都带有RAID阵列卡,并且RAID阵列卡也很廉价,且由于软件RAID的 ...

  4. BS模式的模型结构详解

    编号:1004时间:2016年4月12日16:59:17功能:BS模式的模型结构详解 URL:http://blog.csdn.net/icerock2000/article/details/4000 ...

  5. Linux下的文件目录结构详解

    Linux下的文件目录结构详解 / Linux文件系统的上层根目录 /bin 存放用户可执行的程序 /boot 操作系统启动时所需要的文件 /dev 接口设备文件目录,例如:had表示硬盘 /etc ...

  6. PHP扩展代码结构详解

    PHP扩展代码结构详解: 这个是继:使用ext_skel和phpize构建php5扩展  内容 (拆分出来) Zend_API:深入_PHP_内核:http://cn2.php.net/manual/ ...

  7. vue 文件目录结构详解

    vue 文件目录结构详解 本篇文章主要介绍了vue 文件目录结构详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 项目简介 基于 vue.js 的前端开发环境,用于前后 ...

  8. [转帖]Tomcat目录结构详解

    Tomcat目录结构详解 https://www.cnblogs.com/veggiegfei/p/8474484.html 之前应该是知道一点 但是没有这么系统 感谢原作者的描述. 1.bin: 该 ...

  9. web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}

    前端之前端初识   前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...

随机推荐

  1. 3994: [SDOI2015]约数个数和

    Description 设d(x)为x的约数个数,给定1<=T<=50000 组1<=N, M<=50000 ,求 有一个公式\[d(ij)=\sum_{x|i}\sum_{y ...

  2. Codeforces 1106 E. Lunar New Year and Red Envelopes 优先队列+dp

    题意大致是Bob新年拿红包,每个红包可以在s-t时间内取,但是取了之后得在d+1时间开始才能继续取红包. 同时他女儿能在m个时间点阻止他取红包,求女儿阻止后Bob取得的w总和最小值. Bob取红包的策 ...

  3. virtualbox+vagrant学习-2(command cli)-17-vagrant ssh命令

    SSH 格式: vagrant ssh [options] [name|id] [-- extra ssh args] 这将SSH导入正在运行的vagrant机器,并允许你访问机器的shell. us ...

  4. Python2图像文本识别

    原文地址:http://www.cnblogs.com/tanghuang/p/6380588.html 适用版本:python2以下 将图片中的数字通过 pytesseract.image_to_s ...

  5. Win32 HTTP Download

    头文件HTTPClient.h: #pragma once #ifndef HTTPClient_H_ #define HTTPClient_H_ #include <string> us ...

  6. 关于Nanchtiy

    关于我 宇宙超级无敌蒟蒻一枚 爱玩游戏(LOL贼菜) 不爱刷题 不定时更新博客 福建某不知名市的某不知名高中的高二dog 偶尔看看动漫 欢迎加友链啦~ QQ:1468473741(会有妹子加吗?) 我 ...

  7. block本质探寻八之循环引用

    说明:阅读本文,请参照之前的block文章加以理解: 一.循环引用的本质 //代码——ARC环境 void test1() { Person *per = [[Person alloc] init]; ...

  8. #leetcode刷题之路48-旋转图像

    给定一个 n × n 的二维矩阵表示一个图像.将图像顺时针旋转 90 度.说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像.示例 1:给定 matrix ...

  9. 在Mac检查安装的.net core 版本

    在 Termianl which dotnet #查看dotnetcore的runtime路径 dotnet #dotnet 命令行工具 -h 查看帮助 #常用命令 # --info Display ...

  10. Redis简介和常见的面试题

    redis介绍及特点 Redis是由意大利人Salvatore Sanfilippo开发的一款内存内存高速缓存数据库. Reids全称为:Remote Dictionary Server(远程数据服务 ...