Att*_*eld 31 hard-disk linux-kernel protocols
至少这对我来说并不新鲜,SATA 实际上“谈论”SCSI,因此为什么这些 SATA 设备在 Linux 中显示为 SCSI 设备。
之前有人问过一个相关的问题,例如为什么我的 SATA 设备会出现在 /proc/scsi/scsi 下?
然而,在我之前讨论过的地方没有提到的是 SATA 与 SCSI 的关系,以及它们的不同之处。
我认为它们在物理层上有所不同是理所当然的,因为它们不共享兼容的电缆。
但是,堆栈的更高位置呢?我知道 Linux 如何将现代内核上的 SATA 甚至 IDE 磁盘表示为 SCSI 到 SCSI 子系统。但是总线上使用的实际协议呢?
我也知道 ATAPI 是对 SCSI 的封装,但是常规的 ATA 呢?我注意到 SCSI 的一些特性,例如 NCQ、FUA、DPO 等(如果我没记错的话)已经从 SCSI 中采用了。但不清楚有多少 SCSI 命令集实际上是共享或相似的。
具有 ATA 规范的现代 SATA 设备是否实现了 SCSI 命令集的子集,但进行了封装(如在 ATAPI 中)?同一套?超集?或者可能只有选定的功能作为不完全相同的变体来实现?
我在哪里可以找到关于此的一些明确信息,尤其是它与 Linux 内核的关系?驱动程序开发的某种教程会很好,但即使只是一个没有完全跳过所有细节的概述也足够了。我知道我只能阅读实际的规范,但这又太详细了,很难找到你真正想要的东西,而且对我和大多数其他用户来说,在时间意义上是不现实的。
War*_*ung 48
SCSI 和 ATA 是完全不同的标准。它们目前都是在INCITS标准组织的支持下开发的,但由不同的团体开发。SCSI 属于技术委员会T10,而 ATA 属于T13。1
ATA 的设计仅考虑了硬盘驱动器。SCSI 既广泛又古老,是控制大容量存储设备、磁带驱动器、可移动光介质驱动器(CD、DVD、蓝光……)、扫描仪和许多其他设备类型的标准方式。
在 1980 年代中期——当 IDE 被引入 PC 世界时——SCSI 将被推到计算世界的边缘并不明显。SCSI 已经成熟且功能更强大。几十年来,Unix 工作站和Macintosh计算机都配备了 SCSI 硬盘驱动器。高端 PC 通常至少有一个用于外围设备的 SCSI 卡,通常也用于系统 HDD。用于个人计算机的早期 CD-ROM 和磁带驱动器首先以 SCSI 形式出现。
然而,PC 行业一直在推动使用更便宜的 ATA 标准而不是 SCSI。最初的妥协被称为ATAPI,它是 ATA 的扩展,它允许内部理解 SCSI 的设备通过 ATA 接口接收这些 SCSI 命令。更多关于这个下面。
几年后,SCSI 获得了ATA 命令传递功能,基本上与 ATAPI 相反,允许通过 SCSI 总线传输 ATA 命令。该工具的一个用途是通过 SCSI隧道传输 ATA SMART命令。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 的大部分优势。尽管与 SATA、ATAPI 相比,这些功能使 SAS 具有明显的价值。
如果你想要另一个汽车类比,我可以在椭圆形赛道上运行我的汽车这一事实并不能使它成为赛车。
我注意到 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
开发者指南也应该是有帮助的。
我不知道所有这些是如何工作的任何简单的总结。它的设计并不容易。它旨在适应三个十年的硬件演变、相互竞争的标准和不同的目标。此外,它的设计没有神奇的远见水平。简而言之,这是一团糟。唯一真正需要了解混乱如何运作的人是那些构建 OS 内核的人,那些设计硬件的人,以及在较小程度上为 OS 内核编写驱动程序的人。对于这样一小群高素质的干部来说,标准和工作代码就足够了。
今天,Linux 称为大多数可重写大容量存储设备/dev/sd?
。“SD”曾经代表“SCSI 磁盘”,存在只是为了区别于/dev/hd?
一般意义上的“硬盘”,但在大多数情况下暗示 PATA。这种区别在今天是另一个实际无关紧要的。现在我们有 SSD、USB 拇指驱动器、虚拟硬盘驱动器、iSCSI设备等等,所有这些都称为/dev/sd?
. 我建议您开始将“SD”视为“存储设备”的缩写,而不是担心设备是否说 ATA over SATA、ATA over Ethernet、SCSI over USB、SCSI over ATAPI、SCSI over SAS、SCSI over 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
。
脚注:
ANSI后来对两者进行了标准化,大约 8 年后,ATA-1 紧随 SCSI-1。
INCITS 是ANSI 的姊妹组织。INCITS 通过美国的 ANSI 和全球的ISO/IEC JTC 1发布最终标准。
当前的标准是SAT-3,于 2015 年 5 月发布,SAT-4 和 SAT-5正在进行中,因为我在 2018 年 7 月中旬写这篇文章。后一个链接将带你到正在进行的版本的草稿。
我忽略了SATA 端口倍增器、SAS 扩展器等。
除了为与旧的并行 SCSI 系统兼容而制造的模型。