在usb 3.0shell的SATA3.0硬盘上不支持ncq

是否有一个众所周知的原因,为什么一个支持NCQ的SATA3.0硬盘没有从USB3.0的情况下挂载configuration的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

是的,这是在维基百科logging 。

某些高级磁盘驱动器命令(如可能会提高性能的本机命令队列),安全擦除(允许安全擦除驱动器上的所有数据)和SMART(访问驱动器可靠性指示器)存在作为低级别扩展硬盘驱动器命令集,如SCSI,SATA或PATA。 当硬盘驱动器位于支持USB大容量存储接口的磁盘盒中时,这些function可能不起作用。 一些USB大容量存储接口是通用的,提供基本的读写命令。 虽然这对于基于硬盘驱动器的设备进行基本的数据传输非常有效,但是没有简单的方法将高级的,特定于设备的命令发送到USB大容量存储设备(尽pipe设备可以通过USB标准控制器创build自己的通信协议接口)。 USB 3.0中引入的USB连接SCSI(UAS)协议修复了其中几个问题,包括命令排队,需要硬件的命令pipe道和电源pipe理。

特定的USB 2.0芯片组具有实现SCSI传递的专有方法,可用于使用诸如smartctl之类的工具从硬盘读取SMART数据(使用-d选项,接着使用“芯片组”)。 更新的USB存储芯片组支持SCSI / ATA转换(SAT)作为与ATA(和SATA)设备交互的通用协议。

看起来很明显,原来的UMS不能支持命令排队(即使你有SAT)。 你需要UAS。

最简单的build议可能是在插入驱动器后查看内核日志( dmesg )。 看看它是否说,与原来的usb-storage驱动程序相反。

看着这个uas驱动程序,它有很多需要工作的条件,否则就会失败(也许是默默的), usb-storage将会接pipe。 显然,USB控制器需要scater-gather支持,还有一些UAS设备可能因为不受支持而被忽略。

我想你可以使用lsusb -v来检查USB设备所宣传的function。 find您的设备 – searchMass Storage – 并查找bInterfaceProtocol值。 80 Bulk-Only是原始UMS的值。 62是UAS的新价值。 (这些是hex值)。 所以如果可以做无人机,你应该看到两者。


[1]如果你有一个特定的驱动程序加载,这也很有趣。 有关Linux内核版本选项中特定USB存储驱动程序的简要说明。

SAT(见上面),只是在通用的usb-storage 。 我认为usb-storage支持SAT,因为它是微不足道的。

真正的答案显然是硬盘盒不是UASP兼容的。 因此,我在非UASP机箱中安装了支持NCQ的硬盘驱动器,可以在此设置中阻止USB3的全部力量。