经过一段时间的折腾,工作的事终于解决了,新工作一上来的第一件事就要熟悉RAID卡存储机制,先简单了解下RAID卡吧。

    提到RAID卡就不得不提什么是RAID,RAID是英文Redundant Array of Independent Disks的缩写,翻译成中文即为独立磁盘冗余阵列,或简称磁盘阵列。简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据冗余的技术。组成磁盘阵列的不同方式成为RAID级别(RAID Levels)。RAID技术经过不断的发展,现在已拥有了从 RAID 0 到 6 七种基本的RAID 级别。另外,还有一些基本RAID级别的组合形式,如RAID 10/01(RAID 0与RAID 1的组合),RAID 50(RAID 0与RAID 5的组合)等。不同RAID 级别代表着不同的存储性能、数据安全性和存储成本。

    数据冗余的功能是在用户数据一旦发生损坏后,利用冗余信息可以使损坏数据得以恢复,从而保障了用户数据的安全性(除RAID0外)。在用户看起来,组成的磁盘组就像是一个硬盘,用户可以对它进行分区,格式化等等。总之,对磁盘阵列的操作与单个硬盘一模一样。不同的是,磁盘阵列的存储性能要比单个硬盘高很多(主要是存取速度上),而且可以提供数据冗余。

    RAID可以通过软件或硬件来实现,软件实现RAID需要操作系统的支持。硬件实现就是使用专用的RAID卡来实现。

    1、软件RAID:一些网络操作系统可以使用标准的SCSI适配卡支持和管理驱动器。一些网络操作系统支持RAID 0,RAID 1和RAID 5。由于是操作系统下实现RAID,软RAID不能保护系统盘。亦即系统分区不能参与实现RAID。有些操作系统,RAID的配置信息存在系统信息中,而不是存在硬盘上;当系统崩溃,需重新安装时,RAID的信息也会丢失。

    当运行I/O增强应用程序,如文件服务器或应用程序服务器,可适当的使用软件RAID。RAID 5是CPU的增强方式,所以不建议使用软件RAID在增强的处理器服务器中。磁盘的容错技术并不等于完全支持在线更换,热插拔或热交换,有些操作系统不能支持系统不经过重启的在线热交换。能否支持错误硬盘的热交换与操作系统有关。

    NetWare支持RAID 1(镜像和双工)。Windows NT、Windows 2000、LINUX、OPENSERVER支持RAID 0, RAID1和RAID5。

    另一种方案是配置系统在线扩充,服务器中配置一块备用硬盘,当系统中没有硬盘错误时,它处于等待状态,当RAID5或RAID1中出现硬盘错误时,它可以自动取代坏盘,当系统确认后,即可成为阵列的一部分。

    2、硬件RAID:硬件 RAID是采用集成的阵列卡或专用的阵列卡来控制硬盘驱动器,这样可以极大节省服务器系统CPU和操作系统的资源。从而使网络服务器的性能获得很大的提高。

    RAID控制器对主系统,是借由连接至其存取接口(目前以SCSI为主)作信道。换言之,它在主系统的存取接口上,是一个独立的直接存取储存体DASD(Direct Access Storage Device)。而这个大的储存体内,可以有不只一个的逻辑磁盘LUN(Logical Unit Number)。RAID控制器,对下管理多颗数组硬盘机们。而主系统是不会看到或直接管理该硬盘的。例如:Mylex LSI、AMI、Adaptec等 ... 都有相关的产品。

    现在的RAID卡产品,都支持在线更换,热插拔或热交换。并在部分操作系统下实现软件监控和管理。

    RAID卡就是用来实现RAID功能的板卡,通常是由I/O处理器、硬盘控制器、硬盘连接器和缓存等一系列零组件构成的。不同的RAID卡支持的RAID功能不同。支持RAlD0、RAID1、RAID3、RAID4、RAID5、RAID10不等。RAID卡可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍、几十倍甚至上百倍的速率。这也是RAID卡最初想要解决的问题。可以提供容错功能,这是RAID卡的第二个重要功能。

    来看看RAID卡的工作机制,RAID卡有自己的CPU,Cache Memory,通过集成或借用主板上的SCSI控制器来管理硬盘,可以称之为一个智能化的设备。下图为RAID卡的结构图:

