External HDD detected as uas in sys-usb but as usb-storage in AppVM

Why the device is recognized as uas in sys-usb before attaching to AppVM via qvm-usb, and in AppVm as usb-storage alter attached to an AppVM? Is this expected? Please help.
Such drive cannot be mounted, is seen via lsusb, but not via fdisk or lsblk.

What even is UAS?

UAS = USB Attached SCSI
UASP = USB Attached SCSI Protocol

When USB 3.0 was deployed, there was a recognition that the USB Mass Storage protocol (using USB Bulk Transport aka USB Bulk Only Transport) brought with it a growing amount of latency that did not bode well for connecting storage via higher speed connections. UASP was designed and deployed, which allowed for streaming multiple data requests at a time, potentially even out of order.

Remember modems and streaming download protocols such as Zmodem? Streaming is necessary to support command queues in SCSI/SATA. UASP utilizes these while the older USB Mass Storage protocol does not.

Both protocols are supported by contemporary operating systems and USB chipsets.

Notably, windows 7 generally does not support UASP (due primarily to licensing issues)…unless you happened to purchase a motherboard from the one or two vendors who licensed it (and branded the feature with some arbitrary in house name, requiring bespoke drivers). Windows 8 and later (Server 2012 and later) support UASP. Linux has for quite some time.

If you’ve ever worked with a USB drive, especially many small files or transactions, and compare the performance of the older USB Mass Storage protocol with the newer UAS Protocol, the difference is stark.



One final note:

If you do a lot of storage hardware work, you will find that the UASP bridge’s firmware allows you to perform some SCSI-wrapped ATA commands (OR even SCSI commands that are translated into ATA commands) when the USB bridge firmware is in UASP mode that are not supported when the USB bridge firmware is in USB Bulk Only Transport mode.

E.g. ATA Trim aka ATA Discard (aka SCSI Unmap) sometimes cannot be performed via USB BOT mode, but can be performed using UASP mode.

E.g. if you depend upon being able to sanitize a SED using ATA “ENHANCED SECURITY ERASE UNIT” (which some SEDs implement by destroying the current key instantaneously, verified via testing) or, the newer (and more explicit) ATA “SANITIZE CRYTO SCRAMBLE EXT” which gives a guarantee that it does this when the feature is listed as available … well … you generally cannot perform these using USB Bulk Only Transport, so either you use UASP or you connect the device directly to a SATA port.


1 Like

And lastly, an article from 2012 about the implementation details at the protocol and hardware support level:


Image appear to have disappeared due to bitrot, but the linked-to PDF has them.