Workaround for using UAS USB3 storage on Linux

Published: (January 19, 2026 at 08:53 PM EST)
2 min read
Source: Dev.to

Source: Dev.to

Identify Storage

lsusb -tv
# view USB tree and the kernel driver in use (uas vs usb-storage)
# view VID:PID

Tip: lsusb -tv is the easiest way to confirm which driver the kernel actually bound to the device.

Quirk Flags (What u and m mean)

The usb-storage module accepts a quirks= parameter containing one or more entries in the form:

VID:PID:FLAGS

Common flags include:

  • u = IGNORE_UAS – Forces the kernel to avoid binding the uas driver for this device and use usb-storage (BOT) instead.
  • m = MAX_SECTORS_64 – Limits transfer size to 64 sectors (32 KB). This can improve stability for devices/bridges that misbehave with larger transfers (at the cost of performance).

A frequently used combination is mu: disable UAS and cap transfer size for stability.

Temporary Settings (runtime / non‑persistent)

Writing to sysfs updates the currently running kernel only. It will be lost on reboot.

Single device

echo "0bc2:231a:u" | sudo tee /sys/module/usb_storage/parameters/quirks
# disconnect and reconnect

Multiple devices (comma‑separated)

printf '0bc2:231a:u,6795:2756:mu\n' | sudo tee /sys/module/usb_storage/parameters/quirks
# disconnect and reconnect

Notes

  • Use commas, no spaces.
  • This overwrites the current value (it does not append).

Add a device without losing existing entries

Because sysfs does not support append mode, read the current value, add your entry, and write it back:

cur=$(cat /sys/module/usb_storage/parameters/quirks)
new='0bc2:231a:u'

if [ -z "$cur" ]; then
  printf '%s\n' "$new" | sudo tee /sys/module/usb_storage/parameters/quirks >/dev/null
else
  printf '%s,%s\n' "$cur" "$new" | sudo tee /sys/module/usb_storage/parameters/quirks >/dev/null
fi
# disconnect and reconnect

To make the quirk survive reboots, set it via modprobe.d.

Create e.g. /etc/modprobe.d/usb-storage-quirks.conf:

options usb-storage quirks=0bc2:231a:u,6795:2756:mu

Then reboot, or reload modules (reboot is typically simplest and most reliable for USB storage bindings).

initramfs note (dracut / update‑initramfs)

In many cases, adding the modprobe.d file and rebooting is sufficient. However, if your system loads storage drivers early from initramfs (e.g., booting from USB storage, or using LUKS/LVM on the affected device), the new modprobe.d settings may not be applied during early boot unless you rebuild the initramfs.

RHEL/CentOS/Rocky/Alma/Fedora (dracut)

sudo dracut -f
sudo reboot

Debian/Ubuntu (initramfs‑tools)

sudo update-initramfs -u
sudo reboot

Notes

  • grub2-mkconfig is typically not required for modprobe.d changes (it is for GRUB menu/kernel command‑line changes, not module option files).
  • Even after rebuilding initramfs, you may still need to disconnect/reconnect the device (or reboot) so the driver binding is re‑evaluated.

Confirm

Confirm the device is using usb-storage (not uas):

lsusb -tv

Look for a line indicating something like Driver=usb-storage for your device path.

References

Back to Blog

Related posts

Read more »

Rapg: TUI-based Secret Manager

We've all been there. You join a new project, and the first thing you hear is: > 'Check the pinned message in Slack for the .env file.' Or you have several .env...

Technology is an Enabler, not a Saviour

Why clarity of thinking matters more than the tools you use Technology is often treated as a magic switch—flip it on, and everything improves. New software, pl...