数据恢复与硬盘修理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.9 ATA Command基础

要处理硬盘固件,就必须与硬盘内部的程序系统进行通信,自然也少不了与硬盘接口打交道,因此这里再简单介绍一下硬盘接口的相关知识。

在计算机存储系统中,硬盘的地位举足轻重,相应的,其接口技术的发展也经历了一代又一代的演变。在过去几十年的发展历程中,衍生出如ATA、SCSI、SATA、SAS(Serial Attached SCSI,串行连接SCSI)等多个体系,且每一个体系又都包含多项子标准,并由此构成了一个庞大的接口技术家族。而每次接口技术的变革,都为硬盘的新一轮发展打下了基础,使硬盘性能的提升成为可能。正是由于接口的重要作用,业界普遍以接口类型作为硬盘换代的主要标志。下面先回顾一下硬盘接口的历史沿革:从最早的ST-506/412接口,到后来的IDE、EIDE和同时代的SCSI接口,再到目前流行的SATA和SAS接口。由此我们可以了解这些技术的产生背景、特征以及随之而来的存储业界的变迁。

1.硬盘接口的初始时代

1956年9月,IBM的一个工程小组向世界展示了第一台磁盘存储系统—— IBM 350 RAMAC(Random Access Method of Accounting and Control),硬盘时代从此开始。不过,早期的硬盘主要用在飞机预约、自动银行、医学诊断及航空航天等专业领域,未涉及民用市场。直到20世纪80年代初PC诞生之后,这种情况才逐渐得到改善。而业界也广泛认为,硬盘接口技术应该从PC时代开始,因此,希捷公司提出的ST-506/412可以说是当今硬盘接口的始祖。

1981年8月,IBM推出了型号为5150的第一台PC。这台PC采用DOS 1.0操作系统,但不支持任何硬盘,直到后来改用DOS 2.0操作系统之后才引入了子目录技术,并增加了对大容量存储设备的支持。看到其中蕴含的商机,一些公司就研发出了专供IBM PC使用的外置硬盘。这套外置硬盘系统包含1个硬盘、1块控制卡和1个独立电源,硬盘在与控制卡相连的同时借助一条电缆与插在PC扩展槽中的适配器相连。

IBM很快就意识到硬盘对于PC的巨大价值,在1983年推出的PC/XT机型中,直接内置了一块容量为10MB的硬盘。同时,IBM还将独立的控制卡功能集成到硬盘的接口控制卡上,硬盘控制器的概念由此产生。在连接方面,IBM也首度引入希捷公司提出的ST-506/412硬盘接口。这种接口将硬盘的编解码器放置在PC的硬盘适配卡上,并使用一根34芯的控制电缆(Control Cable)和一根20芯的数据电缆(Data Cable)将硬盘与计算机连接起来。由于使用较为方便,IBM遂将该技术大规模引入PC/XT的硬盘系统,而ST-506/412也就顺理成章地成为PC硬盘接口的事实标准。IBM后来推出的PC/AT机型也采用了同样的技术方案。

由于那个时代的硬盘尚处于发展初期,容量低,性能也很差,因此作为第一代硬盘接口的ST-506/412,其速度并不重要。然而,PC的出现给硬盘厂商打了一支强心针。面对这个潜力巨大的市场,所有硬盘厂商都投入空前的精力开发新技术,在很短的时间内,硬盘的存储容量和读写性能就获得了快速提升,占据统治地位的ST-506/412接口很快遭遇瓶颈。有鉴于此,迈拓公司在1983年开发出一种名为ESDI(Enhanced Small Drive Interface,增强型小型设备接口)的新型接口技术,如图1-26所示。ESDI虽然也使用两根电缆来连接硬盘,但它对电缆的定义作了改变——最关键的是,它将编解码器直接放在硬盘的本体而非计算机的适配卡上,从而有效提高了硬盘的读写效率和工作稳定性,其传输速率也达到10Mb/s,是ST-506/412接口的2~4倍。

图1-26 IBM DNES 309270 90X6806硬盘(ESDI接口)

在那个年代,ESDI接口所拥有的10Mb/s的传输速率绝对是一个可观的高指标,它的出现理所当然地终结了ST-506/412接口的主导地位,ESDI也就成为新的标准,被众多OEM厂商用于IBM兼容机中。ST-506/412接口则逐渐被淘汰出局,到1987年前后,它便基本从市场上消失。以今天的眼光来看,这两种接口都非常原始,但它们的存在对规范硬盘接口标准起到了非常重要的作用,使PC硬盘的硬件兼容性得到了充分的保证,同时也为后续标准的提出打下了良好的基础。

ESDI接口一直使用到20世纪90年初。虽然迈拓公司一直积极发展其新版本,但ESDI接口成本高、设计较为复杂的问题一直难以克服。在IDE接口出现之后,ESDI接口也很快退出市场,IDE成为新的技术标准。今天我们使用的SATA硬盘,在本质上仍然隶属于IDE体系。

2.ATA-1 —— IDE硬盘出现

