Jak mogę sprawdzić, czy tryb USB 3.0 UASP (USB Attached SCSI Protocol) jest włączony w systemie Linux?

25

Mam laptopa z systemem Ubuntu 15.04 (3.19.0-21-generic) i zewnętrzną obudową USB 3.0 SATA HDD 2,5 ", która twierdzi, że obsługuje tryb UASP ( model S2510BPU33 firmy StarTech ). Nie mam problemów z montażem dysku lub czytanie / pisanie do niego.

Chciałbym móc potwierdzić następujące informacje:

  1. To, że samo urządzenie faktycznie obsługuje UASP
  2. Czy mój chipset obsługuje również UASP
  3. Określa, czy urządzenie korzysta z UASP po zamontowaniu

Gdzie mogę znaleźć te informacje?

ali_m
źródło

Odpowiedzi:

25

Jeśli znasz nazwę swojego urządzenia, znajdź numery magistrali USB i urządzenia:

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

Następnie spójrz na drzewo USB i znajdź swoje urządzenie (moje to 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
...

W moim przypadku widać uassterownik.

Jeśli UAS nie jest używany, zobaczysz usb-storage(jak w moim przypadku Dev 3).

austinmarton
źródło
1
Doskonale - to ładnie odnosi się do punktu 3. Jeśli nie widzę Driver=uas, fajnie byłoby dowiedzieć się, dlaczego - na przykład może to być tak, że albo chipset, albo urządzenie (a może jedno i drugie?) Nie obsługują UAS . Pozostawię pytanie otwarte do końca tygodnia, na wypadek, gdyby ktoś mógł odpowiedzieć na pozostałe dwa punkty, ale w przeciwnym razie zaakceptuję twoją odpowiedź.
ali_m
1
Chciałbym również znać odpowiedzi na 1 i 2,
edytuję
10

Oprócz odpowiedzi udzielonej przez austinmarton możesz biegać

lsusb -v -d VPID | grep -i interface

gdzie VPID to identyfikator dostawcy / produktu zgłoszony w lsusb. Na przykład:

$ 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 

Zauważ, że jedyną bInterfaceProtocolwymienioną wartością jest 80 Bulk-Only. To urządzenie nie byłoby urządzeniem skonfigurowanym przez UASP. Jeśli jednak zobaczysz dodatkowe bInterfaceProtocol 98, będzie to urządzenie skonfigurowane pod kątem UASP.

Wartości te są podawane dziesiętnie, ale specyfikacja odnosi się do nich przez ich wartości szesnastkowe ...

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

Informacje te można znaleźć w Specyfikacji pamięci masowej na usb.org , sekcja 3 Kody protokołów, Tabela 2 - Protokół transportu pamięci masowej.

Nie jestem jednak pewien, czy to odpowiada na twoje pierwsze czy drugie pytanie, ponieważ nie jest jasne, czy ta wartość będzie zgłaszana zarówno na komputerach / urządzeniach, które obsługują UASP, jak i na tych, które nie.

użytkownik8675309
źródło
Dokument specyfikacji pamięci masowej znajduje się teraz na usb.org/sites/default/files/… .
Nathan
3

Aby uzupełnić odpowiedź:

Jeśli twój kontroler nie obsługuje UAS, jądro Linuksa jest na tyle miłe, aby powiedzieć:

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

Ponadto lsusb wyświetla wiersz dla bInterfaceProtocol 98, ale jest pusty:

$ 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 Oliwaw,
The Human Robot Inside.

R. Daneel Olivaw
źródło
Dla wyjaśnienia, obecność linii bInterfaceProtocol 98 wskazuje, że to konkretne urządzenie obsługuje protokół wymagany dla UAS - ale linia jest zawsze „pusta” (tzn. Nie zawiera ciągu tekstowego opisu), niezależnie od tego, czy UAS jest obsługiwany. (W rzeczywistości jest po prostu pusty, ponieważ nie podano opisu dla klasy 8 / podklasy 6 / protokołu 62 w /var/lib/usbutils/usb.ids, zgodnie z opisem „Tylko zbiorczo” podanym dla protokołu 50.)
Nathan
-1

Musisz sprawdzić, czy na dysku używany jest sterownik UAS . Najpierw zidentyfikuj dysk:

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

Więc moje urządzenie to dysk SCSI. Tutaj znajdziesz informacje o aktualnie używanych sterownikach,

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

Tak więc w moim przypadku odpowiednim sterownikiem jest sd lub sr . Aby sprawdzić, który, próbuję

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

Stąd mój kierowca jest sd Ty możesz dokładnie sprawdzić, że katalog / sys / bus / SCSI / drivers / sr / 9: 0: 0: 1 czy nie istnieje. Dlatego mój dysk zewnętrzny nie jest UASP.

MariusMatutiae
źródło
3
Nie sądzę, aby ta odpowiedź była poprawna, sterowniki SD i SR nie mówią ci o UAS. Mam dysk korzystający z UAS i korzysta on ze sterownika SD ( lxr.free-electrons.com/source/drivers/scsi/sd.c ). Całkiem pewny, że sterownik SR jest przeznaczony dla sterowników CD / DVD ( lxr.free-electrons.com/source/drivers/scsi/sr.c )
austinmarton
Jest tak, ponieważ sd / sr działa na innej warstwie niż uas / usb-storage.
grawity