如何检查Linux中是否启用了USB3.0 UASP(USB附加SCSI协议)模式?


25

我有一台运行Ubuntu 15.04(通用3.19.0-21)的笔记本电脑和一个外部USB3.0 2.5英寸SATA HDD机箱,声称它支持UASP模式(StarTech的S2510BPU33型号)。安装驱动器或读/写它。

我希望能够确认以下几点:

  1. 设备本身实际上支持UASP
  2. 我的芯片组是否还支持UASP
  3. 安装设备时设备是否正在使用UASP

我可以在哪里找到此信息?

Answers:


25

如果您知道设备的名称,请找到US​​B总线和设备号:

$ lsusb
...
Bus 002 Device 005: ID xxxx:yyyy MyDeviceManufacturer
...

然后查看USB树并找到您的设备(我的设备是Bus 2,Dev 5):

$ lsusb -t
...
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
    |__ Port 2: Dev 5, If 0, Class=Mass Storage, Driver=uas, 5000M
    |__ Port 4: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
...

在我的情况下,您可以看到uas驱动程序。

如果没有使用UAS,您会看到usb-storage(例如我的Dev 3)。


1
Driver=uas太好了-很好地解决了第3点。如果我看不到,很高兴能找到原因-例如,可能是芯片组或设备(或可能两者都不支持) 。如果有人可以回答其他两点,我将一直待到本周末结束,否则我将接受您的回答。
ali_m

1
我也想知道1和2的答案,如果我知道答案的话,将对其进行编辑
austinmarton

10

除了austinmarton给出的答案,您还可以运行

lsusb -v -d VPID | grep -i interface

其中VPID是中报告的供应商/产品ID lsusb。例如:

$ lsusb -v -d 1234:5678 | grep -i interface
Couldn't open device, some information will be missing
  bDeviceClass            0 (Defined at Interface level)
    bNumInterfaces          1
    Interface Descriptor:
      bInterfaceNumber        0
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk-Only
      iInterface              6 

请注意,bInterfaceProtocol列出的唯一值是80 Bulk-Only。该设备不是 UASP配置的设备。但是,如果看到其他bInterfaceProtocol 98,这是UASP配置的设备。

这些值以十进制表示,但规范通过其十六进制值来引用它们。

50h (80d): USB Mass Storage Class Bulk-Only (BBB) Transport
62h (98d): Allocated by USB-IF for UAS. 

可以在usb.org上的“ 大容量存储规范 ”的第3节“协议代码,表2 —大容量存储传输协议”中找到此信息。

不过,我不确定这是否回答您的第一个或第二个问题,因为尚不清楚是否会在支持UASP的机器/设备和不支持UASP的机器/设备上报告此值。



3

完成答案:

如果您的控制器并没有支持UAS,Linux内核是一种足以告诉你这样:

$ dmesg | grep "UAS"
[58669.959610] usb 4-2: USB controller 0000:03:00.0 does not support streams, which are required by the UAS driver.
[58669.959613] usb 4-2: Please try an other USB controller if you wish to use UAS.

同样,lsusb显示了bInterfaceProtocol 98的一行,但是它是空的:

$ lsusb -v -d 0080:a001 | grep -i interface
bDeviceClass            0 (Defined at Interface level)
  bNumInterfaces          1
  Interface Descriptor:
    bInterfaceNumber        0
    bInterfaceClass         8 Mass Storage
    bInterfaceSubClass      6 SCSI
    bInterfaceProtocol     80 Bulk-Only
    iInterface              0 
  Interface Descriptor:
    bInterfaceNumber        0
    bInterfaceClass         8 Mass Storage
    bInterfaceSubClass      6 SCSI
    bInterfaceProtocol     98 
    iInterface              0

HTH,

R. Daneel olivaw,
里面的人类机器人。


为了明确起见,bInterfaceProtocol 98行的存在表明该特定设备支持UAS所需的协议-但无论是否支持UAS,该行始终为“空”(即没有文本描述字符串)。(实际上,它只是空的,因为/var/lib/usbutils/usb.ids中没有给出对类8 /子类6 /协议62的描述,以及对协议50的描述“仅批量”。)
内森

-1

您必须检查UAS驱动程序是否正在用于磁盘。首先,确定有问题的磁盘:

   # dmesg | grep sdb
   ...................
   sd 9:0:0:1: [sdb] Attached SCSI disk

所以我的设备是SCSI磁盘。您可以在此处找到有关当前使用的驱动程序的信息,

   # ls /sys/bus/scsi/drivers
     sd  sr

因此,就我而言,适当的驱动程序是sdsr。要检查哪一个,我尝试

   # cd /sys/bus/scsi/drivers/sd/9:0:0:1
   # 

因此,我的司机是SD。你可以仔细检查该目录/ SYS /巴士/ SCSI /司机/ SR / 9:0:0:1存在。因此,我的外部磁盘不是UASP。


3
我认为这个答案不正确,SD和SR驱动程序不会告诉您有关UAS的信息。我有一个使用UAS的磁盘,它使用了SD驱动程序(lxr.free-electrons.com/source/drivers/scsi/sd.c)。很肯定的SR驱动程序是为CD / DVD驱动器(lxr.free-electrons.com/source/drivers/scsi/sr.c
austinmarton

这是因为SD / SR与UAS / USB存储在不同的层上工作。
grawity
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.