IDE接口最初是在1986年由CDC(Control Data Corporation,控制数据公司,1989年10月,其硬盘驱动器生产部门被希捷公司并购)、康柏和西部数据3家厂商共同开发的,全称为“Integrated Drive Electronics”,意思是将控制器与硬盘集成在一起的新型硬盘驱动器。这种硬盘的专用接口也被外界直接冠以“IDE”之名,但它真正的名称应该是“ATA接口”(Advanced Technology Attachment, ATA)。

IDE硬盘出现后,计算机的存储系统变得更为简单,不再需要额外的控制器,只需使用一根专门的40针线缆将硬盘与PC主板的对应接口或硬盘适配卡直接连接即可。由于硬盘与控制器的整合,首先,硬盘厂商不必再考虑自己生产的硬盘与其他厂商生产的控制器能否完全兼容,只要硬盘自身不发生故障,就能够在任何计算机系统中稳定地运行,大大减轻了硬盘厂商的负担,硬盘的兼容性与可靠性有了保证;其次,整合结构也有效减少了硬盘接口的电缆数目与长度,数据传输的可靠性得到了明显的提升。加之IDE硬盘成本明显低于ESDI硬盘,非常适合应用于PC系统中,所以该技术被提出后很快开始流行,而IDE硬盘附带的ATA接口也自然而然成为新的硬盘接口标准。

1990年,ATA-1标准被提交给ANSI(美国国家标准局)进行标准化。虽然在这时ATA-1已然成为事实标准,但ANSI内部的认证工作仍然花费了较长的时间,原因很可能是ATA-1是世界上第一个关于硬盘接口的标准,所以ANSI工作组对此非常慎重。但非常离谱的是,这项工作居然拖到1994年才完成,ATA-1标准才得以正式颁布,此时距离ATA-1的实际使用已经过去了四五年。

ATA-1标准有3项技术亮点,分别是支持双硬盘、引入PIO传输模式、支持DMA传输模式。在硬盘连接方面,ATA-1允许两块硬盘分享一个通道,两者分别定义为Master和Slave,也就是我们熟知的“主/从盘”的概念。在传输方面,ATA-1主要采用PIO传输中的0、1、2模式,三者支持的速度分别为3.3MB/s、5.2MB/s和8.3MB/s。另外,它还支持单字(Single Word)DMA 0、DMA 1、DMA 2和多字(Multi Word)DMA 0共4种DMA传输模式。但是,DMA模式在ATA-1标准中并没有得到实质性的应用。

ATA-1标准出现之后,自然是考虑接替它的ATA-2标准。但对ATA-2,西部数据和希捷出现了严重的分歧。西部数据公司于1994年提出EIDE(Enhanced IDE,增强型IDE)的概念,它实际上包含ATA-2和ATA PI(ATA Packet Interface)两项标准。其中,ATA-2为ATA-1的升级,而ATA PI则供CD-ROM、磁带机等存储设备使用。而希捷公司提出的Fast-ATA概念只针对硬盘,未考虑光存储设备的需求。但由于Fast-ATA的定义比EIDE更为清晰,从而获得了另一硬盘大厂昆腾的支持,在一定程度上具有更大的影响力。可另一方面,CD-ROM在当时发展迅速,西部数据公司提出的ATA PI标准也得到了广泛的应用,导致业界经常将Fast-ATA和EIDE两种技术混为一谈。需要明确的是,二者都是企业标准而非ANSI认可的国际标准,ANSI认可的ATA-2标准直到1996年才发布,该标准很好地将Fast-ATA和EIDE两项技术的特长融合在一起。

相比ATA-1标准,ATA-2标准在许多方面都有长足的进步。首先,ATA-2标准提供PIO 3、PIO 4和多字DMA 1、DMA 2模式,最高数据传输率可达16.6MB/s,相当于ATA-1接口的2倍;其次,ATA-2标准引入了区块传输机制,有效提升了数据传输速率;第三,ATA-2标准支持LBA技术,使计算机的可管理硬盘空间突破了ATA-1接口528MB的容量限制,达到当时被视为“超级海量”的8.4GB。

尽管技术提升明显,但业界并没有在ATA-2标准上停留太长时间。1997年,ATA-3标准由ANSI正式发布。与上一次升级不同,ATA-3并没有增加更高速率的工作模式,所允许的最高传输率仍维持在16.6MB/s的水准。ATA-3标准的主要侧重点在于提升数据传输的可靠性:其一,引入S.M.A.R.T(Self-Monitoring Analysis and Reporting Technology),让硬盘具备自主检测、分析和报告功能,这被广泛认为是一项划时代的改进;其二,ATA-3标准增加了一个简单的密码保护机制,在一定程度上提升了计算机系统的安全性;第三,针对传统40针排线容易造成传输错误的问题,ATA-3标准采取了一些改良措施。经过一番优化之后,ATA-3具备了很高的实用价值,在很短的时间内就完全取代了ATA-2,成为IDE硬盘的主导接口标准。

