文章转自Live空间(http://delxu.spaces.live.com/blog/cns!D04F87F9ED029F69!2583.entry)和51cto技术博客(http://delxu.blog.51cto.com)首发。转发时务必表明出处,顺便给博主做个广告,文章写的真的很好,深入浅出,期待看到更好的博文,再次表示对博主的感谢!!!
【转】老菜鸟说给新菜鸟的存储基础知识

博主注:从版本号上看,此文原创者写于2006年9月4日,但是网上搜了很久也没找到原创作者的名字和博客URL,在这里只能说抱歉了。文章写的实在是好,深入浅出,非常适合当作培训教材。忍不住转载一下。(莫非是开心网的转帖瘾犯了。。。笑。。。)

相关URL: http://www.ixpub.net/archiver/tid-638595.html

=========以下为转帖的原文=============

内容:存储和相关基础知识
范围:限opensystem和windows
版本:Version 0.1 build 20060904
有些新手总是在各式各样的概念里绕来绕去,弄的不亦乐乎。所以我就把我的一些理解写了下来,供您参考。我说的不局限于任何一种具体产品和厂家,也可能有些说法和某些厂家的说法不一样,但是我觉得应该算的上是本原的东西,有以不变应万变之功效,呵呵,见笑。

1、关于HBA
HBA的全称为Host Bus Adapter,即主机总线适配器。

a、总线适配器是个什么东西呢?
我们首先要了解一下主机的结构,一台计算机内部多半由两条总线串在起来(当然实际情况会有不同,这里只讨论常见的,简单的情况),一条总线叫系统总线,一条叫I/O总线。系统总线上接了CPU,MEmory,cache什么的,I/O总线上接的就是外围设备,现如今最常见的就是PCI总线了。这两条总线之间用桥接的芯片或者说电路连接起来。举个形象的例子,就好比一个城市里,有两条主干道,一条属于行政区,一条属于商业区,中间有个环岛,将两条主干道连接到了一起,系统总线就好比行政区里的主干道,而I/O总线就好比商业区的主干道。系统总线和I/O总线的带宽的单位都是以Gbyte来记,但是显而易见的是,行政区的主干道和商业区的主干道相比的话,前者肯定更“核心”,更宽,更顺畅,设计的要求也高。
我们知道,在向公仆部门要求服务的时候,是要有一些接口的部门和程序的,而桥接芯片的作用就是连接和协调两条总线的工作的。
虽然I/O总线的速度和系统总线的带宽相比要低很多,但是好歹也是以G来计量的,而我们知道外围设备的速度,往往只有几百兆,甚至几十k而已,怎么协调工作呢?好比卖煎饼果子摊子不能直接戳到城市主干道上,怎么办?好办,在主干道边上开个2000平米的小吃城,把摊子都收进去好了。那么主机总线适配器的作用也就是这个,我们就是要把外设组织起来,连接到I/O总线上去!HBA就是指Host和I/O BUS直接的一个适配器,也好比一个水管工常说的“双通”。

b、常见的HBA有哪些呢?
比如显卡,网卡,scsi卡,1394卡等等。我要拿出来说的就是FCHBA和ATA&IDE。我们通常说的什么Emulex的LP9002,什么Qlogic的QLA2340都是FCHBA卡,就是将Fibre Channel的设备和IO总线连接起来的适配器。ATA也是一种适配器技术,我们PC主板上的ATA接口,就是一个磁盘适配器的对外接口,要强调的就是,ATA说的是适配器技术,IDE是说得存储外设技术,比如我们可以说IDE硬盘,IDE光驱,说ATA接口,但是说IDE接口,ATA硬盘就不时那么合适了,虽然很多情况下,大家都习惯把他们混在一起说。
描述HBA的时候,有几个主要的规范要说一下
  > 一个承上,就是说,HBA和IOBUS怎么连,我们经常说的PCI接口卡,就是指这个HBA卡是要插在PCI BUS上的PCI slot上的,但是现在的计算机上,不仅仅只有PCI总线而已,大家碰到的时候留意。
  >一个启下,就是说HBA要和外设怎么连,这样的规范就很多了。
  >再说HBA本身,比如带宽,比如运行机制(protocol等),独立处理能力等等
Tips:有时候我们看到的一块卡,看到的实际是一个物理的卡,有的时候实际上是多个Adapter,好比一家机构,挂多个牌子,有的时候,一块卡有两条通道,好比一家公司,有两套人马。
2、关于lun
a、lun的概念
   lun的全称是logical unit number,也就是逻辑单元号。我们知道scsi总线上可挂接的设备数量是有限的,一般为6个或者15个,我们可以用target ID(也有称为scsi id的)来描述这些设备,设备只要一加入系统,就有一个代号,我们在区别设备的时候,只要说几号几号就ok了。
   而实际上我们需要用来描述的对象,是远远超过该数字的,于是我们引进了lun的概念,也就是说lun id的作用就是扩充了target id。每个target下都可以有多个lun device,我们通常简称lun device为lun,这样就可以说每个设备的描述就有原来的target x变成target x lun y了,那么显而易见的,我们描述设备的能力增强了.就好比,以前你给别人邮寄东西,写地址的时候,可以写:
   xx市人民大街54号 xxx(收)
   但是自从高楼大厦越来越多,你不得不这么写:
   xx市人民大街54号xx大厦518室 xxx (收)
   所以我们可以总结一下,lun就是我们为了使用和描述更多设备及对象而引进的一个方法而已,一点也没什么特别的地方。

b、lun是什么东西?
   lun id不等于某个设备,只是个号码而已,不代表任何实体属性,在我们的实际环境里,我们碰到的lun可能是磁盘空间,可能是磁带机,或者是media changer等等.
   lun的神秘之处(相对于一些新手来说)在于,它很多时候不是什么可见的实体,而是一些虚拟的对象。比如一个阵列柜,主机那边看作是一个target device,那为了某些特殊需要,我们要将磁盘阵列柜的磁盘空间划分成若干个小的单元给主机来用,于是就产生了一些什么逻辑驱动器的说法,也就是比target device级别更低的逻辑对象,我们习惯于把这些更小的磁盘资源称之为lun0,lun1,lun2....什么的。而操作系统的机制使然,操作系统识别的最小存储对象级别就是lun device,这是一个逻辑对象,所以很多时候被称之为logical device。
   有人说,我的windows里,就认到一个磁盘呀,没看到什么lun的说法,是不是lun=physical disk呢?回答是否定的,只要你注意,磁盘的属性里就可以看到有一个lun的值,只是因为你的disk没有被划分为多个存储资源对象,而将整个磁盘当作一个lun来用,lun id默认为零,如此而已。
   我们曾经碰到过这样的问题,比如有人问,我们有一个磁盘阵列,连到了两个主机上,我们划分了一个lun给两个主机认到,然后我们想,先在操作系统将磁盘分为两个区,让两个主机分别使用两个分区,然后再出现某一台主机宕机之后,使用集群软件将该分区切换到另外一个主机上去,这样可行吗?答案也是否定的,集群软件操作的磁盘单元是lun,而不是分区,所以该操作是不可行的。当然,在一些环境,一般也是一些要求比较低的环境,可以在多个主机上挂载不同的磁盘分区,但是这种情况下,实际上是没有涉及到磁盘的切换的,所以在一些高要求的环境里,这种情况根本就不允许存在。
   还要说明的地方是,在有些厂商和有些产品的概念里,lun id被绑定到了具体的device上,比如ibm的一些带库,整个带库只有一个target id,然后changer,tape drive被分别分配为lun0,lun1,lun2.....,但是我们要注意到,这只是产品做了特别设计,也是少数情况。

c、存储和主机的电气独立时代的lun的概念
还有很多新手总是把阵列里面的磁盘和主机的内部磁盘的一些概念搞混淆了。
在磁盘阵列和磁带库大行其道的时代,存储越来越智能化,越来越像一个独立的机器,实际上存储和主机的电气独立本来就是一个必然趋势,俗话说得好,儿大要分家嘛。在存储越来越重要的时代,存储要自立门户是必然的事。
如果我们把存储当作一个独立的主机来看,理解起来就很简单了。我们说到lun的概念的时候,我们就要将分为两个层面。一个层面就是在阵列这个机器的os识别到的范围,一个层面就是服务器的os识别到的范围。这两个层面是相对独立的,因为如果我们把存储当作一个主机来看,那么它自然有自己的device,target,lun之说,而服务器也有自己的device,target,lun之说;另外一方面,这两个层面又是相互关联的,一个阵列的控制系统,大多都有虚拟化的功能,阵列想让主机看到什么样的东西,主机才能看到相应的东西。当然,服务器识别到的最小的存储资源,就是lun级别的。那么主机的HBA卡看到的存储上的存储资源就靠主要两个东西来定位,一个就是存储系统的控制器(target),一个就是lun id,这个lun是由存储的控制系统给定的,是存储系统的某部分存储资源。

d、lun masking,lun mapping
我们有了独立的磁盘阵列用了之后,服务器只要看到存储的控制系统,就有可能使用磁盘阵列的磁盘资源,但是磁盘阵列不可能只为某一个服务器来使用,所以他必须管制主机使用某部分磁盘资源。这个管制分为两个部分:一部分就是lun mapping,类似于绿色通道,就是保证服务器能看到某部分存储资源,一部分就是lun masking,类似于警戒线,就是保证服务器只可访问给它分配的存储资源,而没分配给服务器的资源,就不要染指了。
实现lun masking和lun mapping有三种方法:一个是基于存储控制系统来设置,一个是基于存储交换系统来设置,一个是基于服务器os来设置。
基于存储控制系统得设置,是比较常见的设置,比如很多磁盘阵列的控制系统,本身就能设置lun被某服务器看到。比如FastT的partition功能。
基于存储交换系统的设置,也是一种常用的方法,比如常说的zoning。
基于服务器os的设置,比较少采用,一般采用安装某些操作系统上安装某些软件来实现,因为这个方法全靠服务器自觉,所以比较少用,呵呵。

e、lun的multi-path
现在,存储网络越来越发达了,一个lun有多条通路可以访问也不是新鲜事了。
服务器使用多个HBA连接到存储网络,存储网络又可能是由多个交换设备组成,而存储系统又可能有多个控制器和链路,lun到服务器的存储网络链路又可能存在着多条不同的逻辑链路。那么,必然的,同一个physical lun在服务器上必然被识别为多个设备。因为os区别设备无非用的是总线,target id,lun id来,只要号码不同,就认为是不同的设备。
由于上面的情况,多路径管理软件应运而生了,比如emc的powerpath,这个软件的作用就是让操作系统知道那些操作系统识别到lun实际上是一个真正的physical lun,具体的做法,就是生成一个特别的设备文件,操作系统操作这个特殊的设备文件。而我们知道,设备文件+driver+firmware的一个作用,就是告诉操作系统该怎么使用这个设备。那么就是说,多路径管理软件从driver和设备文件着手,告诉了操作系统怎么来处理这些身份复杂的lun。
3、关于备份(Backup)和高可用性(High availability)
备份,从字面的意思来理解,其实就是现时存在和应用的一个实体的后备实体;
高可用性,即是指我们硬件的环境、设施、数据、应用系统等,在复杂环境下可用的能力和可能性达到一个较高的值;
在现实世界里,我们都讲究有一个稳定,可靠,所以我们经常在计算机环境设计里,涉及到高可用性和备份等等元素。
我首先把这两个词拿出来说,就是不想让新手们在什么双机热备,数据备份亚,集群等等概念里晕的不也乐乎。
对于备份我主要说说以下几个方面:
    a、设备的备份
    设备的备份,也就是我们在现时使用的设备之外,采取相同或者类似的设备做后备。
    比如我们在服务器上采用冗余电源,也叫后备电源,我们使用单独的硬盘来做RAID的备用盘,也叫热备盘。
    如果我们采取单独的一台服务器来做后备,这就成了主机的备份,主机的备份有很多种方式,比较著名的就是所谓的cluster,所谓的双机热备和双机容错,我很不喜欢鼓捣这些概念,我一概称他们为主机热备,因为他们有一个共同的特点,就是都是为了实现主机的备份,即某一个主机失效了,有另外一个主机顶替它来运行。实现主机热备的软件有很多,比如IBM的HACMP,HP的MCSG,SUN的sun cluster,Compaq的Ture Cluster,Veritas的VCS,EMC的autostart,ROSE HA等等

    b、数据的备份
    数据的备份,就是我们在现时使用的数据之外,实现或设置另外一份不同物理体现的、内容相同的的有效数据拷贝
    比如我们将生产数据拷贝到磁带上,就是一种数据备份方式。
    比如我们将生产数据复制到磁盘的另一个分区,另一个文件系统,或者拷贝到别的主机的磁盘上,等等,都是一种数据备份的方式。
    实现数据备份的软件有很多,比如一些磁带操作的小工具,tar,cpio等,大的工具软件有什么EMC Networker, Symantec Netbackup,CommVault,tapeware等等,数据复制的工具就更多了,操作系统的复制命令呀,emc replicator呀,srdf等等

    c、应用系统的备份
    应该说应用系统的备份,包含了以上两种备份,因为一个完善的应用系统,其设备和数据都是要求有备份的,那么初次之外,做为一个应用系统,除了设备和数据,他还包含了业务程序,人员,业务逻辑,外部环境等等一系列让应用跑起来的东西。
    在这个层面,就有一个比较热火的东西,那就是常说的远程容灾。远程容灾,就是在生产系统环境之外,在相隔较远的物理空间,构建相同或类似的一个应用系统,以达到在必要的时候顶替原生产系统工作的目标。
    要实现远程容灾的目的,除了我们说的外部环境,比如机房,电力,后勤保障,人员配备,业务程序之外,我们比较着重的一个环节,就是数据的问题,也就是我们在两个系统之间要保证数据的相对一致,实现这个目标的方法有很多,比如磁盘阵列之间的卷复制,比如两个主机之间文件系统上的复制,等等。当然,在一个系统里,把数据用磁带导出来,快递到另外一个系统地点,在用磁带把数据导进取,也不能说不是一个办法,但是这样操作,经常会和业务的逻辑相违背(呵呵,这么麻烦又耽误时间,估计一般很难接受)。
对于高可用性,我要说的是:
    可用性,即是指在各种复杂环境下,我们的数据,应用等计算资源都可以保持使用的能力和可能性。比如服务器配备冗余电源,就提高了服务器的可用性,好理解,一个电源工作不正常或者能力不够的是候,服务器不受影响嘛。再比如,我们的磁盘阵列采用双控制器,当某个控制器和链路工作不正常的时候,数据的访问能平滑的过渡到另外一个控制器上和链路上,这也是提高了数据和存储设备的可用性。
    那么什么是高可用性呢,我们就是一切为了提高系统可用性的实现方法和结果。
    要拿出来说的就是cluster,或者双机什么的。我们为了实现生产的应用系统的高可用性,其中一个环节就是实现服务器的高可用性,就是某服务器失效或者能力不足时,应用能平滑的过渡到另外的主机上,也就是说对于应用系统来说,服务器保证了相对的可用
那备份和高可用性有什么区别呢?
    那我要说,这根本没有可比性!因为这是两个不同的概念,他们的着眼点是不同的。备份只是保证了有后备,而高可用性则是为了保证应用的尽快恢复。
    打个比方,我们说备份就好比买保险,买保险不能保证你平安无事,但是肯定能减轻损失。我们说搞可用性,就是安全气囊,ABS,能让你快速的重新开始或者说将危险消弭于萌芽时刻。
    所以说我们做备份和提高可用性,两手都不可放松,也不互相矛盾。就好比买了好车,你就不买保险,或者你买了保险,就可以飙车,都是愚蠢的。