USB 3.0 外壳中的 SATA3.0 HDD 不支持 ncq

Sai*_*sty 3 performance hard-drive ssd usb

当从 USB 3.0 机箱安装时,支持 NCQ 的 SATA3.0 HDD 没有配置 NCQ 队列深度有什么众所周知的原因吗?

hdparm -iI /dev/sda 的输出显示支持 NCQ 的输出

cat /sys/block/sda/device/queue_depth
31

cat /sys/block/sdb/device/queue_depth
1

我无法将 queue_depth 更改为 1,因为它被拒绝

sou*_*edi 6

是的,这在 Wikipedia 上有记录

一些高级磁盘驱动器命令,例如本机命令队列(可能会提高性能)、安全擦除(允许安全擦除驱动器上的所有数据)和 SMART(访问驱动器可靠性指标)作为低级别的扩展存在硬盘命令集,例如 SCSI、SATA 或 PATA。当硬盘驱动器位于支持 USB 大容量存储接口的磁盘盒中时,这些功能可能不起作用。一些 USB 大容量存储接口是通用的,提供基本的读写命令。尽管这对于与基于硬盘驱动器的设备进行基本数据传输很有效,但没有简单的方法可以将高级的、特定于设备的命令发送到 USB 大容量存储设备(尽管设备可以通过 USB 标准控件创建自己的通信协议)界面)。USB 3 中引入的 USB 连接 SCSI (UAS) 协议。

特定的 USB 2.0 芯片组具有实现 SCSI 直通的专有方法,可用于使用 smartctl 等工具从驱动器读取 SMART 数据(使用 -d 选项后跟“芯片组”)。[6] 最近的 USB 存储芯片组支持 SCSI / ATA 转换 (SAT) 作为与 ATA(和 SATA)设备交互的通用协议。 [7]

很明显,原来的 UMS 不支持命令队列(即使你有 SAT);你需要无人机系统。

最简单的建议可能是dmesg在插入驱动器后查看内核日志 ( )。看看它是否说uas,而不是原始usb-storage驱动程序。 [1]

查看uas驱动程序,它有许多工作需要的条件,否则它将失败(也许是静默的)并usb-storage接管。显然 USB 控制器需要分散收集支持,也可以忽略一些 UAS 设备作为不受支持......

我认为您可以使用lsusb -v. 找到您的设备 - 搜索Mass Storage- 并查找bInterfaceProtocol值。 80 Bulk-Only是原始 UMS 的值。 62是 UAS 的新值。(这些是十六进制值)。所以如果它可以做 UAS,你应该看到两者。


[1]如果您ums-加载了一个特定的驱动程序,那也很有趣。在Linux 内核构建选项中有对特定 USB 存储驱动程序的简要说明。

SAT(见上文),只是属于通用usb-storage. 我假设usb-storage支持 SAT,因为它微不足道。