随后出现的ATA/ATA PI-4标准开创了Ultra DMA时代。20世纪90年代中后期,PC高速普及,硬盘领域的技术发展非常活跃,接口技术自然首当其冲。ATA-3标准同样没有使用太长的时间,因为Intel和昆腾早在1996年便联手制定了更先进的Ultra DMA/33标准,并于1998年获得ANSI认证,成为ATA/ATA PI-4正式标准,ATA接口由此迎来新一轮的重大技术变革。此时,ANSI标准的名称从纯粹的“ATA”演变为“ATA/ATA PI”,原因就在于CD-ROM驱动器已成为PC的标准配置,将ATA PI接口标准化恰逢其时。ATA/ATA PI-4标准拥有大量的技术改进。第一,支持Ultra DMA 0、DMA 1、DMA 2模式。Ultra DMA可以将时钟脉冲的上升沿和下降沿都用于数据传输,即1个时钟周期内可完成2次数据传输,由此将硬盘的接口速率提升到了33MB/s。也正因如此,ATA/ATA PI-4标准也被业界称为Ultra ATA/33、Ultra DMA/33或ATA-33。第二,引入80针结构的高性能数据线,其中40针为原有的数据线,新增的40针为接地线,可有效增强线路的抗干扰性。在ATA/ATA PI-4标准中,80针排线只是一个可选项,主板和硬盘厂商都倾向于使用廉价的40针排线,这种情况直到ATA/ATA PI-5标准出现之后才彻底改观。第三,引入CRC(循环冗余校验码)机制,优化了数据操作指令。这些细节方面的改进同样明显提升了ATA/ATA PI-4接口的传输品质。

在此之后,Intel与昆腾在1998年2月又拿出Ultra DMA/33的升级版本Ultra DMA/66。ANSI也在2000年通过对该版本的认证,颁布了对应的ATA/ATA PI-5标准。为实现66MB/s的翻倍效能,Ultra DMA/66标准对信号的时钟边沿特性进行了改进,令上升沿信号和下降沿信号各被识别为1个时钟周期,传输频率比Ultra DMA/33标准提高了1倍。由于效能大幅提升,数据线的信号干扰问题也越来越严重,所以Ultra DMA/66标准要求强制使用80针结构的高性能数据线,在一定程度上缓解了这个问题。此外,它也继承了CRC技术,有效保障了数据在高速传输过程中的完整性。

Ultra DMA/66标准同样在很短的时间里就占据了主导地位,Ultra DMA/33标准退居二线。但很快,业界发现Ultra DMA/66接口的速度仍然不够快。当时正处于硬盘技术的快速发展期,硬盘内部传输速率快速提升,Ultra DMA/66接口大有成为瓶颈的可能,因此,Intel和昆腾又着手于2000年6月推出了Ultra DMA/100标准。此时,硬盘市场竞争的激烈程度超乎想象,IBM、迈拓和希捷在该标准公布前就推出相关产品,VIA、SiS等芯片组厂商更是迫不及待,掌控标准主导权的昆腾反而落后。Ultra DMA/100标准构建在Ultra DMA/66标准的基础之上,但它将LBA模式扩展到28位,从而使支持的硬盘容量达到137GB。除此之外,Ultra DMA/100标准还引入了噪音管理和多媒体数据流命令这两项革新。前者允许用户在BIOS中设定硬盘的工作状态,分别是高性能或低噪音。因为当时的硬盘普遍存在工作噪音较高的问题,噪音管理技术就显得十分有用。而新增的多媒体数据流命令主要针对音/视频压缩而设立,这些应用都要求硬盘写入动作连续进行。尽管这项技术在Ultra DMA/100时代并没有得到实质性的推行,但后来多数硬盘厂商都采纳了这项技术。2002年,ANSI通过Ultra DMA/100认证,并颁布了相应的ATA/ATA PI-6标准,但此时Ultra DMA/100接口早已遍地开花,甚至连Ultra DMA/133接口都已广为使用。

到此为止,ATA标准族的发展宣告终止。Intel公司认为,基于并行原理的ATA接口失去了继续发展的价值。因为随着传输性能的提升,信号干扰越来越严重,数据在传输过程中频频出错,传输率每提升一小步都极为困难。为彻底解决这个问题,Intel在2000年春季的开发者论坛上率先提出串行ATA的概念,希望以高频率串行传输的方式实现硬盘接口的性能飞跃。随后,Intel宣布组建串行ATA工作小组,成员包括IBM、希捷、迈拓、昆腾(2000年10月被迈拓收购)、Dell等厂商,其中担负核心开发任务的是希捷公司。然而,工作小组中的迈拓公司别有想法,在收购昆腾之后便掌握了Ultra DMA系列标准的主导权。但进入串行时代后,标准的主导权落到了希捷手中,迈拓因此失去了制定硬盘接口标准的权力。显然,迈拓公司不甘于此。加之根据串行工作小组的开发计划,串行ATA至少要等到2003年才能进入实用阶段,两代标准过渡间隔时间太长,迈拓便萌生进一步升级Ultra DMA标准的想法。2001年7月,迈拓推出Ultra DMA/133接口规范,将硬盘接口的数据传输速率提高到133MB/s,理论性能十分接近串行ATA 1.0。遗憾的是,这套标准只是Ultra DMA/100标准的高频率版本,两者的技术特性如出一辙。虽然这样做可以实现“无缝兼容”,但并行总线的缺陷也因此暴露无遗——高频率让Ultra DMA/133接口在传输数据的过程中信号干扰更为严重,数据出错率甚高。加上当时硬盘的内部传输速率远未突破100MB/s, Ultra DMA/133接口的性能优势并没有在实践中获得丝毫体现。也正因如此,ANSI没有接纳Ultra DMA/133作为新一代硬盘接口标准,它仅是迈拓公司的自有规范,其余几个硬盘大厂也都没有对该标准提供支持。不过,芯片组厂商和控制器厂商对此态度十分积极,VIA、SiS、ALi、Promise、Highpoint、Adaptec纷纷响应号召,开发兼容Ultra DMA/133接口的芯片组或磁盘控制器,Ultra DMA/133接口因此也获得了一定程度的应用。到此为止,并行ATA接口体系画上了句号,PC迎来了崭新的串行ATA时代。

