USB 转 SATA / NVMe 桥接芯片在 Linux 下的兼容性对比
很多 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 下的兼容性做一个偏实用的对比。
先给结论#
如果只是给 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”。更可靠的判断顺序是:
- 看
lsusb的 VID:PID。 - 看
lsusb -t绑定的是uas还是usb-storage。 - 看
lsblk --discard是否真的暴露 discard 能力。 - 用
smartctl测 SMART 透传。 - 长时间写入后看
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-MAX 是 0B,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_handler、uas_zap_pending、reset SuperSpeed USB device、I/O error,就不能只盯文件系统,要回到 USB 层和桥接层排查。
芯片对比表#
| 芯片 / 系列 | 常见用途 | Linux 下的整体表现 | UASP | TRIM / discard | SMART / 健康信息 | 主要风险 |
|---|---|---|---|---|---|---|
| ASMedia ASM1153E | USB 3.x 转 SATA 6Gb/s | 成熟,常见于 2.5 寸 SATA 盒 | 厂商规格支持 UASP | 取决于固件和内核识别 | 多数场景可用 smartctl -d sat 尝试 | 固件版本、厂商 VID/PID、自动休眠策略差异大 |
| JMicron JMS567 / JMS578 | USB 3.x 转 SATA 6Gb/s | 功能完整、出货量大,但固件差异明显 | JMS578 厂商规格支持 UASP | JMS578 规格未像 JMS583 那样突出 TRIM,实测要看固件 | 常见需要 -d sat;有些固件透传不好 | Linux 内核 unusual UAS 表里已有 152d:0567、152d:0578 相关 quirk |
| JMicron JMS583 | USB 3.1 Gen2 转 PCIe/NVMe | 性能上限高,早期 NVMe 盒常见 | 厂商规格支持 UASP | 厂商资料明确写支持 TRIM | 取决于固件,通常可读部分健康信息 | 旧固件、发热、某些 SSD/主机组合下掉盘或 reset |
| Realtek RTL9210 / RTL9210B | USB 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 --discard和fstrim为准。 - 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_FUA 和 US_FL_NO_REPORT_OPCODES,152d: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 时,建议关注三点:
- 是否明确写 RTL9210B,而不是只写“10Gbps NVMe enclosure”。
- 用户评论里是否有人贴 Linux
lsusb -t、fstrim、smartctl结果。 - 是否能更新固件,以及固件更新工具是否只支持 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.quirks 的 u 标志含义就是 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=uas和fstrim成功。 - 用机械硬盘时,更关注供电、休眠策略和长时间稳定性,不要只看峰值速度。
如果买 USB 转 NVMe:
- RTL9210B 是比较稳妥的日常选择。
- JMS583 性能规格没问题,但尽量避开不明固件的老库存盒子。
- 10Gbps 盒子要配 10Gbps 线材和支持 10Gbps 的主机口,否则只会跑 5Gbps 或 USB2。
- NVMe 盒子必须看散热。桥接芯片稳定,SSD 过热一样会掉速或掉盘。
如果用于 NAS、ZFS、数据库、长期挂载:
- USB 外置盘不是最理想的长期存储链路。
- 必须做连续写入、断电恢复、休眠唤醒、重启自动挂载测试。
- 不要只用
dd跑 30 秒峰值速度就下结论。 - 重要数据要有独立备份,不要把“识别成功”当作“可靠”。
参考资料#
- ASMedia ASM1153E 官方产品页:https://www.asmedia.com.tw/zh-Hant/product/7B6yQ54sX7YiFhGD/d1Eyq85QN8GhBwRC
- JMicron JMS578 product brief:https://www.jmicron.com/file/download/1055/JMS578.pdf
- JMicron JMS583 product brief:https://www.jmicron.com/file/download/1147/JMS583.pdf
- Linux kernel
unusual_uas.h:https://codebrowser.dev/linux/linux/drivers/usb/storage/unusual_uas.h.html - Linux kernel command-line parameters,
usb-storage.quirks:https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html - RTL9210 社区固件与芯片列表:https://github.com/bensuperpc/RTL9210
总结#
USB 转 SATA / NVMe 的 Linux 兼容性,不能只按“芯片型号”一刀切。更准确的说法是:芯片决定能力上限,固件决定功能暴露,Linux 内核 quirk 决定是否绕过已知问题,线材、供电和散热决定长时间是否稳定。
对 SATA 外置盒,ASM1153E 和 JMS578 都能用,但要验证 UASP、TRIM 和 SMART。对 NVMe 外置盒,RTL9210B 通常是更省心的选择,JMS583 也能跑出不错性能,但更要关注固件和散热。真正落地时,lsusb -t、lsblk --discard、smartctl、dmesg 四组信息,比商品标题里的“高速”“免驱”“支持 UASP”更可信。