Как я могу проверить, включен ли в Linux режим USB 3.0 UASP (USB Attached SCSI Protocol)?

25

У меня есть ноутбук с Ubuntu 15.04 (универсальный 3.19.0-21) и внешний 2,5-дюймовый жесткий диск SATA с интерфейсом USB3.0, который утверждает, что он поддерживает режим UASP ( модель S2510BPU33 от StarTech ). У меня нет проблем с подключением диска или чтение / запись к нему.

Я хотел бы иметь возможность подтвердить следующее:

  1. Что само устройство на самом деле поддерживает UASP
  2. Поддерживает ли мой чипсет также UASP
  3. Использует ли устройство UASP, когда я его монтирую

Где я могу найти эту информацию?

ali_m
источник

Ответы:

25

Если вы знаете название своего устройства, найдите номера USB-шины и устройства:

$ 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 в моем случае).

austinmarton
источник
1
Отлично - это хорошо касается пункта 3. Если я не вижу Driver=uas, было бы неплохо узнать, почему - например, может быть, что чипсет или устройство (или, возможно, оба?) Не поддерживают UAS , Я оставлю вопрос открытым до конца недели, если кто-то сможет ответить на два других пункта, но в противном случае я приму ваш ответ.
ali_m
1
Я также хотел бы знать ответы на 1 и 2, отредактирую ответ, если я это
выясню
10

В дополнение к ответу Остинмартон, вы можете запустить

lsusb -v -d VPID | grep -i interface

где VPID - идентификатор поставщика / продукта, указанный в 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, так и на тех, которые этого не делают.

user8675309
источник
Документ со спецификацией Mass Storage теперь находится по адресу usb.org/sites/default/files/… .
Натан
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

НТН,

R. Daneel olivaw,
Человек-робот внутри.

Р. Даниэль Оливоу
источник
Просто чтобы уточнить, наличие строки bInterfaceProtocol 98 указывает на то, что это конкретное устройство поддерживает протокол, необходимый для UAS, но строка всегда «пуста» (т. Е. Не имеет строки текстового описания), независимо от того, поддерживается UAS или нет. (На самом деле это просто пусто, потому что описание для класса 8 / подкласса 6 / протокола 62 не дается в /var/lib/usbutils/usb.ids, чтобы соответствовать описанию «Bulk-Only», данному для протокола 50.)
Натан
-1

Вы должны проверить, используется ли драйвер UAS для вашего диска. Сначала определите диск, о котором идет речь:

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

Таким образом, мое устройство представляет собой диск SCSI. Здесь вы найдете информацию о драйверах, используемых в настоящее время,

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

Так что, в моем случае, подходящий драйвер это либо sd, либо sr . Чтобы проверить, какой из них, я пытаюсь

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

Поэтому мой водитель сд .Вы можете дважды проверить , что каталог / SYS / автобус / SCSI / драйвера / стер / 9: 0: 0: 1 вовсе не существует. Следовательно, мой внешний диск не UASP.

MariusMatutiae
источник
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-storage.
Гравитация