SATA 在什么意义上与 SCSI“对话”? SCSI 和 ATA 之间共享多少资源?

SATA 在什么意义上与 SCSI“对话”? SCSI 和 ATA 之间共享多少资源?

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

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

然而,在我之前看到的讨论中,没有提及 SATA 与 SCSI 的具体关系以及它们之间的区别。

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

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

我也知道ATAPI是对SCSI的封装,但是普通的ATA呢?我注意到SCSI的特性如NCQ、FUA、DPO等(如果我没记错的话)已经从SCSI中采用了。但尚不清楚 SCSI 命令集的“多少”实际上是共享或相似的。

现代 SATA 设备及其 ATA 规范是否实现了 SCSI 命令集的子集,但进行了封装(如 ATAPI)?一模一样的一套?超级组?或者也许只有选定的功能被实现为不完全相同的变体?

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

答案1

SCSI 和 ATA 是完全不同的标准。它们目前都是在信息技术研究所标准组织但由不同的团体组织。 SCSI隶属技术委员会T10,而 ATA 处于T131

ATA 的设计仅考虑了硬盘驱动器。 SCSI 更广泛、更古老,是控制大容量存储设备、磁带驱动器、可移动光学介质驱动器(CD、DVD、蓝光...)、扫描仪和计算机的标准方式。许多其他设备类型

在 20 世纪 80 年代中期,当 IDE 被引入 PC 世界时,SCSI 被推到计算世界的边缘并不明显。 SCSI 已经很成熟并且功能更强大。Unix工作站麦金塔数十年来,计算机均配备 SCSI 硬盘驱动器。高端 PC 通常至少有一个用于外围设备的 SCSI 卡,通常也用于系统 HDD。早期用于个人计算机的 CD-ROM 和磁带驱动器首先以 SCSI 形式出现。

然而,PC 行业的现状是,人们一直在推动使用更便宜的 ATA 标准来代替 SCSI。最初的妥协被称为ATAPI,ATA 的扩展,允许内部理解 SCSI 的设备通过 ATA 接口接收这些 SCSI 命令。下面详细介绍这一点。

几年后,SCSI 获得了ATA命令传递功能,基本上是 ATAPI 的反面,允许通过 SCSI 总线执行 ATA 命令。该设施的用途之一是通过隧道 ATA聪明的通过 SCSI 执行命令。smartmontools做这个, 例如。

后来,INCITS T10 委员会制定了一项名为 SCSI/ATA 转换 (SAT) 的标准,它将 SCSI 命令转换为 ATA 命令,反之亦然。2 Linux 内核libata图书馆为 Linux 提供 SAT 实现,其中其他事情

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 设备”。此类设备不会受益于大多数SAS相对于SATA的优势。尽管是 ATAPI,但这些功能使得 SAS 与 SATA 相比具有明显的价值。

如果你想要另一个汽车类比,我可以在椭圆形赛道上运行我的汽车这一事实并不意味着它是一辆赛车。

我注意到SCSI的特性如NCQ、FUA、DPO等(如果我没记错的话)已经从SCSI中采用了。但尚不清楚 SCSI 命令集的“多少”实际上是共享或相似的。

大多数情况下,这相当于低端模仿。NCQ 和 TCQ 不一样, 例如。如果硬盘是 SAS 设备,您将只能获得带有 TCQ 的硬盘。将支持 NCQ 的 SATA 驱动器插入 SAS 控制器,它不会突然获得 TCQ 功能。

也就是说,现代 SATA 设备的功能很可能比十年前的 SCSI 设备强大得多。它肯定能够支持更高级别的 I/O。

所有这些都是令人困惑和重叠的,因为这就是 PC 硬件世界的本质。没有明确的界限,因为光驱制造商(仅针对一个子行业)确实不想制造两种完全不同的驱动器,一种以 SAS 为最高表现,另一种以 SATA 为代表。所以,他们妥协了。他们在定义此类标准的委员会中进行游说,以创建一个单一标准,让他们可以将 SATA 驱动器放到 SAS 总线上,每个人都非常高兴。

我在哪里可以找到一些关于此的明确信息,特别是它与 Linux 内核的关系?

最终,你想要阅读 Linux 源代码。这libATA开发者指南应该也会有帮助。

我不知道这一切是如何运作的任何简单的总结。它的设计并不容易。它的设计旨在适应三十年的硬件发展、竞争标准和不同的目标。此外,它的设计缺乏神奇的远见。简而言之,一团糟。唯一真正需要知道混乱是如何运作的人是那些构建操作系统内核的人、那些设计硬件的人,以及在较小程度上为操作系统内核编写驱动程序的人。对于这样一支小而精的干部队伍,标准和工作规范就足够了。

如今,Linux 将大多数可重写大容量存储设备称为“大容量存储设备” /dev/sd?。 “SD”曾经代表“SCSI 磁盘”,其存在仅仅是为了与/dev/hd?一般含义的“硬盘”区分开来,但在大多数情况下暗指 PATA。这种区别在今天是另一个与实际无关的问题。现在我们有 SSD、USB 拇指驱动器、虚拟硬盘,iSCSI设备等都称为/dev/sd?.我建议您开始将“SD”视为“存储设备”的缩写,而不是担心该设备是否支持 ATA 而非 SATA,以太网上的 ATA,USB 上的 SCSI、SCSI over ATAPI、SCSI over SAS、SCSI over IP (iSCSI) 等等。

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

/dev另一种方法(根据连接到每个节点的确切设备类型来命名每个节点)也有其自身的问题。如果我们/dev根据节点使用的低级协议来命名节点,真的会更好吗? /dev/atapi0/dev/sas0, ETC?或者也许你更喜欢/dev/atapibluray0等等?多媒体驱动器怎么样?/dev/atapicd0如果您将光盘插入蓝光驱动器,是否还需要公开相同的驱动程序?这只是将一种令人困惑的方案替换为另一种方案。

Linux的/dev/sd?抽象并不完美,但是很有用。例如,您可以了解到该名称/dev/sda很可能是启动驱动器,而不必担心该名称背后的布线、接口协议和介质。如果我告诉你,一个给定的 Linux 机器有一个系统驱动器、一个光驱,有时还插入一个 USB 拇指驱动器,你可以自信地猜到它们分别被称为/dev/sda/dev/sdb/dev/sdc


脚注:

  1. SCSI 和 ATA 并不是一开始就共享同一个父标准组织。它们最初都是专有的硬盘控制器。 SCSI 是从舒加特协会'SASI,以及 ATA/IDE 的诞生后来的设计合作西部数据、康柏和 CDC 之间。

    美国国家标准协会后来对两者进行了标准化,大约 8 年后,ATA-1 继 SCSI-1 之后。

    INCITS 是ANSI 的姊妹组织。 INCITS 通过美国 ANSI 发布最终标准,并且ISO/IEC JTC 1全世界。

  2. 目前的标准是SAT-3,2015 年 5 月出版,含 SAT-4 和 SAT-5进行中我是在 2018 年 7 月中旬写这篇文章的。后一个链接将带您查看正在进行的版本的草稿。

  3. 我无视SATA 端口倍增器,SAS 扩展器, ETC。

  4. 为与旧的并行 SCSI 系统兼容而设计的型号除外。

相关内容