SATA从什么意义上说“ SCSI”?SCSI和ATA之间共享多少?


27

至少对我而言,这并不是什么新鲜事,SATA实际上“在说” SCSI,因此为什么这些SATA设备在Linux中显示为SCSI设备。

之前已经问过一个相关的问题,例如,为什么我的SATA设备显示在/ proc / scsi / scsi下?

但是,在我之前看到的讨论中没有提及的正是SATA与SCSI的关系以及它们之间的区别。

我认为它们在物理层上有所不同是理所当然的,因为它们不共享兼容的电缆。

但是,如何在堆栈上更高呢?我知道Linux如何将现代内核上的SATA甚至IDE磁盘表示为SCSI到SCSI子系统。但是总线上使用的实际协议呢?

我也知道ATAPI是SCSI的封装,但是常规ATA呢?我注意到SCSI已采用SCSI的功能,例如NCQ,FUA,DPO等(如果我记错的话)。但是尚不清楚SCSI命令集实际上有多少被共享或相似。

具有ATA规范的现代SATA设备是否实现了SCSI命令集的子集,但被封装了(如ATAPI中一样)?一套一样吗?超集?还是仅将所选功能实现为不完全相同的变体?

在哪里可以找到明确的信息,尤其是它与Linux内核的关系?某种用于驱动程序开发的教程会很不错,但是即使是不完全跳过所有细节的概述也足够了。我知道我只能阅读实际的规范,但这又太详细了,很难找到您真正想要的东西,并且对我本人以及可能在时间意义上的大多数其他用户来说都不现实。

Answers:


42

SCSI和ATA是完全不同的标准。它们目前都是在INCITS标准组织的主持下开发的,但是是由不同的小组开发的。SCSI隶属于技术委员会T10,而ATA隶属于T131个

ATA在设计时就只考虑了硬盘驱动器。SCSI越来越广泛,是控制大容量存储设备,磁带驱动器,可移动光学介质驱动器(CD,DVD,蓝光...),扫描仪和许多其他设备类型的标准方法

在IDE引入PC领域的1980年代中期,SCSI被推向计算机世界的边缘并不是很明显。SCSI的根基已经建立并且更加强大。几十年来,Unix工作站Macintosh计算机随SCSI硬盘驱动器一起提供。高端PC至少通常具有用于外围设备的SCSI卡,并且通常还用于系统HDD。早期的个人计算机CD-ROM和磁带驱动器首先以SCSI形式出现。

但是,PC行业正是如此,它一直在推动使用价格较低的ATA标准而不是SCSI。最初的妥协称为ATAPI,它是ATA的扩展,它允许内部了解SCSI的设备通过ATA接口接收那些SCSI命令。在下面的更多内容。

几年后,SCSI获得了ATA命令传递功能,基本上是ATAPI的反函数,从而允许ATA命令通过SCSI总线。此功能的一种用途是通过SCSI 传输ATA SMART命令。smartmontools做到这一点,例如。

后来,INCITS T10委员会开发了一个称为SCSI / ATA转换(SAT)的标准,该标准将SCSI命令转换为ATA命令,反之亦然。2 Linux内核的libata提供了一个SAT Linux中执行,除其他事情

由于SCSI和ATA协议都控制硬盘驱动器,因此在逻辑上存在一些重叠。两者显然都需要一种方法来查找特定的硬盘驱动器扇区,检索该扇区的内容等。否则,我们将不需要这些转换和传递机制。

SATA实际上“交谈”了SCSI

这与“汽车是粉红色”的说法一样真实。有些车是粉红色的。

ATAPI,ATA传递和SAT只是故事的一部分。继续阅读。

我认为它们在物理层上有所不同是理所当然的,因为它们不共享兼容的电缆。

在旧的并行SCSI世界中确实如此,但是就像SATA取代了PATA一样,SAS也取代了并行SCSI。

SAS和SATA共享相同的驱动器连接器,并且在电气上兼容。SAS控制器可以与SAS和SATA设备通信,但是SAS驱动器不能与仅SATA控制器一起使用。区别在于协商,以及在电缆两端的设备弄清楚它们要与之交谈之后,可以使用的命令。

实际上,许多“ SATA RAID”控制器实际上是SAS RAID控制器。此类控制器通常在卡上具有一个或多个SFF-8087 SAS配对连接器,但是您可以使用SFF-8087至4×SATA分支电缆将SATA驱动器连接至它们。因此,带有两个SFF-8087配对连接器的SAS / SATA RAID卡最多可控制8个驱动器。3

另一常见情况是带有SAS 背板的热插拔驱动器机箱或计算机机箱。背板上通常带有一个SFF-8087连接器,从而允许使用简单的8087-8087电缆从背板到磁盘控制器。如果热插拔托盘中的驱动器是SATA,则无关紧要。当SAS控制器位于将驱动器插入SAS背板的驱动器底座中时,它们可以通过SAS电缆与它们交谈。这些驱动器仍然是SATA驱动器,但使用ATA协议,而不是SCSI。

我也知道ATAPI是SCSI的封装

没错,但ATAPI仅用于设备的其他比硬盘驱动器。该标准存在的主要原因是允许ATA接口传输SCSI命令,例如磁带驱动器的流数据命令,光盘驱动器的“弹出媒体”命令或CD音频光盘的“播放轨道”命令。 。

随着以前通过ATAPI进行SCSI通话的非HDD设备消失或移至其他接口,这一事实变得不那么重要了。低端磁带驱动器不再存在,因此磁带驱动器现在都是SAS。这些天,4扫描仪几乎只使用USB。光盘驱动器正在移动到要通过USB连接的计算机机箱外部,或者完全消失,仅剩下使用ATAPI的越来越少的内部光盘驱动器。