3.串行ATA

在ATA-7协议发布之前,ATA协议等同于PATA协议。从ATA-7协议开始,到后来发布的ATA-8协议,ATA协议中加入了SATA这一新的实现形式。现在的ATA协议是由PATA协议和SATA协议共同构成的—— ATA-8协议的第一卷给出了ATA协议的基本内容,第二卷给出了PATA协议的实现规范,第三卷给出了SATA协议的实现规范。在ATA-7之前的ATA协议中,第一卷和第二卷的内容是合并在一起的,而且没有第三卷的内容。

随着ATA-8协议的正式发布,经过两年的反复修订,作为ATA-8协议一部分的《ATA体系结构模型》也浮出水面。在这一文档中,明确区分了ATA体系结构模型、ATA实现标准和ATA具体实现的概念。这一文档给出了现有ATA协议实现方式中应共同遵循的抽象结构,并指明各种实现方式只要兼容这一标准,可以采用各种形式。如此一来,只要提出新的实现标准,ATA协议就可以实现新的兼容形式。ATA体系结构模型如图1-27所示。

图1-27 ATA体系结构模型

在这一体系结构模型中,提出了ATA协议的分层模型和ATA协议的“客户端-服务器”模型。设备作为“服务器”,具有和主机同等的地位和层次结构,如图1-28和图1-29所示。ATA协议在主机端和设备端都获得了巨大的发展空间。

图1-28 ATA层次模型

图1-29 ATA传输实现

纵观ATA协议的发展历史,通过从ATA协议中抽象出ATA体系结构模型(AAM), PATA和ATA终于分清了形式和内容的关系—— PATA和SATA一样,都是ATA协议的特例,是ATA协议具体的实现方式,并各自遵循特定的实现标准。

在这些协议里,与本书有直接联系的就是ATA/ATA PI命令集。以ATA-8为例,该命令集包括ATA协议的实现,指明了主机系统访问存储设备的命令集。该命令集为系统制造商、系统集成商、软件供应商和智能存储设备制造商提供了一个通用命令集。ATA文档之间的关系如图1-30所示。

图1-30 ATA文档关系

ATA设备指的是仅实现了通用特征集但没有实现包特征集的设备。ATA8-ACS设备指的是按ATA8-ACS标准实现的设备。而ATA PI设备指的是实现了包特征集却没有实现通用特征集的设备。设备对部分通用特征集和包特征集的支持情况如表1-12所示。

表1-12 设备对部分特征集的支持情况

命令可以通过两种方式进行传送。对实现通用特征集的设备,通过向设备传送一个命令块来实现所有命令和命令参数的传送。对实现包特征集的设备,使用设备重置和包命令集来控制,类似通用特征集的子集。

一般的主板都集成了两个IDE控制器(分别是主控制器和次控制器),并使用不同的端口地址(主控制器为1F0H~1F7H、3F6H~3F7H,次控制器为170H~177H、376H~377H)。每个I/O地址对应IDE控制器的一个寄存器。主控制器的I/O地址所对应的寄存器如下。

1F0(读、写):数据寄存器。

1F1(读):错误寄存器。

1F1(写):特征寄存器。

1F2(读、写):扇区数寄存器。

1F3(读、写):LBA低字节寄存器。

1F4(读、写):LBA中间字节寄存器。

1F5(读、写):LBA高字节寄存器。

1F6(读、写):驱动器/磁头寄存器。

1F7(读):状态寄存器。

1F7(写):命令寄存器。

3F6(读):备用状态寄存器。

3F6(写):设备控制寄存器。

3F7(读):驱动器地址寄存器。

状态寄存器是一个8位寄存器,从左到右各位的意义分别如下。

BSY(Busy):忙。

DRDY(Device Ready):设备就绪。

DF(Device Fault):设备故障。

DSC(Seek Complete):寻道完成。

DRQ(Data Transfer Requested):数据传输请求。

CORR(Data Corrected):按ECC算法校正从硬盘中读取的数据。

IDX(Index Mark):索引标志。

ERR(Error):错误。

错误寄存器也是一个8位寄存器,从左到右各位的意义分别如下。

BBK(Bad Block):坏块。

UNC(Uncorrectable Data Error):读扇区时出现无法校正的ECC错误。

MC(Media Changed):介质变化。

