Archive for the ‘USB 3.0’ Category

Warum USB 3.0 bzw. USB 3.1 nicht so schnell ist wie es sein könnte – oder die Geschichte um UASP USB Attached SCSI Protocol

28 April 2017

Ein Kunde fragte warum seine USB 3.0 Festplatte nicht schneller wäre. Eine einfache Frage aber um diese richtig beantworten zu können sind verschiedene Aspekte und Begriffe zu klären. Dabei ist wichtig zu wissen, dass bei der Anbindung eines externen Speichers per USB verschiedene Protokolle zum Einsatz kommen können. Es gibt einmal die Anbindung über das BOT-Protokoll (Bulk-Only Transport) und einmal über das UAS-Protokoll (USB Attached SCSI).

UASP ist deshalb besonders interessant weil es Command Queuing, Asynchrone Verarbeitung und erweiterte Aufgaben und Verwaltungsmöglichkeiten mitbringt. Der Protokolloverhead im Vergleich zur Datenübertragung mittels BOT sinkt signifikant. So sind bei einem USB 3.0 Anschluss mittels BOT-Protokoll 250MB/Sekunde möglich. Mittels UASP erreicht man mit der gleichen Hardware fast 400MB/Sekunde dabei sinkt gleichzeitig noch die Prozessorbelastung. Damit aber alles reibungslos funktioniert müssen Hardware und Treiber optimal aufeinander abgestimmt sein und sich im richtigen Modus befinden. Bei USB 3.0 oder 3.1 ist vor allem auf die Länge und Qualität der Kabel zu achten, sonst wird es nix mit der Highspeed-Übertragung der Daten. Da viele herkömmliche Festplatten für diese hohe Übertragungsraten eh zu langsam sind, macht eigentlich nur die Verwendung von SSDs sinn. Allerdings können herkömmlich Festplatten einen erheblichen Geschwindigkeitszugewinn verzeichnen, wenn mehrere Prozesse gleichzeitig auf die Festplatte zugreifen, dann hilft das Command Queuing und die asynchrone Verarbeitung.

Es gab schon früh Bestrebungen UASP unter Windows zu nutzen. Es war sogar bereits für Windows XP und Server 2003 vorgesehen: https://msdn.microsoft.com/en-us/library/windows/hardware/dn642103%28v=vs.85%29.aspx. Jedoch war jeder Hersteller gezwungen eigene Treiber zu entwickeln. Erst später mit Einführung von Windows 8 wurde ein generischer Treiber UASPStor.SYS von Microsoft direkt ausgeliefert: https://msdn.microsoft.com/en-us/library/windows/hardware/ff538820%28v=vs.85%29.aspx.

Die UAS-Spezifikation ist hier zu finden: Die aktuelle Fassung ist von 2016 und läuft unter INCITS 471-2010[R2015]: https://standards.incits.org/apps/group_public/project/details.php?project_id=30. Eine ältere, aber frei einsehbare Version gibt es hier: http://www.usb.org/developers/docs/devclass_docs/uasp_1_0.zip.

In der Microsoft USB FAQ finden sich auch Hinweise: https://msdn.microsoft.com/en-us/library/windows/hardware/dn423379%28v=vs.85%29.aspx#loadeddriver

Hardware
Es gibt nur wenig Geräte, die extra mit UASP-Unterstützung werben. Dies liegt sicher daran, dass bei den meisten externen Festplatten die Festplatten einfach zu langsam sind. Wer jedoch SSDs in externen Laufwerken einsetzt, der wird um UASP-Unterstützung nicht herum kommen.

Ein Hersteller der die Bedeutung von UASP erkannt hat ist Startech, dort finden sich alle möglichen USB-Kabel und externe Gehäuse wo explizit auf UASP hingewiesen wird. Der Hersteller preist die Vorteile in einem eigenen Blog-Beitrag an: https://blog.startech.com/post/all-you-need-to-know-about-uasp/