无论如何,通过ATAPI能够理解SCSI的SATA设备仅是有限的“ SCSI设备”。与SCSI相比,此类设备将无法从SAS的大多数优势中受益。尽管与SATA,ATAPI相比,这些功能使SAS具有明显的价值。

如果您想要另一个汽车类比,那么我可以在椭圆形赛道上行驶我的汽车并不能使它成为赛车。

我注意到SCSI已采用SCSI的功能,例如NCQ,FUA,DPO等(如果我记错的话)。但是尚不清楚SCSI命令集的“多少”实际上是共享的还是相似的。

通常,这相当于低端模仿。例如,NCQ与TCQ是不同的东西。如果是SAS设备,则只有带有TCQ的硬盘驱动器。将具有NCQ功能的SATA驱动器插入SAS控制器,它不会突然获得TCQ功能。

也就是说,现代的SATA设备可能比十年前的SCSI设备具有更强大的功能。它肯定会具有更高级别的I / O。

所有这些都是令人困惑和重叠的,因为那是PC硬件世界的本质。没有明确的界限,因为光驱制造商(只是选择一个子行业)确实不希望构建两个完全不同的驱动器,一个是SAS的最高表达,另一个是SATA。因此,他们妥协。他们在定义此类标准的委员会中进行游说,以创建一个单一的标准,使他们可以将SATA驱动器放在SAS总线上,而每个人都很高兴。

在哪里可以找到明确的信息,尤其是它与Linux内核的关系?

最终,您想阅读Linux资料。该libATA开发者指南也应该是有帮助的。

我不知道所有这些工作原理的简单总结。它设计得并不容易。它旨在适应三十年的硬件发展,相互竞争的标准以及不同的目标。此外,它的设计没有神奇的预见力。简而言之,这是一团糟。唯一真正需要知道混乱的工作原理的人是构建OS内核的人员,设计硬件的人员,以及在较小程度上编写OS内核的驱动程序的人员。对于这么小的干练的干部来说,标准和工作守则就足够了。

今天,Linux调用了大多数可重写的大容量存储设备/dev/sd?。“ SD”曾经代表“ SCSI磁盘”,其存在仅仅是为了与/dev/hd?一般意义上的“硬盘”区分开来,但在大多数情况下暗含PATA。这种区别是今天的另一个实际无关紧要的问题。现在,我们有了SSD,USB拇指驱动器,虚拟硬盘驱动器iSCSI设备等等/dev/sd?。我建议你开始的“SD”的思想作为短期的“存储设备”,而不是担心该设备是否讲ATA比SATA,ATA以太网SCSI通过USB,SCSI超过ATAPI,SCSI过SAS,SCSI在IP(iSCSI的),或者您有什么。

核心问题是命名方案通常比方案背后的原因更重要。您在中看到了这一点/dev/scd0。如今,连接到该/dev节点的设备更可能是DVD或蓝光驱动器,而不是光盘驱动器。

备选方案-在您/dev根据连接的确切设备类型命名每个节点的过程中会遇到自己的问题。如果以/dev节点使用的低级协议命名节点,真的会更好吗?/dev/atapi0/dev/sas0等?或者,也许您更喜欢/dev/atapibluray0这样?多媒体驱动器呢?/dev/atapicd0如果将光盘滑入蓝光驱动器,是否也需要公开同一驱动程序?那只是将一个令人困惑的方案替换为另一个。

Linux的/dev/sd?抽象不是完美的,但很有用。例如,您可以了解到/dev/sda很可能是启动驱动器的事实,而不必担心该名称背后的电缆,接口协议和介质。如果我告诉你,一个给定的Linux中有一个单一的系统驱动器,光盘驱动器,而且有时有插入其USB拇指驱动器,你可以放心地猜测,他们被称为/dev/sda/dev/sdb/dev/sdc分别。


脚注

  1. SCSI和ATA并没有开始共享母公司标准组织。他们都是以专有的硬盘控制器开始的。SCSI是从Shugart AssociatesSASI演变而来的,而ATA / IDE则来自Western Digital,Compaq和CDC之间的后期设计合作

    ANSI后来对两者进行了标准化,大约8年后,ATA-1遵循SCSI-1。

    INCITS是ANSI的一种姊妹组织。INCITS通过美国的ANSI和全球的ISO / IEC JTC 1发布最终标准。

  2. 当前标准是SAT-3,于2015年5月发布,而我在2018年7月中旬撰写此文件时,SAT-4和SAT-5 正在进行中。后一链接将带您进入正在进行的版本的草案。

  3. 我忽略了SATA端口倍增器SAS扩展器等。

  4. 除了与旧并行SCSI系统兼容的模型。


我仍然不清楚ATA和SCSI中的某些功能/命令集是否相同,以及如果存在的话,这个联合有多大。我同意阅读Linux源代码会给出一些答案,但它可能与阅读ATA规范本身相当。Linux来源可能也不会很清楚地说明ATA和SCSI之间共享了多少以及如何共享。不过,通过阅读Linux源码,可能会更有益于所使用的命名约定。
AttributedTensorField

@AttributedTensorField:查看最新编辑。
沃伦·杨

1
哇,好答案。就一件事; / dev / atapi0,/ dev / sas0等;BSD(至少是FreeBSD)不是吗?以及Solaris IIRC。在Linux上通常有/ dev / disk / by-path,这有点相似。
CVn 2014年

@MichaelKjörling:好的。评论的目的不是这些看待事物的其他方法是错误的,而是改变命名方案以更好地匹配底层发生的事情并不能使根本问题消失。我首先欣赏Linux的/dev/sd?抽象。
沃伦·杨

1
请注意,如今大多数发行版将光盘驱动器公开为/ dev / srN,其中N是数字。
珀金斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.