(我在这个问题中说的有些事情是错误的。别忘了阅读接受的答案。)
首先我想说的是,SATA 没有用于数据传输的软件协议。SATA CD 驱动器、SATA HDD 和 SATA SSD 使用 SCSI 作为软件协议。
许多人都不知道这一点,我甚至在 SE 上看到过一些被接受的答案,但他们并没有意识到这一点。德语维基百科他们将 AHCI 与 NVMe 进行比较。他们应该将 SCSI 与 NVMe 进行比较。AHCI 是 SATA 用于传输数据的软件协议,这是一个很大的错误。
旧式 IDE 驱动器使用 ATAPI,即基于 ATA 的 SCSI。因此,即使那些驱动器也使用 SCSI。
AHCI 仅供 SATA 控制器枚举磁盘。磁盘不使用它来传输数据。
我有一个普通的 SATA SSD 和 SATA DVD 驱动器,输出lshw
证明两者都使用 SCSI 作为软件协议。请参阅以“bus info:”开头的行。
*-cdrom
description: DVD-RAM writer
product: BD-RE BH16NS55
vendor: HL-DT-ST
physical id: 0
bus info: scsi@4:0.0.0
logical name: /dev/cdrom
logical name: /dev/cdrw
logical name: /dev/dvd
logical name: /dev/dvdrw
logical name: /dev/sr0
version: 1.01
capabilities: removable audio cd-r cd-rw dvd dvd-r dvd-ram
configuration: ansiversion=5 status=nodisc
*-disk
description: ATA Disk
product: SanDisk SDSSDH3
physical id: 1
bus info: scsi@5:0.0.0
logical name: /dev/sda
version: 20RL
serial: 2140LR450907
size: 931GiB (1TB)
capabilities: partitioned partitioned:luks
configuration: ansiversion=5 logicalsectorsize=512 sectorsize=512
现在有支持 PCIe、SATA 和 USB 卡的 M.2 连接器(见维基百科)。这 3 种类型是物理层使用的类型。它们定义电压等。它们没有提到软件协议。
- 例如,SATA M.2 磁盘是否可以与 AHCI 通信,或者 SCSI 是否足以传输容量?
- SATA 使用 AHCI 进行枚举,使用 SCSI 进行数据处理。PCIe NVMe 磁盘使用 NVMe 进行数据处理。它使用哪种协议进行枚举?它不可能是 NVMe,因为 PCIe 显卡不支持 NVMe。必须有另一种协议。
- 作为维基百科说M.2也支持USB。枚举用哪个软件协议,数据用哪个?
- 为什么没有 M.2 USB 磁盘?(在物理层使用 USB 并连接到主板的 M.2 插槽的磁盘。我说的不是 USB M.2 机箱。)
- 为什么没有 M.2 SATA NVMe 盘?(物理层是 SATA,软件协议是 NVMe。)
答案1
首先我想说的是,没有用于数据传输的SATA软件协议。
这部分正确,因为软件协议被命名为“ATA”而不是“SATA”(它只是一个特定的物理层)。
然而,ATA 确实存在一种与 SCSI 及其规范完全不同的协议,例如ATA 命令集可以在各个地方找到,例如 T13 技术委员会。
SATA CD 驱动器、SATA HDD 和 SATA SSD 使用 SCSI 作为软件协议。
他们没有。他们中的大多数人使用ATA作为协议,但使用 SCSI-over-ATA(又名 ATAPI)的 CD/DVD 驱动器除外。
(SATA 设备可以连接到 SAS HBA,但即使这样它们也不会切换到 SCSI 模式 - 正是 HBA 与 SAS/SCSI 一起实现 SATA 物理层和 ATA 命令集。)
旧式 IDE 驱动器使用 ATAPI,即基于 ATA 的 SCSI。因此,即使那些驱动器也使用 SCSI。
只有 CD/DVD 驱动器使用 ATAPI;其余的都是纯 ATA。
我有一个普通的 SATA SSD 和 SATA DVD 驱动器,lshw 的输出证明两者都使用 SCSI 作为软件协议。查看以“bus info:”开头的行。
不,它显示的是 Linux 使用利巴塔驱动程序将 ATA 设备呈现给内核,就像它们是 SCSI 设备一样。Libata 被记录为“根据 T10 SAT 规范为 ATA 设备提供 SCSI<->ATA 转换”。
有问题的规范是“SCSI 到 ATA 命令转换“,这是 T10 技术委员会的一份文件,其中描述了如何实现此类转换。USB 转 SATA 桥接器也使用相同类型的转换。(T10 还定义了发送直通 ATA 命令用于 ATA 特定功能;这就是通过 USB 至 SATA 桥访问 ATA SMART 等功能的方式。
这是一个“相对较新”的变化——从 ~2000 开始启动 Linux 内核会将同一磁盘显示为 IDE 设备“/dev/hda”。同样,几乎所有非 Linux 操作系统仍会将 IDE/ATA/SATA 设备显示为与 SCSI 不同的设备。
(在很短的时间内,Linux 也进行了类似的将 NVMe 转换为 SCSI 的操作,但很快就被删除,取而代之的是纯 NVMe 接口。似乎 NVMe 和 SCSI 之间的差异比 ATA 和 SCSI 之间的差异要大得多。)
例如,SATA M.2 磁盘是否可以与 AHCI 通信,或者 SCSI 是否足以传输容量?
SATA 磁盘通常根本不使用 AHCI;这只是操作系统和 SATA 主机控制器(“HBA”)之间使用的接口。它代表“高级主控制器接口“。
M.2 规格 SATA 磁盘可以包括自己的 AHCI 主机控制器(然后通过 M.2 连接器使用 PCIe),但这种情况相当罕见。大多数情况下,M.2 形式的 SATA 设备仅使用 M.2 提供的 SATA 通道连接到主板现有的 AHCI 主机控制器。
SATA 使用 AHCI 进行枚举并使用 SCSI 进行数据传输。
不,如果它是 SCSI 磁盘,那么将使用相同的 SCSI 进行枚举(使用 SCSI“询问“命令或其 ATA 等效命令)和数据传输。SATA 磁盘不是 SCSI 磁盘,但同样适用;ATA 命令集还包括枚举。
高级智能接口也参与其中,但在不同的地方:它用于枚举主机控制器本身,并通过 PCI“总线”与主机控制器交换 ATA 命令和数据。
(换句话说,ATA 命令通过 AHCI 接口从主机发送到控制器,然后通过 SATA 协议从控制器发送到磁盘。)
此外,德语维基百科上他们将 AHCI 与 NVMe 进行了比较。他们应该将 SCSI 与 NVMe 进行比较
AHCI 和 NVMe是在某种程度上是可以比较的,因为两者都在 PCI 总线上提供了特定的编程接口(就像 AHCI 可以与传统的 I/O 端口 IDE 编程接口进行比较一样)。
换句话说,NVMe 定义了命令层和主机接口,因此它与 SATA + AHCI 的组合相当,或者与 SCSI + 任何现有的 SCSI HBA 接口的组合相当。
PCIe NVMe 磁盘使用 NVMe 来存储数据。它使用哪种协议来枚举?它不可能是 NVMe,因为 PCIe 显卡不支持 NVMe。必须有另一种协议。
是的,有两层枚举。
PCI 本身确实有自己的总线枚举协议它将设备类别和产品 ID 告知主机操作系统(允许连接正确的驱动程序);此协议与设备类型无关。(据我所知,PCI Express 的高级机制与经典 PCI 大致相同,尽管低级细节有很大不同。)
后每个更高级别的协议驱动程序都会执行特定于该协议的枚举 - 例如,如果设备被检测为 NVMe 控制器,则会发出 NVMe 命令来查询其“磁盘特定”参数;如果它被检测为 AMD GPU,那么 AMD GPU 驱动程序就会执行自己的事情。
为什么没有 M.2 USB 磁盘?(在物理层使用 USB 并连接到主板的 M.2 插槽的磁盘。我说的不是 USB M.2 机箱。)
很可能不需要它们,因为 SATA(以及 NVMe)已经在同一插槽上可用,并且往往比 USB 大容量存储提供更好的性能。
大多数“USB”磁盘(少数例外)本身已经不是 USB/SCSI,而是内部使用 SATA-USB 桥接器的 SATA 磁盘。对于要连接到 M.2 插槽的此类磁盘,如果同一磁盘可以直接使用 M.2 插槽的现有 SATA 通道,则使用 SATA-USB 桥接器是没有意义的。
虽然原生 USB 大容量存储磁盘确实存在(甚至可能通过 UASP 提供不错的性能),但它们只有在 USB 是唯一选择时才有意义——对于低性能磁盘,原生 SATA 仍然更有意义;对于高性能磁盘,原生 NVMe 更有意义。
为什么没有 M.2 SATA NVMe 盘?(物理层是 SATA,软件协议是 NVMe。)
再次,因为还有更好的选择。
请记住,M.2 插槽不是“SATA 或 NVMe”;而是“SATA 或 PCIe”,允许任何连接到它们的 PCIe 设备类型......包括 AHCI 主机控制器。
因此,即使该产品针对的是仅限 PCIe 的 M.2 插槽(即没有任何 SATA 连接),包含标准 SATA AHCI 主机控制器仍然比更昂贵且可靠性更低的 SATA 到 NVMe 转换器(内部必须包含 SATA 主机控制器)更简单且更便宜。
(如果 M.2 插槽已经提供 SATA 通道,则这两种选择都比将同一磁盘直接连接到主板的 SATA AHCI 控制器更昂贵。)