IDNF(ID Mark Not Found):没找到要访问的扇区或CRC错误。

MCR(Media Change Requested):介质变化请求。

ABRT(Command Aborted):命令失败。

TK0NF(Track 0 Not Found):重校准时没有发现0磁道。

AMNF(Address Mark Not Found):没找到要访问的扇区。

以希捷Barracuda ATA IV系列硬盘为例,该系列硬盘支持16位数据传输以及PIO模式0~4、DMA模式0~2、Ultra DMA模式0~5,支持的ATA标准命令集如表1-13所示,与主机的电路连接如图1-31所示(详细描述请参考ATA-5标准)。

表1-13 希捷Barracuda ATA IV系列硬盘支持的ATA命令

图1-31 希捷Barracuda ATA IV系列硬盘与主机连接图

以设备识别命令(命令代码ECH)为例,该命令在加电后将设备信息传送到主机。这些信息组织成一个单一的512字节的数据块,该Barracuda ATA IV硬盘的内容如表1-14所示。其中所有保留的位或字都应置0。

表1-14 设备识别命令

续表

其他命令(如设置特征集命令、SMART命令等)大都类似。

在ATA体系高速发展的同时,针对服务器/工作站设计的SCSI接口同样也在高速前进。SCSI是一种总线型的系统接口,可连接多种不同类型的存储设备,这一点与专为硬盘服务的ATA接口有明显的区别。而在工作模式上,SCSI也与ATA截然不同。SCSI系统拥有专门的总线控制卡,所有与数据的读写和传输相关的运算工作都由SCSI卡独立完成,无须耗费CPU资源。因此,SCSI设备的CPU占用率非常低,这对读/写操作极度频繁的服务器/工作站系统来说非常重要。而ATA接口则不同,它的接口控制器只能实现信号转接,实际运算工作都得由CPU完成。所以,可以看到,ATA硬盘在读写大数据量时,系统CPU的占用率非常高,用户除了等待没有别的选择。这种特性注定ATA不可能在服务器领域生存,SCSI总线将成为服务器/工作站厂商唯一的选择。

SCSI总线的诞生时间最早可以追溯到1979年。当时,美国的Shugart Associates公司(希捷公司的前身)开发出了一种8位宽度的并行总线,用于小型机与外部设备的连接。该接口被Shugart Associates命名为“SASI”(Shugart Associates System Interface)。在基本结构上,SASI接口采用了IBM提出的I/O通道方式,允许单台或多台计算机在单一的总线上与多台外设进行通信。在那个年代,SASI的出现堪称一大创举,Shugart Associates公司也对该技术寄予厚望。1980年,Shugart Associates将SASI提交给ANSI委员会,希望它能够成为业界公认的总线标准,但ANSI认为SASI不够完善而未予批准。Shugart Associates没有就此放弃,而是迅速根据ANSI的反馈意见对SASI总线技术进行了修订,在1981年底重新将它提交给ANSI并成功获得批准。ANSI下属的X3T9.2委员会接受了SASI接口,并决定在SASI接口的基础上设计更具通用性的SCSI接口。1984年,X3T9.2委员会将SCSI-1标准草案提交给ANSI。经过两年的讨论,ANSI于1986年6月正式认可SCSI-1,将之纳为ANSI X3.131-1986标准,SCSI标准正式诞生。不过在这之前,已有一些计算机厂商迫不及待地引入了SCSI技术,如苹果公司在1985年推出的Macintosh机型中就率先采用SCSI-1作为计算机与外部设备的连接总线。

与初始SASI接口规格相同,SCSI-1接口也采用8位结构的并行总线,工作频率为5MHz,数据传输率为5MB/s。在1986年,这样的规格非常可观。不过最富远见的是,SCSI-1不仅支持标准的单端信号(Single-End, SE)传递方式,还支持差分信号(Differential)传递方式。传统的信号传递方式只使用1条线路,高电平表示“1”、低电平表示“0”;而差分信号则要求使用一对线路,以它们的电压差作为二进制数据的区分标志,如电压差为正值表示“1”、为负值表示“0”(或相反)。这样,即便在数据传输过程中遇到严重的干扰,导致传输信号的异常变大或变小,但两条线路的电压差值总可以保持在一个相对固定的范围内,最终的二进制数表示不会受到影响。也就是说,差分信号具有很强的抗干扰性能。这项设计也为后续SCSI技术所采纳并成为标准。在传输模式方面,SCSI-1可支持同步模式(Synchronous)和异步模式(Asynchronous),具有良好的适应性。

超强的连接能力是SCSI-1技术的主要亮点之一,它使用50针扁平电缆(单端信号,称为A型线缆)或25对双绞线电缆(差分信号)与外部设备相连。如果使用单端信号,数据线缆的长度限制在6米;而如果采用差分信号,线缆的长度最大可达到25米,抗干扰能力明显优于前者。由于信号的表达方式和连接总线都不相同,单端SCSI-1设备与差分SCSI-1设备自然无法兼容——两者既不能同时串接到一条线缆上,也不能相互转换连接。不过,真正获得广泛应用的还是单端信号技术,原因在于它的成本较为低廉,6米长的线缆也足够使用。差分信号技术固然在抗干扰方面胜出一筹,但其高昂的成本令多数厂商难以接受。不论采用何种信号技术,SCSI-1都能在一条总线上同时连接8个SCSI设备(包括计算机主机,可连接的外设数量为7个)。

