很多 2.5 寸硬盘盒、M.2 SATA 硬盘盒、M.2 NVMe 硬盘盒看起来只是“USB 外置硬盘”,但真正决定 Linux 体验的,经常是里面那颗 USB 桥接芯片和它的固件。

同一块 SSD,换一个桥接芯片,可能会出现完全不同的结果:一个盒子能跑 UASP、能 fstrim、能读 SMART;另一个盒子只跑 usb-storage,或者大文件写入时反复 USB reset。本文把常见的 ASMedia ASM1153E、JMicron JMS 系列、Realtek RTL 系列放在一起,对 Linux 下的兼容性做一个偏实用的对比。

USB 存储桥接芯片 Linux 兼容性矩阵

先给结论#

如果只是给 2.5 寸 SATA SSD/HDD 做 USB 外置盒,ASM1153E 和 JMS578 都很常见,也都支持 UASP。ASM1153E 的整体口碑偏稳,但 TRIM/SMART 仍然受固件影响;JMS578 功能完整、价格低、出货量大,但不同固件之间差异明显。

如果是 NVMe 转 USB,JMS583 和 RTL9210/RTL9210B 是常见选择。JMS583 是早期大量普及的 USB 3.1 Gen2 转 NVMe 桥,规格漂亮,但旧固件、散热和某些主机组合下更容易遇到掉盘或重置;RTL9210/RTL9210B 后来在很多硬盘盒里成为更常见的“稳妥选择”,但也不是免疫,仍然要看固件版本和具体硬盘。

Linux 下不要只看商品页写的“支持 UASP / 支持 TRIM”。更可靠的判断顺序是:

  1. lsusb 的 VID:PID。
  2. lsusb -t 绑定的是 uas 还是 usb-storage
  3. lsblk --discard 是否真的暴露 discard 能力。
  4. smartctl 测 SMART 透传。
  5. 长时间写入后看 dmesg 是否有 reset、I/O error、uas tag abort。

Linux 里真正影响体验的四件事#

1. UASP:性能和并发的关键#

UASP 是 USB Attached SCSI Protocol。它比传统 Bulk-Only Transport 更适合 SSD,因为能减少阻塞,提高并发 I/O 表现。Linux 下如果设备绑定到 uas 驱动,通常说明它走的是 UASP;如果绑定到 usb-storage,就是传统路径。

检查方式:

lsusb -t

典型输出里会看到类似:

Driver=uas, 5000M

或者:

Driver=usb-storage, 5000M

5000M / 10000M 只代表 USB 链路速率,不等于 UASP 已启用。真正要看 Driver=

2. TRIM / discard:不是“SSD + USB”就一定有#

SATA SSD 的 TRIM、NVMe SSD 的 Dataset Management,在 USB 桥接后通常会被转换成 SCSI UNMAP,再由 Linux block layer 暴露成 discard。最终能不能 fstrim,取决于桥接芯片、固件、驱动路径和内核识别。

检查方式:

lsblk --discard
sudo fstrim -v /mount/point

如果 DISC-MAX0B,Linux 没看到 discard 能力。即使芯片理论支持,也可能需要固件修正,或者需要 udev 规则手动打开 provisioning mode。这里要保守:不要因为商品页写了 TRIM 就默认生产环境一定可用。

3. SMART:SATA 和 NVMe 的路径不同#

USB 转 SATA 常见做法是走 SAT 透传,很多盒子需要显式指定:

sudo smartctl -d sat -a /dev/sdX

USB 转 NVMe 的桥接盒,Linux 上通常仍显示为 /dev/sdX 这类 SCSI 磁盘,而不是 /dev/nvme0n1。能不能读到 NVMe SMART/health log,要看桥接芯片和固件是否透传相关命令。很多 RTL9210/JMS583 盒子可以读到健康信息,但不要把它当成 NVMe 直连设备处理。

4. 稳定性:固件、供电、线材、主控都参与#

USB 存储问题很容易被误判成“Linux 不兼容”。实际排查时,至少要把这些变量分开:

  • USB 线材是否支持 SuperSpeed / 10Gbps。
  • 主机端 USB 控制器是否稳定,尤其是小主机、路由器、树莓派、NAS。
  • NVMe SSD 本身发热和瞬时功耗是否过高。
  • 硬盘盒散热是否足够。
  • 桥接芯片固件是否太旧。
  • Linux 内核是否已经带有该 VID:PID 的 quirk。

如果 dmesg 里出现 uas_eh_abort_handleruas_zap_pendingreset SuperSpeed USB deviceI/O error,就不能只盯文件系统,要回到 USB 层和桥接层排查。

芯片对比表#

