Enabling TRIM Support on USB/SATA Bridges
The caveat is to set provisioning mode to unmap.
/etc/udev/rules.d/99-discard.rules
ACTION=="add|change", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="55aa", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"
This works at least on StarTech.com USB312SAT3CB (ASM1153E) and USB3S2SAT3CB (ASM1351) adapters, Inateck FE2006 (JMS567).
| vid | pid | controller |
|---|---|---|
| 174c | 55aa | ASMedia |
| 152d | 3562 | JMicron |
JMS561U works in UAS mode, however does not seem to support discard (changing provisioning mode to "unmap" results in i/o error when trimming the drive).
IF udev rules don't apply without restart, force trigger them:
# udevadm control --reload-rules && udevadm trigger
And another hack:
ACTION=="add", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="55aa", SUBSYSTEM=="scsi_disk", RUN+="/usr/bin/sh -c 'sleep 1 && udevadm trigger --subsystem-match=scsi_disk'"
ACTION=="change", ATTRS{idVendor}=="174c", ATTRS{idProduct}=="55aa", SUBSYSTEM=="scsi_disk", ATTR{provisioning_mode}="unmap"
To check trim/discard on block devices, lsblk may be used with -D/--discard switch.