SCSI-1标准的概念不仅局限于总线传输和接口连接,也深入到外设的逻辑控制层面。例如,SCSI硬盘采用LBA方式寻址,逻辑块的大小通常被默认设定为512Byte,用户也可根据需要进行更改。这种方式与IDE硬盘的CHS寻址方式存在本质的区别。SCSI-1标准还包含许多可选的基本控制命令,这些命令分别针对不同的外设产品。但由于外设种类繁多,SCSI的命令集显得非常烦琐。后来,业界干脆在这些命令集中抽取了18条基本命令,组成由所有外设共享的公共命令集(Common Command Set, CCS),该命令集也成为SCSI-2规范的基础。

SCSI-1标准推出不久,后续的SCSI-2标准草案就于1988年诞生了,硬盘厂商也迫不及待地开始相关产品的研制工作。1990年8月,ANSI的X.3T9委员会正式批准了SCSI-2标准(对应于ANSI X3.131-1990标准),但在4个月后,ANSI又作出召回决定,对SCSI-2标准进行了进一步的修改,并直到1994年1月才正式发布(对应于ANSI X3.131-1994标准)。

与单纯的SCSI-1标准不同,SCSI-2标准先后出现了FAST SCSI、WIDE SCSI和FAST WIDE SCSI共3个分支规范:FAST SCSI为8位总线,工作频率提升至10MHz,总线传输率提升至10MB/s,无缝兼容之前所有的SCSI-1设备;WIDE SCSI采用16位总线、5MHz频率设计,接口速度为10MB/s,支持15个外部设备;FAST WIDE SCSI采用16位总线、10MHz频率设计,数据传输率达到20MB/s。为适应这种改变,16位宽度的WIDE SCSI和FAST WIDE SCSI都使用+5V的高压差分信号(High Voltage Differential Signal,简称HVDS)技术,并引入新型的68针扁平线缆(称为B型线缆)和连接器,但线缆的长度由先前的6米缩短至3米。也是在SCSI-2时代,出现了一种80针的D型SCA(Single Connector Attachment,单一连接器附属装置)接口。该接口由Sun、希捷和Conner共同提出,通过将SCSI-2的50针或68针接口与电源线、SCSI ID信号、LED信号、主轴马达同步信号整合,有效提高了SCSI设备连接的方便性,主要用于服务器的热插拔环境中。

SCSI-2标准带来的另一项重大变革是命令队列(Command Queuing)功能,该功能可以对硬盘的读/写命令队列进行优化,使操作任务能够在最短的时间内完成,达到提升硬盘性能的目的。而在PC系统中,类似的功能直到近期才被引入(也就是SATA 2.0的原生命令队列技术,距离SCSI-2标准的正式颁布已经过去了整整15年)。

在SCSI-2还没有成为正式标准时,SCSI-3标准就被提上了日程。SCSI-3标准与前两代标准在概念上存在巨大的差异,它不仅包含SCSI的传统范畴,而且将所有的物理连接、电气接口、主要命令集和具体协议都纳入SCSI-3体系中。为适应这种变化,SCSI-3采用了层级(Layer)的概念,在协议和互连方面增加了FC、IEEE 1394、SSA等串行接口。继承原来的SCSI-1和SCSI-2的并行接口称为SPI-1(SCSI-3 Parallel Interface-1)。但为通俗起见,仍然将SCSI-3 Parallel Interface简称为SCSI-3或Ultra SCSI,这样做也符合业界的习惯。需要明确的是,SCSI-3 Parallel Interface-1/Ultra SCSI只是SCSI-3标准的一个基本组成部分。

SCSI-3标准颁布于1995年,细分为标准型Ultra SCSI和扩展型WIDE Ultra SCSI两项子规范(SCSI-3 Parallel Interface-1又称为Ultra SCSI便出于此)。Ultra SCSI仍沿用传统的8位总线,但工作频率被提升至20MHz,对应于20MB/s的数据传输率,使用传统的50针线缆;WIDE Ultra SCSI则使用16位总线、20MHz频率的设计,这样便获得了40MB/s的高性能,但它必须使用68针B型线缆。由于工作频率较高,信号干扰就成了大问题。为保证数据传输的可靠性,Ultra SCSI和WIDE Ultra SCSI不得不将线缆长度进一步缩短到1.5米,这大大减弱了其扩展能力。