芯片 / 系列常见用途Linux 下的整体表现UASPTRIM / discardSMART / 健康信息主要风险
ASMedia ASM1153EUSB 3.x 转 SATA 6Gb/s成熟,常见于 2.5 寸 SATA 盒厂商规格支持 UASP取决于固件和内核识别多数场景可用 smartctl -d sat 尝试固件版本、厂商 VID/PID、自动休眠策略差异大
JMicron JMS567 / JMS578USB 3.x 转 SATA 6Gb/s功能完整、出货量大,但固件差异明显JMS578 厂商规格支持 UASPJMS578 规格未像 JMS583 那样突出 TRIM,实测要看固件常见需要 -d sat;有些固件透传不好Linux 内核 unusual UAS 表里已有 152d:0567、152d:0578 相关 quirk
JMicron JMS583USB 3.1 Gen2 转 PCIe/NVMe性能上限高,早期 NVMe 盒常见厂商规格支持 UASP厂商资料明确写支持 TRIM取决于固件,通常可读部分健康信息旧固件、发热、某些 SSD/主机组合下掉盘或 reset
Realtek RTL9210 / RTL9210BUSB 3.x 转 NVMe,部分型号兼 SATA近几年常见且口碑较稳通常走 UAS多数新固件场景可用多数新固件场景较好固件版本很多,个别 Linux 主机/SSD 组合仍可能有链路不稳
Realtek RTL9220 系列USB 3.2 20Gbps/40Gbps 高速桥更新、更高带宽,样本还不如 RTL9210 多依实现而定依实现而定依实现而定新芯片更要看内核、固件和散热设计

ASMedia ASM1153E:SATA 盒里的成熟方案#

ASMedia 官方资料把 ASM1153E 定位为 USB3.2 Gen1 到 SATA 6Gbps 的桥接芯片,特性里列出了 USB Mass Storage BOT、UASP、SATA 3.0 和 1.5/3.0/6.0Gbps SATA 速率支持。也就是说,从规格上看,它是一个标准的 USB 转 SATA 6G 方案。

Linux 下 ASM1153E 的优势是成熟、常见、问题相对容易搜索。它适合 2.5 寸 SATA SSD/HDD 外置使用,尤其是普通备份盘、系统安装盘、临时迁移盘。

但它的坑也主要来自“不是所有 ASM1153E 盒子都一样”:

  • 有些厂商会改 VID/PID 和字符串,lsusb 未必直接显示 ASM1153E。
  • 固件可能带自动休眠,NAS 或长时间挂载场景下可能造成体验不一致。
  • TRIM 是否被 Linux 正确识别,要以 lsblk --discardfstrim 为准。
  • SMART 通常先试 smartctl -d sat -a /dev/sdX

如果只是买一个 SATA SSD 盒子跑 Linux,ASM1153E 可以列入优先考虑,但建议选有明确芯片、可退换、用户反馈里包含 Linux/UASP/TRIM 信息的产品。

JMicron JMS 系列:便宜常见,但要看具体型号#

JMicron 的 JMS 系列跨度很大,不能只写“JMS 兼容”或“JMS 不兼容”。常见情况可以分成两类。

JMS567 / JMS578:USB 转 SATA#

JMS578 是 USB 3.1 Gen1 到 SATA 6Gbps 桥接芯片,官方 product brief 写明它支持 USB Mass Storage BOT 和 UASP,也支持 SATA 6Gbps。实际市场上,JMS578 的硬盘盒和转接线非常多,价格也低。

Linux 内核的 drivers/usb/storage/unusual_uas.h 里可以看到 JMicron 的多个条目。比如 152d:0567 标成 JMS567 并带有 US_FL_BROKEN_FUAUS_FL_NO_REPORT_OPCODES152d:0578 也带有 US_FL_BROKEN_FUA。这不等于“不能用”,但说明内核确实为某些 JMicron 设备做过兼容性处理。

JMS578 的使用建议:

lsusb
lsusb -t
sudo smartctl -d sat -a /dev/sdX
lsblk --discard
sudo dmesg -T | grep -Ei 'uas|usb|reset|I/O error|abort'

如果只是普通备份盘,JMS578 可以用;如果是 7x24 小 NAS、ZFS、数据库、长时间高负载写入,更建议先做连续读写和掉电恢复测试。

JMS583:USB 转 NVMe#

JMS583 是 JMicron 很重要的一颗 NVMe 桥。官方资料写明它是 USB 3.1 Gen2 到 PCIe Gen3 x2 桥接芯片,USB 侧支持 BOT 和 UASP,并明确写了支持 SSD TRIM。它的定位就是把 PCIe/NVMe SSD 变成高速 USB 外置盘。

Linux 内核 unusual UAS 表里也有 152d:0583,标为 JMS583Gen 2,带 US_FL_NO_REPORT_OPCODES。这类 quirk 通常是为了绕过设备在某些 SCSI 命令上的不完整行为,让设备更稳定地工作。

JMS583 的典型问题不是“Linux 完全不识别”,而是旧固件和散热问题:NVMe 本身发热高,桥接芯片也发热,外壳散热差时,大文件持续写入可能出现降速、reset 或掉盘。买二手或库存老盒子时,尤其要注意固件版本。