RAID卡技术简析_其他

    RAID卡的分类一般根据集成的SCSI控制器来划分。如果没有集成SCSI控制器,而是借用主板上的SCSI控制器来管理硬盘,则为零通道RAID卡。根据RAID卡集成的SCSI控制器的通道数量,可以分为单通道、双通道、三通道RAID卡。还可以按照SCSI控制器的标准来划分RAID卡的种类,如Ultra Wide、 Ultra2 Wide、Ultra160 Wide。下图为带RAID卡的SCSI系统结构:

RAID卡技术简析_数据_02

    RAID处理器是一个PCI从设备,接受并执行来自系统的命令。同时占用PCI中断,代表SCSI磁盘子系统向系统提出中断请求,请求占用PCI总线,返回对系统命令的响应,如输送SCSI硬盘上的数据。

    作为RAID卡的CPU,通过执行闪存中的Firmware,控制SCSI控制器、Cache Memory以及指示报警电路,来实现RAID卡的功能,运作流程如下: 
(1)初始化RAID卡寄存器 
(2)读取NVRAM的上次RAID参数,与硬盘实际信息进行比较,显示结果 
(3)发送配置提示、响应 HOST 命令进入配置界面 
(4)提供配置菜单、将用户提供的RAID卡参数、RAID参数存入NVRAM 
(5)根据RAID参数,通过SCSI控制器对硬盘进行初始化写操作 
(6)完成配置 
(7)等待Host发出读写操作命令

    RAID卡提高磁盘读写性能的另一手段是磁盘CACHE。对于磁盘I/O来说,如果没有CACHE,就直接从硬盘读写;如果有CACHE,则首先从CACHE读写。 
    CACHE具有两大功能: 
——预读:CACHE预读提高了计算机系统中的硬盘读的功能,尤其是在读取含有大量文件碎片的文件时。具有良好预读功能的RAID卡能在看起来很随机的读访问中,识别出读取磁盘的规律, 通过这个规律提前将系统要读取的数据放在CACHE中。预读的两种方式如下: 
Read Ahead

    由于硬盘数据经常是以一族连续的硬盘扇区组织起来的,所以有时侯如把系统所请求的扇区随后的一个扇区里的数据 同时读进来是有价值的。对于数据文件的读取有利,特别是系统CPU的性能低时。 
Pre-Fetch

    当RAID卡发现系统要读的是先前已经读过的数据时,在 这一次,便将这一个数据块的数据写到CACHE里。对于程序文件的读取有利 。 
——回写:回写是通过暂时将数据存在CACHE里,从而推迟将数据写到慢设备(如硬盘、磁带机)的一种工作方式。数据将在随后的时间,硬盘闲置的时候写到硬盘中。写的时候也是统一将CACHE内的尚未写出的数据按照数据块的在硬盘中的BLOCK序号写入,这样可以提高写的效率。

    回写需要加电池给CACHE供电,以免数据在写到硬盘之前系统断电导致硬盘数据丢失。

    增加CACHE大小对于预读来说,为系统提供了更多的来自CACHE的可供读取的记录。 对于回写来说,允许控制卡保存更多的记录留待后期写磁盘。特别是对于电梯式回写,使得连续的回写段之间有更近的间隔,降低硬盘写操作的平均访时间并提高了吞吐率。 
写策略 
——回写(Write Back) 
——通写(Write Through)

    通写模式下,所有数据在以命令完成状态返回到计算机之前,直接写到硬盘。两种写策略比较来说,写策略由通写改为回写时,可大幅度提高RAID性能。但回写具有一定的数据危险性。在突然断电的情况下,会丢失存于Cache尚未写入硬盘的数据。 
    RAID卡工作在写策略为THROUGH时,缓存大小对RAID卡的性能影响很小,只有当写策略改为BACK时,缓存的作用才会发挥出来。

    影响RAID卡性能的因素很多,其中可调因素主要有RAID卡缓存(CACHE)大小、写策略(WRITE POLICY)、读策略(READ POLICY)、条带的大小(STRIPE SIZE)。不同的RAID卡虽然说法略有不同,但意思是一样的。很多设置可以在RAID卡的配置工具中调整。