1997年,SCSI行业协会(SCSI Trade Association,简称STA)颁布了Ultra 2 SCSI规范,这被广泛认为是SCSI技术史上的里程碑。为解决Ultra SCSI标准存在的信号干扰严重的问题,Ultra 2 SCSI标准引入了更为先进的低压差分(Low Voltage Differential,简称LVDS,电压为+3.3V)技术来表达和传输信号。LVDS的工作原理类似于前面提到过的高压差分(HVDS),两者都具有卓越的抗干扰性能,区别在于LVDS技术拥有更低的功耗。LVDS的引入让Ultra 2 SCSI标准的工作频率轻易攀升到40MHz,而Ultra 2 SCSI标准自身又包含标准型Ultra 2 SCSI接口和WIDE Ultra 2 SCSI接口两种方案,前者使用8位总线、后者使用16位总线,使它们的数据传输率分别达到40MB/s和80MB/s,性能大幅领先ATA技术体系。此外,LVDS技术也让Ultra 2 SCSI标准的线缆长度从之前的1.5米大幅度跃升至25米,而16位WIDE Ultra 2 SCSI标准的线缆长度也达到了12米,充分满足了服务器系统的扩展要求。

尽管技术先进,性能也足够使用,但Ultra 2 SCSI标准并没有风光太久。仅在Ultra 2 SCSI标准发布一年后,它的接替者—— Ultra 3 SCSI就诞生了,SCSI总线两三年升级一次的惯例也被打破。Ultra 3 SCSI标准基于Ultra 2 SCSI标准的设计,沿用LVDS技术和40MHz总线,但引入了DDR双倍传输率设计,允许在1个时钟周期内进行2次数据传输,这样,其数据传输频率实际上达到了80MHz。Ultra 3 SCSI标准彻底抛弃了过时的8位总线,只提供16位总线,这样,它所提供的数据传输速率便达到了160MB/s。可非常遗憾的是,Ultra 3 SCSI标准的出台太过匆忙,导致其自身仍存在一些没有及时修正的技术缺陷,后果便是Ultra 3 SCSI设备与控制卡之间出现严重的不兼容现象,令其无法稳定工作在160MB/s的高速模式下,不得不以低速模式运行。后来,Adaptec公司(SCSI控制卡厂商)对Ultra 3 SCSI标准进行了必要的技术修订,并于1998年9月颁布了新的标准,也就是Ultra 160 SCSI标准。

Ultra 160 SCSI标准几乎继承了Ultra 3 SCSI标准的所有技术特性——使用LVDS信号、DDR双倍率总线,总线数据传输率为160MB/s。此外,它还具有域确认和循环冗余检测等功能。更重要的是,它彻底解决了Ultra 3 SCSI标准存在的兼容性问题,在推出之后便迅速获得各厂商的响应并成为事实上的新标准,应用范围也相当广泛。在那个年代,几乎所有的服务器和工作站都采用Ultra 160 SCSI存储系统,甚至今天还有不少Ultra 160 SCSI产品活跃在市场上,足见其生命力之顽强。

Ultra 320 SCSI是最后一代并行技术体系的SCSI标准,诞生于2001年。在基础技术上,Ultra 320 SCSI标准与Ultra 160 SCSI标准并没有本质上的区别,只是将总线的工作频率提高了1倍,达到80MHz,这样便拥有了高达320MB/s的数据传输率。除接口性能提升外,Ultra 320 SCSI标准还带来了SCSI封包、快速仲裁与选择等多项新特性,前者可以有效缩短命令过程的管理时间,后者则能将总线控制权的转交时间大大缩短,其目的都是为了提高SCSI系统的总线使用效率。

Ultra 320 SCSI同样最多可以连接15个外设。如果只连接单个设备,Ultra 320 SCSI允许的线缆长度可达25米;但如果连接多个设备,线缆的长度就被限制在12米,这样才能保证数据传输的稳定性。虽然如此,Ultra 320 SCSI线缆的长度还是非常可观的,毕竟现实中不会有多少计算机需要使用超过12米的SCSI线缆。Ultra 320 SCSI标准推出之后,硬盘厂商态度甚为积极,IBM、日立、希捷、迈拓纷纷推出相关产品,Ultra 320 SCSI时代很快到来。Ultra 320 SCSI标准提供的宽裕的总线带宽也让服务器可以无障碍地挂接多个SCSI设备,因此在高端系统中,Ultra320 SCSI迅速成为标准,而且这种情况一直延续到现在。

SCSI接口汇总如表1-15所示。

表1-15 SCSI接口汇总

通过抽象出SCSI体系结构模型(SAM), SCSI协议能够拥有各种实现形式,如并行SCSI、串行SCSI、iSCSI、光纤通道、IEEE 1394,如图1-32所示,其中的缩略语含义如下。

图1-32 SCSI标准体系

SBC:SCSI-3块命令集,第一代磁盘驱动器命令集。

SBC-2:SCSI块命令集-2,第二代磁盘驱动器命令集。

SBC-3:SCSI块命令集-3,第三代磁盘驱动器命令集。

RBC:精简块命令集,简化的磁盘驱动器命令集。

RBC_AM1:精简块命令集修订版本1, RBC的第一个修订版本。

SSC:SCSI-3流命令集,第一代磁带驱动器命令集。

SSC-2:SCSI流命令集-2,第二代磁带驱动器命令集。

SSC-3:SCSI流命令集-3,第三代磁带驱动器命令集。

SMC:SCSI-3介质更换命令集,第一代自动介质更换命令集。

SMC-2:SCSI介质更换命令集-2,第二代自动介质更换命令集。

SMC-3:SCSI介质更换命令集-3,第三代自动介质更换命令集。