Realtek RTL9210 / RTL9210B:NVMe 盒子的常见稳妥选择#

RTL9210/RTL9210B 常见于 M.2 NVMe USB 盒,也有一些产品支持 NVMe/SATA 双协议。社区维护的 RTL9210 固件仓库把 RTL9210A、RTL9210B、RTL9220 等列在同一类 USB 到 NVMe/SATA 桥接控制器里,并记录了大量固件版本。这个现象本身就说明:RTL 系列的体验高度依赖固件。

实际 Linux 使用里,RTL9210B 往往比早期 JMS583 更受欢迎,原因是很多新硬盘盒默认固件较新,UASP、TRIM、健康信息读取和日常稳定性表现都比较好。但它不是绝对无坑。树莓派、某些小主机、某些 SSD 或旧固件组合下,仍然有人遇到枚举异常、只跑 USB2、掉盘或需要禁用 UAS 的情况。

选 RTL9210/RTL9210B 时,建议关注三点:

  1. 是否明确写 RTL9210B,而不是只写“10Gbps NVMe enclosure”。
  2. 用户评论里是否有人贴 Linux lsusb -tfstrimsmartctl 结果。
  3. 是否能更新固件,以及固件更新工具是否只支持 Windows。

对于普通 Linux 桌面、笔记本、临时外置 NVMe 盘,RTL9210B 是目前比较容易推荐的方案之一。对于长期挂载和重要数据,仍然建议先压测。

怎么判断自己手里的盒子是否靠谱#

插上硬盘盒后,先看 VID/PID:

lsusb

再看驱动绑定:

lsusb -t

看内核日志:

sudo dmesg -T | grep -Ei 'usb|uas|scsi|reset|abort|I/O error|disconnect'

看 discard:

lsblk --discard
sudo fstrim -v /你的挂载点

看 SMART:

sudo smartctl -a /dev/sdX
sudo smartctl -d sat -a /dev/sdX

如果是外置 NVMe,也可以试:

sudo smartctl -d scsi -a /dev/sdX

不要直接照抄 /dev/sdX。先用 lsblk -o NAME,MODEL,SIZE,TRAN,MOUNTPOINTS 确认目标盘,避免操作错盘。

遇到 UAS 不稳定时怎么处理#

如果日志里反复出现 UAS 相关错误,临时验证可以禁用该设备的 UAS,让它回退到传统 usb-storage。Linux 内核文档里 usb-storage.quirksu 标志含义就是 IGNORE_UAS,也就是不要绑定 uas 驱动。

假设 lsusb 看到设备是:

152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp.

可以在内核启动参数里加:

usb-storage.quirks=152d:0578:u

多个设备用逗号分隔:

usb-storage.quirks=152d:0578:u,152d:0583:u,0bda:9210:u

这不是性能优化,而是稳定性兜底。禁用 UAS 后,随机 I/O 和并发性能可能下降,部分 discard/SMART 行为也可能变化。所以应该先确认问题确实来自 UAS,再使用这个办法。

购买建议#

如果买 USB 转 SATA:

  • 优先选明确标注 ASM1153E、JMS578、VL716 等主控的产品。
  • 用 SSD 时,确认 Linux 下有用户反馈 Driver=uasfstrim 成功。
  • 用机械硬盘时,更关注供电、休眠策略和长时间稳定性,不要只看峰值速度。

如果买 USB 转 NVMe:

  • RTL9210B 是比较稳妥的日常选择。
  • JMS583 性能规格没问题,但尽量避开不明固件的老库存盒子。
  • 10Gbps 盒子要配 10Gbps 线材和支持 10Gbps 的主机口,否则只会跑 5Gbps 或 USB2。
  • NVMe 盒子必须看散热。桥接芯片稳定,SSD 过热一样会掉速或掉盘。

如果用于 NAS、ZFS、数据库、长期挂载:

  • USB 外置盘不是最理想的长期存储链路。
  • 必须做连续写入、断电恢复、休眠唤醒、重启自动挂载测试。
  • 不要只用 dd 跑 30 秒峰值速度就下结论。
  • 重要数据要有独立备份,不要把“识别成功”当作“可靠”。

参考资料#

总结#

USB 转 SATA / NVMe 的 Linux 兼容性,不能只按“芯片型号”一刀切。更准确的说法是:芯片决定能力上限,固件决定功能暴露,Linux 内核 quirk 决定是否绕过已知问题,线材、供电和散热决定长时间是否稳定。

对 SATA 外置盒,ASM1153E 和 JMS578 都能用,但要验证 UASP、TRIM 和 SMART。对 NVMe 外置盒,RTL9210B 通常是更省心的选择,JMS583 也能跑出不错性能,但更要关注固件和散热。真正落地时,lsusb -tlsblk --discardsmartctldmesg 四组信息,比商品标题里的“高速”“免驱”“支持 UASP”更可信。