SCSI是一套完整的数据传输协议,其主要功能是在主机和存储设备之间传送命令、状态和块数据。在各类存储技术中,SCSI技术可谓是最重要的脊梁。
SCSI协议位于操作系统和外部资源之间,它具有一系列的功能组件,操作系统对外部设备(如磁盘、磁带、光盘、打印机等)的I/O操作均可以通过SCSI协议来实现,一般情况下,SCSI协议都嵌入到设备驱动器或者主机适配器的板载逻辑中。
例如,应用程序一般将数据作为文件来访问。尽管数据最终都将在磁盘上以数据块的方式存放,但是文件的检索需要一系列功能将未加工的块数据装配成应用程序能够操作的连续文件。这个过程的第一步由应用程序通过操作系统所连接的文件系统承担。文件系统以目录、文件夹和文件的方式来创建人们可读的数据抽象。当一个用户的应用程序打开一个文件时,会引发一系列的进程。它们使用底层SCSI命令,控制数据块从存储系统到内存的安全传输。因此在文件系统层次中,数据传输在文件描述和块I/O之间进行。
正像文件系统描述了对用户应用程序数据的抽象一样,物理存储设备被描述成文件系统的抽象。例如,在Windows中的E盘或者Linux中的/dev/sda可以是一个单独的磁盘、一个大磁盘的一部分或者多磁盘的条带阵列。文件系统依赖于卷管理功能,它将各种存储设备看作可以并发的、很容易访问的资源。设备的虚拟化将物理存储转换成逻辑存储,并且承担了在磁盘上放置数据块所需的复杂任务。文件/数据块转换和映射功能可以像一个单独的卷管理应用程序那样复杂,也可以像适配卡设备驱动程序接口那么简单明了。例如,Windows NT提供了Windows磁盘管理程序,为物理磁盘分配逻辑驱动器名。适配卡的设备驱动程序负责将它的资源作为一个物理SCSI实体,出现在Windows磁盘管理程序中。Windows磁盘管理程序可以为这些资源分配逻辑名,文件系统按顺序使用这些逻辑名为目录和文件确定位置。
如图1所示,逻辑抽象的层次从实际的物理SCSI设备一直到同主机系统的连接。在操作系统层次,一般的访问方法允许对SCSI设备进行统一的处理,而不考虑它们在系统中的物理连接。在保存文件时,文件系统并不关心逻辑驱动器是一个SCSI单元、一个Fibre Channel阵列还是千兆以太网的某个IP存储设备。在各种情况下,逻辑实体和物理存储的映射完成主机系统和合适的目标SCSI命令的发送,它在二者之间用来传输数据块。
不考虑潜在的通道,操作系统对物理设备的描述是通过总线/目标/LUN三元组定义的,这种三元组来自于并行SCSI技术。总线描述了主机上潜在的几个SCSI接口之一,每一个都支持一个单独的磁盘串。目标代表了串上一个单独的磁盘控制器,窄SCSI一共可以有7个,宽SCSI可以有15个。LUN标志允许控制器管理额外的磁盘,例如一个RAID设备。
总线/目标/LUN三元组和逻辑设备标识符之间的映射为物理设备提供了到高层文件系统的端口。因为Fibre Channel和IP存储是串行通信,没有总线设备,为了和操作系统的SCSI名称相兼容,总线标识符可以伪造。例如,一个单独的服务器中的两个IP存储网卡可以具有不同的总线标识符以模仿SCSI适配器配置。厂商不同,具体实现也不同,但是设备驱动器程序遵守操作系统的标准SCSI访问方法。
总线/目标/LUN标识符可以进一步映射到某个传输的寻址条件上。例如,FCP(Fibre Channel Protocol,光纤通道协议)将总线/目标/LUN映射到DI(deviceidentification,设备标识符)/LUN对上。因此,物理存储的表示有两个组成部分。一个是对于操作系统,使用大家都熟悉的基于SCSI三元组的可访问实体;另外一个是针对某个传输,以适应更改拓扑结构的寻址条件。
在这一层下面,数据块传送的启动器(initiator)和目标器(target)相互交换SCSI-3命令和状态。启动器部署在发起I/O请求的设备中,而目标器部署在执行I/O操作的设备中,一般来讲,主机侧的HBA卡作为启动器,而磁盘、阵列等作为目标设备。下图是一个典型的SCSI系统:
SCSI协议虽然是目前最为流行的数据传输协议,但是也存在着很多的缺点,如:SCSi总线上设备数限制为15,不适用于多服务器多存储设备的网络结构;SCSI总线的长度限制在25米,不适用于构造各种网络拓扑结构等。下图是SCSI协议流程: