1、RAID卡结构:
实现了raid功能的板卡(SCSI卡或者IDE扩展卡)就叫做RAID卡。同样,在主板南桥芯片上也可实现RAID功能,由于南桥中的芯片不能靠CPU来完成他们的功能,所以这些芯片完全靠电路逻辑来自己运算,尽管速度很快,但是功能相对插卡式的RAID卡要弱。从某些主板的宣传广告中就可以看到,所谓板载raid芯片就是指南桥中有实现raid功能的芯片。
这样操作系统不需要作任何改动,除了RAID卡驱动程序之外不用安装任何额外的软件,就可以直接识别到已经过raid处理而生产的虚拟磁盘。
对于硬件的raid卡,操作系统无法感知底层物理磁盘,只能通过厂家提供的raid卡的管理软件来查看卡上所连接的物理磁盘。而且,配置raid卡的时候,也不能在操作系统下完成,而必须进入这个硬件来完成(或者在操作系统下通过raid卡配置工具来设置)。一般的raid卡都是在开机自检的时候,进入他的ROM配置程序来配置各种RAID功能。
RAID卡的结构图:
scsi RAID卡上一定要包含SCSI控制器,因为其后端连接的依然是SCSI物理磁盘。其前端连接到主机的PCI总线上,所以一定要有一个PCI总线控制器来维护PCI总线仲裁、数据发送接收等功能。还需要一个ROM,一般都是用flsh芯片作为ROM,其中存放着初始化RAID卡必须的代码以及实现RAID功能所需的代码。
RAM的作用,首先是作为数据缓存,提高性能;其次作为RAID卡上的CPU执行RAID运算所需要的内存空间。XOR芯片是准们用来做RAID3,5,6,等这类校验型RAID的校验数据计算用的。如果让cpu来做校验运算,需要执行代码,将耗费很多周期。而如果直接使用专用的数字电路,一进一出就立即得到结果。所以为了解脱CPU,增加了这块专门用于XOR运算的电路模块,大大增加了数据校验计算的速度。
RAID卡与 SCSI卡不是同一个东西,RAID卡有raid功能,而SCSI卡上市不会又raid功能的,如果RAID卡上有多个SCSI通道,那么就成为多通道RAID卡。目前scsi RAID 卡最高有4通道,其后端可以接入4条SCSI总线,所以最多连接64个SCSI设备。有了RAID卡之后,SCSI控制器(SCSI卡)就能了RAID程序代码的傀儡,raid让它干啥,他就干啥,SCSI控制器对它下面掌管的磁盘情况完全明了,它和RAID程序代码之间进行通信。RAID程序代码知道SCSI控制器掌管的磁盘情况之后,就按照ROM中所设置的选项,比如RAID类型,条带大小等,对RAID程序代码做相应的调整,操控它的傀儡SCSI控制器向主机报告“虚拟”的逻辑盘,而不是物理磁盘了。
RAID卡会向每个磁盘写入一些RAID信息(这也是做过raid的磁盘与普通磁盘唯一的区别,raid磁盘里不会又条带化的信息,因为条带化信息在raid卡内),这样即使将这些磁盘拿下来,放到同型号的另一块RAID卡上,也能无误地认出以前做好的raid信息。
条带化之后,raid程序代码就操控SCSI控制器向OS层驱动程序代码提交一个虚拟化之后的所谓的“虚拟盘”或者称“逻辑盘” 也有人干脆称为LUN
下图展示RAID卡:
下面展示一下SCSI卡:
下面单独看一下SCSI接口长什么样子:
更多了解请参照转来的博客:http://blog.csdn.net/changyanmanman/article/details/8443722
2、RAID实现组合
RAID50:
RAID50是RAID5与RAID0的结合。此配置在RAID5的子磁盘组的每个磁盘上进行包括奇偶信息在内的数据的剥离。每个RAID5子磁盘组要求三个硬盘。RAID50具备更高的容错能力,因为它允许某个组内有一个磁盘出现故障,而不会造成数据丢失。而且因为奇偶位分部于RAID5子磁盘组上,故重建速度有很大提高。优势:更高的容错能力,具备更快数据读取速率的潜力。需要注意的是:磁盘故障会影响吞吐量。故障后重建信息的时间比镜像配置情况下要长。
RAID50也被称为镜象阵列条带,由至少六块硬盘组成,象RAID0一样,数据被分割成条带,在同一时间内向多块磁盘写入;象RAID5一样,也是以数据的校验位来保证数据的安全,且校验条带均匀分布在各个磁盘上。其目的在于提高RAID5的读写性能。
RAID10和 RAID01:
根据组合分为RAID 10和RAID 01,实际是将RAID 0和RAID 1标准结合的产物,在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同时,为每一块磁盘作磁盘镜像,进行冗余。
3、虚拟磁盘
目前各种RAID卡都可以划分逻辑盘,逻辑盘大小任意设置。每个逻辑盘对于OS来说都认成一块单独的物理磁盘。这里不要和分区搞混了,分区时OS在一块物理磁盘上做的再次划分。而RAID卡提供给OS的,任何时候,都是一块或者几块逻辑盘,也就是OS认成的物理磁盘。而OS在这个磁盘上,还可以进行分区、格式化等操作。
RAID卡对逻辑磁盘再次划分的具体细节:既然要划分,就要心中有数,比如某块磁盘的某个区域,划分给那个逻辑盘使用,对应逻辑盘的LBA地址是多少,这块磁盘的RAID类型是什么等。而这些东西不像RAID映射那样根据几个简单的参数就能确定,而起对应关系是可以随时变化的,比如扩大和缩小,移动等。所以有必要再每块磁盘上保留一个区域,专门记录这宗逻辑盘划分信息,RAID类型以及组内的其他磁盘信息等,这些信息通称为RAID信息。SNIA委员会为了统一RAID信息的格式,专门定义了一种叫做DDF的标准,
RAID卡可以针对总线上的某几块盘做一种RAID类型,然后针对另外的几块盘做另外一种RAID类型。一种RAID类型中包含的磁盘共同组成一个RAID Group,简称RG。逻辑盘就是从这个RG中划分出来的,原则上逻辑盘不能跨RG来划分,就是说不能让一个逻辑盘的一部分处于一个RG,另一部分处于另一个RG。因为RG的RAID类型不一样,其性能也不一样,如果同一块逻辑盘中出现两种性能,对上层来说不是一件好事,速度可能会忽快忽慢。
4、逻辑卷管理
逻辑卷一旦创建,之后就无法改变,如果开始的时候划分了100G的逻辑盘,但是两年之后,空间使用快满了,但是又不能放到别的磁盘(逻辑盘),因为受上层文件系统的限制,一个文件不可能跨越多个分区来存放。更别提多个磁盘了。如果一个文件超过了这100G,那就死路一条了。。
所以必须有一种机制,在一个逻辑磁盘空间满了的时候,可以轻易的添加空间,而不让原来的数据受到损害,如果在RAID控制器那一层去划分,对于实现来说,不容易。所以,我们考虑把RAID控制器提交给OS的逻辑磁盘(OS会认为是物理磁盘),重现加以组织,再分配。这就是VM(Volume Manger)卷管理。
通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM),用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘,也可以提高I/O操作的性能,以及提供冗余保护,它的快照功能允许用户对逻辑卷进行实时的备份。
对一般用户来讲,使用最多的是动态调整文件系统大小的功能。这样,你在分区时就不必为如何设置分区的大小而烦恼,只要在硬盘中预留出部分空闲空间,然后根据系统的使用情况,动态调整分区大小。
再深入介绍逻辑卷管理之前,我们先了解如下概念:
LVM看起来很复杂,其实操作起来很简单,我们理一下思路,首先创建PV(真实或者RAID提供)——> 将PV加入VG ——> 在VG中创建LV ——> 然后格式化这个LV,当成普通硬盘来使用。
新插入一个逻辑层,对单个硬盘的读写会有一定的性能损失,但其带来的好处是巨大的。首先,逻辑分区大小不再受硬盘实际大小的限制,它可以扩展到几块硬盘上;其次,逻辑分区可以很方便的做调整大小、备份等维护操作;而且,如果系统中存在多块硬盘,通过设置逻辑卷到物理卷的映射关系(采用LVM striped mapping),可以提高I/O的读写性能,因为此时的读写是在多块硬盘上并发进行的,比对单个硬盘的读写显然要快很多。
下面是一个LVM使用的例子:
更多逻辑卷管理的资料参照博客:http://www.ibm.com/developerworks/cn/linux/l-lvm2/index.html
5、VGDA
VGDA(Volume Group Descriptor Area),VG中包含了哪些PV都写在了VG中的一个区域,这个区域就是VGDA,VGDA记录了VG的很多重要相关信息,包括VG中包含的PV的PV ID。
VGDA非常重要,所以被保存了多份。如果VG中只有一块磁盘,则该磁盘上保存2份VGDA;VG包含2块磁盘,则第1块磁盘包含2份VGDA,第2块只包含1份;VG中包含3块磁盘,则每个磁盘都保存有1份VGDA。
完好的VGDA与VG中总磁盘总数之比为Quorum,如果Quorum小于50%,此VG不能被继续访问,如果已经被激活,则自动关闭。
由于每一块磁盘上至少有一份VGDA,所以在一个新小型机上,只要给出未知VG中一块磁盘,就可以正确识别全部VG的信息,并注册到新小型机上,这个过程叫Import
命令是improtvg -y vg_name hdiskx
vg_name是希望的VG名,在执行improtvg时可以自定义VG名,因此系统中并没有更改VG名称的命令,如果想更改VG的名称,需要先执行exporrtvg命令,此命令没有对磁盘进行任何操作,磁盘上数据依然存在,只是将此VG在小型机系统中的定义删除了,任何时候可以重新Import回来.
在执行improtvg时候,系统可以从指定磁盘上读到VG中所有磁盘的定义,但如果VG中一些磁盘没有被系统识别到,(通过PV ID找寻到,VGDA中包含某个PVID在操作系统中所有磁盘设备上都找不到,可能的原因既包括该磁盘不存在,也可能是PVID没有正确读出来).那么系统将计算Quorum,大于50%,可以执行,但会有警告,小于50%,不允许improt此VG.
系统管理PV完全是靠PVID,尽管HDISKX设备号可变,但PVID不会变.拿到另一台机器也是如此,如果用命令改变了PVID,系统将认为原来的磁盘消失了,不能再找回来.更不巧的是,如果原有的PV还属于某个VG,那么这个VG再也发现不了他原来的成员盘,这个盘上的数据就无法找回,虽然磁盘和数据都存在.
1台主机hdisk2的VGDA信息丢失,恢复的步骤:
datavg包含hdisk1 hdisk4 hdisk2,
hdisk2的VGDA信息丢失,(判断方法:lqueryvg -Atp hdisk2,无法得到结果)
导致hdisk2中的LV全部不能MOUNT。
#lsvg -p datavg
hdisk1 active datavg
hdisk2 missing datavg
hdisk4 active datavg
exportvg 以后,rmdev -dl hdisk2,此时hdisk2的PVID也没有了
#lspv
hdisk2 none None
要恢复hdisk2中的LV信息,首先要把hdisk2想办法加入到datavg中。
# chdev -l hdisk2 -a pv=yes
此时,hdisk2又恢复了以前的PVID了。
# synclvodm datavg
将把hdisk2加入到datavg中,(因为系统的ODM库中,知道PVID=hdisk2是DATAVG的PV)
# lspv
hdisk2 0002039490ef datavg
# exportvg datavg (从ODM库中删除VGDA的信息)
# importvg -y datavg hdisk4 (不要HDISK2,因为此时HDISK2的VGDA是坏的)
importvg 的时候,系统会再次做synclvodm,这次将会把系统ODM中VGDA的信息同步到hdisk2上。
# lsvg -p datavg
hdisk1 active datavg
hdisk2 active datavg
hdisk4 active datavg
此时,HDISK2上的VGDA信息又恢复了。里面的LV可以读写了。不过对于HDISK2上的文件系统,需要做个fsck。