我最近购买了 SanDisk 2TB Extreme PRO 便携式 SSD(型号 SDSSDE81-2t00)。将其插入我的 Linux 机器执行备份后,我注意到它运行缓慢。经过一些测试dd
显示速度相当低(低于 50 MBps)后,我运行lsusb -t
并看到它报告 480M,这是“高速”USB 2.0。
$ lsusb
Bus 001 Device 002: ID 8087:8001 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 005: ID 04f2:b449 Chicony Electronics Co., Ltd Integrated Camera
Bus 002 Device 003: ID 138a:0017 Validity Sensors, Inc. VFS 5011 fingerprint sensor
Bus 002 Device 011: ID 0781:55af SanDisk Corp. Extreme Pro 55AF <--- here
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/11p, 480M
|__ Port 1: Dev 11, If 0, Class=Mass Storage, Driver=uas, 480M <--- here
|__ Port 6: Dev 3, If 0, Class=Vendor Specific Class, Driver=, 12M
|__ Port 8: Dev 5, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 8: Dev 5, If 1, Class=Video, Driver=uvcvideo, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
经过更多故障排除后,我插入了一个已知工作的 USB 3.x 闪存驱动器,它正确显示为 5000M 速度。
$ lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
|__ Port 1: Dev 18, If 0, Class=Mass Storage, Driver=usb-storage, 5000M <--- here
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/11p, 480M
|__ Port 6: Dev 3, If 0, Class=Vendor Specific Class, Driver=, 12M
|__ Port 8: Dev 5, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 8: Dev 5, If 1, Class=Video, Driver=uvcvideo, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
然后,我重新插上新的SSD,它报告了5000M的速度!我在另一台 Linux 机器上确认了这个测试,并看到了相同的结果。内核是:
- 4.19.107(Unraid 服务器)
- 5.4.0-64-通用 (Ubuntu)
另外值得注意的是,驾驶员是Driver=uas
在低速时行驶的,而Driver=usb-storage
在工作后则改为行驶状态。也许内核模块尚未加载,并且闪存驱动器导致其加载?
长话短说:
- 新 SSD 显示 USB 2.0 速度(实际上,如 所报道
lsusb
) - 拔下 SSD,插入 USB 3.0 闪存驱动器,取出闪存驱动器,重新插入 SSD
- SSD 速度现在是正确的(在实践中和通过
lsusb
) - 可在两台机器上重现
为什么会发生这种情况?我可以做哪些进一步的故障排除?如果这是一个 Linux 内核错误,我想收集足够的信息来正确报告它。
答案1
我有一个部分答案,那就是我的内核模块理论是正确的。我比较了lsmod
拇指驱动器插入/拔出技巧前后的输出,结果非常清楚:
$ diff lsmod.txt lsmod.txt2
36c36
< usb_storage 77824 1 uas
---
> usb_storage 77824 4 uas
通过以下方式复制此状态后:
$ sudo modprobe usb_storage
我无需任何其他技巧即可使驱动器全速运行。
我仍然欢迎其他可能提供更多细节的答案。