Como posso verificar se o modo USB3.0 UASP (USB Attached SCSI Protocol) está ativado no Linux?

25

Eu tenho um laptop executando o Ubuntu 15.04 (3.19.0-21-genérico) e um gabinete SATA HDD externo de 2,5 "e USB3.0 que alega que suporta o modo UASP ( o modelo S2510BPU33 da StarTech ). Não tenho problemas em montar a unidade ou lendo / escrevendo para ele.

Gostaria de poder confirmar o seguinte:

  1. Que o próprio dispositivo realmente suporta UASP
  2. Se meu chipset também suporta UASP
  3. Se o dispositivo está usando UASP quando eu o monto

Onde posso encontrar essas informações?

ali_m
fonte

Respostas:

25

Se você souber o nome do seu dispositivo, localize os números de barramento e dispositivo USB:

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

Então olhe para a árvore USB e encontre seu dispositivo (o meu era o 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
...

Você pode ver no meu caso o uasmotorista.

Se o UAS não estiver em uso, você verá usb-storage(como Dev 3 no meu caso).

austinmarton
fonte
11
Excelente - isso aborda bem o ponto 3. Se não estiver vendo Driver=uas, seria bom descobrir o porquê - por exemplo, pode ser que o chipset ou o dispositivo (ou possivelmente os dois?) Não sejam compatíveis com UAS . Deixarei a pergunta em aberto até o final da semana, caso alguém possa responder aos outros dois pontos, mas, caso contrário, aceitarei sua resposta.
ali_m
11
Eu gostaria de saber as respostas para 1 & 2 também, irá editar a resposta se eu descobrir isso
austinmarton
10

Além da resposta que austinmarton deu, você pode executar

lsusb -v -d VPID | grep -i interface

em que VPID é o ID do fornecedor / produto relatado lsusb. Por exemplo:

$ 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 

Observe que o único bInterfaceProtocolvalor listado é 80 Bulk-Only. Este dispositivo não seria um dispositivo configurado pelo UASP. No entanto, se você vir um adicional bInterfaceProtocol 98, esse seria um dispositivo configurado pelo UASP.

Esses valores são dados em decimal, mas a especificação se refere a eles por seus valores hexadecimais ...

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

Esta informação pode ser encontrada na Especificação de armazenamento em massa em usb.org , seção 3 Códigos de protocolo, Tabela 2 - Protocolo de transporte de armazenamento em massa.

No entanto, não tenho certeza se isso responde às suas primeira ou segunda perguntas, pois não está claro se esse valor seria relatado em máquinas / dispositivos compatíveis com UASP e naqueles que não.

user8675309
fonte
O documento Especificação de armazenamento em massa agora pode ser encontrado em usb.org/sites/default/files/… .
Nathan
3

Para completar a resposta:

Se o seu controlador não suportar UAS, o kernel do linux terá a gentileza de informar:

$ 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.

Além disso, lsusb mostra uma linha para o bInterfaceProtocol 98, mas está vazia:

$ 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,
O robô humano por dentro.

R. Daneel Olivaw
fonte
Apenas para esclarecer, a presença da linha bInterfaceProtocol 98 indica que esse dispositivo específico suporta o protocolo necessário para o UAS - mas a linha está sempre "vazia" (ou seja, não possui uma sequência de descrição de texto), independentemente de o UAS ser ou não suportado. (Na verdade, está simplesmente vazio porque nenhuma descrição para a classe 8 / subclasse 6 / protocolo 62 é fornecida em /var/lib/usbutils/usb.ids, para acompanhar a descrição "Somente em massa" fornecida para o protocolo 50.)
Nathan
-1

Você deve verificar se o driver UAS está sendo usado para o seu disco. Primeiro, identifique o disco em questão:

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

Então, meu dispositivo é um disco SCSI. Aqui você encontra as informações sobre os drivers atualmente em uso,

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

Portanto, no meu caso, o driver apropriado é sd ou sr . Para verificar qual, eu tento

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

Daí o meu motorista é sd .Você pode verificar novamente que o diretório / sys / bus / SCSI / drivers / sr / 9: 0: 0: 1 se não existir. Portanto, meu disco externo não é UASP.

MariusMatutiae
fonte
3
Não acho que essa resposta esteja correta, os drivers SD e SR não informam sobre o UAS. Eu tenho um disco usando o UAS e ele usa o driver SD ( lxr.free-electrons.com/source/drivers/scsi/sd.c ). Certifique-se de que o driver SR seja para drivers de CD / DVD ( lxr.free-electrons.com/source/drivers/scsi/sr.c ) #
27515 Austin
Isso ocorre porque o sd / sr trabalha em uma camada diferente da uas / usb-storage.
grawity