MMC:多媒体命令集,第一代CD-ROM命令集。

MMC-2:多媒体命令集-2,第二代CD和DVD命令集。

MMC-3:多媒体命令集-3,第三代CD和DVD命令集。

MMC-4:多媒体命令集-4,第四代CD和DVD命令集。

MMC-5:多媒体命令集-5,第五代CD和DVD命令集。

MMC-6:多媒体命令集-6,第六代CD和DVD命令集。

SCC-2:SCSI控制器命令集,第二代RAID控制器命令集。

SES:SCSI-3管理命令集,用于管理的命令集,如风扇、电源等的管理。

SES_AM1:SCSI-3管理命令集修订版本1, SES的第一个修订版本。

SES-2:SCSI-3管理命令集-2,第二代管理命令集。

OSD:基于对象的存储设备,基于磁盘上的对象(如文件)导向的命令集。

OSD-2:基于对象的存储设备-2,第二代基于磁盘上的对象导向的命令集。

BCC:桥控制器命令集,描述了不同的SCSI协议,如SPI、FCP、SRP和iSCSI间的SCSI协议桥控制器设备的命令集。

ADC:自动控制设备与驱动器接口命令集。

ADC-2:自动控制设备与驱动器接口命令集-2,第二代自动控制设备与驱动器接口命令集。

ADC-3:自动控制设备与驱动器接口命令集-3,第三代自动控制设备与驱动器接口命令集。

SPC-2:SCSI主要命令集-2,适用于所有SCSI设备的第二代主要命令集。

SPC-3:适用于所有SCSI设备的第三代主要命令集。

SPC-4:适用于所有SCSI设备的第四代主要命令集。

SAM:第一代SCSI设备结构模型。

SAM-2:第二代SCSI设备结构模型。

SAM-3:第三代SCSI设备结构模型。

SAM-4:第四代SCSI设备结构模型。

SPI-2:第二代SCSI并行接口(Ultra 2)。

SPI-5:第五代SCSI并行接口(Ultra 640)。

SDV:SCSI域确认,是NCITS用于描述测试和确认SCSI物理层通信能力的技术报告。

PIP:描述测试和测量如线缆、底板等SCSI连接部件性能的标准。

SSM-2:模拟SCSI信号的条件与方法集。

EPI:如并行SCSI接口扩大器等增强的定义。

SBP-2:串行总线协议-2,第二代通过IEEE 1394进行SCSI传输的协议。

SBP-3:串行总线协议-3,第三代通过IEEE 1394进行SCSI传输的协议。

FCP:光纤通道协议,第一代通过光纤通道进行SCSI传输的协议。

FCP-2:光纤通道协议-2,第二代通过光纤通道进行SCSI传输的协议。

FCP-3:光纤通道协议-3,第三代通过光纤通道进行SCSI传输的协议。

FCP-4:光纤通道协议-4,第四代通过光纤通道进行SCSI传输的协议。

SSA-S3P:串行存储架构传输协议。

SSA-TL2:第二代串行存储架构传输层标准。

SSA-PH1:第一代串行存储架构物理层标准。

SSA-PH2:第二代串行存储架构物理层标准。

SRP:定义了一个功能类似于簇的将SCSI协议映射到InfiniBandTM架构的协议。

SAS:串行连接的协议和物理接口。

SAS-1.1:增强的串行连接的协议和物理接口-1.1。

SAS-2:增强的串行连接的协议和物理接口-2,速率高达6Gb/s。

ADT:自动控制器/驱动器接口-传输协议。

ADT-2:自动控制器/驱动器接口-传输协议-2。

UAS:USB连接SCSI协议。

SDI:SCSI驱动器接口。

SAT:第一代SCSI/ATA转换。

SAT-2:第二代SCSI/ATA转换。

无论是ATA体系还是SCSI体系,最终都将采用高速串行技术作为共同的目标,SATA和SAS(Serial Attached SCSI)总线由此诞生,而且两者基于共同的工作原理,在物理层完全兼容(同样的点对点串行总线、LVDS信号技术、7针L型盲插接口等)。只是在逻辑层面上,SATA仍属于传统的IDE体系,而SAS则使用SCSI命令集,其自身便可处理与数据读写相关的所有运算任务,同时也保持了对SATA设备的无缝兼容。也就是说,SATA设备可以在SAS系统中直接工作,改变了以前SCSI、ATA两大体系老死不相往来的局面。另外,SATA 1.0标准提供的接口速率是150MB/s,而SAS 1.0标准可提供300MB/s的高速率。虽然低于已有的Ultra 320 SCSI标准(接口速率为320MB/s),但SAS 1.0总线为点对点设计,每个设备都独自占有整条SAS通道,实际性能非常可观。不仅如此,SAS总线还支持多端口绑定机制(如采用双端口、全双工协议), SAS 1.0系统的带宽峰值将提高至1.2Gb/s;而如果采用4端口技术,SAS 1.0系统的带宽峰值则将达到2.4Gb/s。在2009年春季于美国奥兰多开幕的SNW(存储网络世界)大会上,作为SAS技术倡导者的LSI公司展示了其6Gb/s传输速率的SAS技术。