插入和移除 USB 3.x 闪存驱动器“修复”USB 3.2 SSD 速度(之前以 2.0 速度运行)

插入和移除 USB 3.x 闪存驱动器“修复”USB 3.2 SSD 速度(之前以 2.0 速度运行)

我最近购买了 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在工作后则改为行驶状态。也许内核模块尚未加载,并且闪存驱动器导致其加载?

长话短说:

  1. 新 SSD 显示 USB 2.0 速度(实际上,如 所报道lsusb
  2. 拔下 SSD,插入 USB 3.0 闪存驱动器,取出闪存驱动器,重新插入 SSD
  3. SSD 速度现在是正确的(在实践中和通过lsusb
  4. 可在两台机器上重现

为什么会发生这种情况?我可以做哪些进一步的故障排除?如果这是一个 Linux 内核错误,我想收集足够的信息来正确报告它。

答案1

我有一个部分答案,那就是我的内核模块理论是正确的。我比较了lsmod拇指驱动器插入/拔出技巧前后的输出,结果非常清楚:

$ diff lsmod.txt lsmod.txt2
36c36
< usb_storage            77824  1 uas
---
> usb_storage            77824  4 uas

通过以下方式复制此状态后:

$ sudo modprobe usb_storage

我无需任何其他技巧即可使驱动器全速运行。

我仍然欢迎其他可能提供更多细节的答案。

相关内容