This problem is usually caused by broken/incorrect USB-SATA bridge implementation and should be visible only with USB connected disk enclosures.
In case of external USB disk, the system needs to talk to the SATA drive inside the enclosure using UAS (USB Attached SCSI) protocol over SAT (SCSI / ATA Translation) to send raw ATA commands (sent by hdparm
or smartctl
) over SCSI over USB. The reason this protocol chain so complex is due historical reasons.
Somewhere in the chain USB → UAS → SCSI → SAT → SATA some piece of hardware has incorrect implementation. Usually all of this is done by a single microchip inside the enclosure called USB-SATA bridge and some well known variants are ASM1051, ASM1053 and ASM1153. Of these, the ASM1051 is known to be buggy and UAS should be avoided with any hardware containing this chip. ASM1053 and ASM1153 may or may not work depending on actual firmware inside the chip (the manufacturer is allowed to customize the firmware, the reference implementation does work correctly). For example, many enclosures made by Seagate use ASM1153 with custom firmware and have problems with some ATA commands even if the same chip does work correctly with reference firmware. (For example, some enclosures by Seagate work as long as OS never sends any 12 or 16 bit commands. Linux usb_storage
supports quirk t
for this purpose.) The end user usually cannot replace the firmware so if you have a bad chip/firmware your only option is to complain to the manufacturer. In case of Seagate, they "fix" the problem by stating that they officially support Windows and OS X only (and those operating systems do not support configuring SATA devices nor fetching S.M.A.R.T. data over USB so everything is "working"). Seagate is nowdays officially working with Linux community so perhaps their products will actually work in the future.
The only real way to figure out the bridge chip is to dismantle the enclosure and inspect the markings in the actual microchips.
Update: "Seagate Backup Plus Hub" enclosures have correctly working USB-SATA bridge and UAS works correctly (Note that this is different product from "Seagate Backup Plus"!) However, due to poor history by Seagate's enclosures, the Linux kernel applies the quirk t
by default which prevents this enclosure from using all SATA features. You can enable full SATA support including S.M.A.R.T. features with following command:
echo "0bc2:ab38:" > /sys/module/usb_storage/parameters/quirks
Note the trailing colon and nothing after that - it disables all built-in quirks for the selected vendor:product. Check your vendor and product ids with lsusb
if needed.
If your device is buggy enough, you may need to totally disable UAS support. This can be done with the u
quirk. For example, if I would like to disable UAS support on Seagate Backup Plus Hub, I'd run following as root:
echo "0bc2:ab38:u" > /sys/module/usb_storage/parameters/quirks
After that, the external disk will use only slower but usually working USB storage device features and things end up working... slowly. If you only need to transfer some big files the difference is not that bad. If you have lots of small files, the difference between having working UAS support may be more than 10x speed difference.