Wie kann man die Unterstützung von UASP prüfen?
So siehts im Gerätemanager aus: http://winaero.com/blog/check-if-your-usb-3-0-device-supports-usb-attached-scsi-uas-protocol/. Aber spannend wird es wie immer erst in der Commandline. Wenn man ein UASP-Gerät einsteckt, so erkennt Windows automatisch ob es den UASP-Treiber und den Dienst UASPSTOR starten muss. Klappt beides, so kann man mittels Powershell den aktuellen Status ermitteln:

Get-PnpDevice |where name -match mass

Status     Class           FriendlyName
——     —–           ————
OK         USB             USB-Massenspeichergerät
OK         SCSIAdapter     Per USB angeschlossenes SCSI (UAS)-Massenspeichergerät

Hier müsste das Gerät als “USB Attached SCSI (UAS) Mass Storage Device” bzw. “Per USB angeschlossenes SCSI (UAS)-Massenspeichergerät” auftauchen.

Zum Prüfen, ob der UASP-Dienst läuft und der Treiber geladen ist:

get-service uaspstor

Status   Name               DisplayName
——   —-               ———–
Stopped  uaspstor           USB Attached SCSI (UAS) Driver

Wenn also der Dienst nicht läuft oder keine UAS bei den Massenspeichern auftaucht, dann hat man keine UAS-fähige Hardware.

Linux
Wie kann man unter Linux feststellen, ob sein Gerät als UASP-Gerät erkannt wurde? Man ruft dmesg auf und findet dort einen Eintrag wie

[15655.952172] scsi host 14: uas

[15667.952172] sd 14:0:0:0: [sdk] Attached SCSI disk

Mögliche Probleme mit UAS
Nicht direkt ein Problem von UAS, sondern eher eine Definitionslücke bei Microsoft. Beim normalen USB-Treiber kann man einen Schreibschutz aktivieren, dieser wird beim UAS-Treiber noch nicht unterstützt.

http://forensenellanebbia.blogspot.de/2015/08/usb-write-blocking-with-registry-beware.html, Lösung: http://forensenellanebbia.blogspot.de/2015/08/usb-write-blocking-with-registry-beware_13.html aber Wegfall der Geschwindigkeit!

Der schnelle UAS-Übertragungsmodus steht nur an XHCI-USB-Controllern zur Verfügung, siehe https://msdn.microsoft.com/en-us/library/windows/hardware/dn423379%28v=vs.85%29.aspx#loadeddriver.

Hier noch weitere Infos zum Thema UASP, USB 3.0 und USB 3.1: https://www.elektronik-kompendium.de/sites/com/1310061.htm.

Was noch aufgefallen ist, etwas für die Forensiker
Eine über UASP angeschlossene Festplatte taucht, wenn diese entfernt wurde, später immer noch bei den Massenspeichern auf, allerdings mit dem Status Unknown. Schließt man eine andere Festplatte mit demselben Controller am gleichen Port an, so erhält diese einen neuen “Mass Storage”-Treibereintrag. So dass darüber später jederzeit nachvollziehbar wird, wann welche Festplatte per UAS angeschlossen war.

Wie kann man diese Zuordnung im Nachhinein feststellen?

Dazu benötigt man die InstanceID und muss die Seriennummer der Festplatte kennen.

$uas=Get-PnpDevice -class scsiadapter |where name -match uas
($uas).DeviceID
USB\VID_174C&PID_55AA\MSFT30____________W400BBX4

Die Seriennummer ist nämlich in der InstanceID enthalten und zwar sind es immer die letzten 20 Zeichen nach MSFT30. Allerdings in umgekehrter Reihenfolge, d. h. obige ID gehört zu der Festplatte mit der Seriennummer 4XBB004W.

Damit ist die Zuordnung zur Platte eindeutig gegeben. Nun noch die Frage, wann wurde zuerst am System benutzt?

$uas|Get-PnpDeviceProperty -KeyName DEVPKEY_Device_FirstInstallDAte

InstanceId KeyName                                   Type       Data
———- ——-                                   —-       —-
USB\VID… DEVPKEY_Device_FirstInstallDAte           FileTime   28.04.2017 13:00:03

Ebenso kann man mit DEVPKEY_Device_LastRemovalDate feststellen, wann sie das letzte Mal am System angemeldet war.

Advertisements