是否存在众所周知的原因导致支持 NCQ 的 SATA3.0 HDD 在从 USB 3.0 机箱安装时没有配置 NCQ 队列深度?
hdparm -iI /dev/sda 的输出显示支持 NCQ 的输出
猫/ sys /块/ sda /设备/队列深度
31猫/ sys /块/ sdb /设备/队列深度
1
我无法将queue_depth更改为1,因为它被拒绝了
答案1
一些高级磁盘驱动器命令,例如本机命令队列(可提高性能)、安全擦除(允许安全擦除驱动器上的所有数据)和 SMART(访问驱动器可靠性指示器),是 SCSI、SATA 或 PATA 等低级硬盘驱动器命令集的扩展。当硬盘驱动器位于支持 USB 大容量存储接口的磁盘盒中时,这些功能可能无法工作。一些 USB 大容量存储接口是通用的,提供基本的读写命令。虽然这对于使用基于硬盘驱动器的设备进行基本数据传输很有效,但没有简单的方法将高级的设备特定命令发送到 USB 大容量存储设备(尽管设备可以通过 USB 标准控制接口创建自己的通信协议)。USB 3.0 中引入的 USB 连接 SCSI (UAS) 协议解决了其中几个问题,包括命令队列、需要它们的硬件的命令管道和电源管理。
特定的 USB 2.0 芯片组具有实现 SCSI 直通的专有方法,可用于使用诸如 smartctl 之类的工具从驱动器读取 SMART 数据(使用 -d 选项后跟“芯片组”)。[6] 较新的 USB 存储芯片组支持 SCSI / ATA 转换(SAT)作为与 ATA(和 SATA)设备交互的通用协议。[7]
很明显,原始的 UMS 无法支持命令排队(即使您有 SAT);您需要 UAS。
dmesg
最简单的建议可能是插入驱动器后查看内核日志 ( )。看看它是否显示uas
,而不是原始usb-storage
驱动程序。[1]
查看uas
驱动程序,它需要满足许多条件才能工作,否则它将失败(可能默默地)并usb-storage
接管。显然,USB 控制器需要分散-聚集支持,而且一些 UAS 设备可能会被忽略为不受支持...
我认为您可以使用 检查 USB 设备所宣传的功能lsusb -v
。找到您的设备 - 搜索Mass Storage
- 并查找bInterfaceProtocol
值。 80 Bulk-Only
是原始 UMS 的值。 62
是 UAS 的新值。(这些是十六进制值)。因此,如果它可以执行 UAS,您应该会看到两者。
[1]如果你加载了某个特定的ums-
驱动程序,那也很有趣。在Linux 内核构建选项。
SAT(见上文)将只是通用的usb-storage
。我认为usb-storage
支持 SAT,因为它很简单。
答案2
真正的答案显然是 HDD 外壳不兼容 UASP。因此,我在非 UASP 外壳中安装了支持 NCQ 的 HDD,从而阻止了此设置中 USB3 的全部功能。