ACASIS硬盘盒在较新内核上无法创建设备节点 (sg0/sda)

我有一个ACASIS SATA硬盘盒,还有装有Ubuntu的固态硬盘和装有Arch Linux的机械硬盘。近期从硬盘盒BOOT并更新系统后,两个系统均无法启动,开机时卡在等待根分区这一步。

进入主机Gentoo Linux连接硬盘盒同样无法正确识别,从内核日志观察到 usb-storage 驱动绑定后,只会反复 reset high-speed USB device,无法创建 sg0sda 设备节点。通过手动 echo "- - -" > /sys/class/scsi_host/host0/scan 偶尔能成功,但成功率极低。

通过大量测试,发现以下发行版/内核版本能稳定工作:

  • Ubuntu 6.8.0-111
  • Ubuntu 6.8.0-117
  • Ubuntu 5.15.185-tegra
  • Arch 6.17.9-arch1
  • Arch 6.17.9-zen1
  • Gentoo 6.8.2-zen2 (copy from Arch)
  • Gentoo 6.19.9-src

以下发行版/内核版本极大概率创建 sg0 失败:

  • Ubuntu 6.8.0-136
  • Arch 6.18.39-1-lts
  • Arch 6.18.40-2-lts
  • Arch 7.1.4-zen1
  • Arch 7.1.5-zen1
  • Gentoo 6.19.14-src
  • Gentoo 7.0.3-src
  • Gentoo 7.1.0-src
  • Gentoo 7.1.5-src

正常日志如下:

[  289.767043] usb 3-3: new high-speed USB device number 5 using xhci_hcd
[  289.900341] usb 3-3: New USB device found, idVendor=2109, idProduct=0715, bcdDevice= 1.67
[  289.900355] usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  289.900359] usb 3-3: Product: VLI Product String
[  289.900362] usb 3-3: Manufacturer: VLI Manufacture String
[  289.900365] usb 3-3: SerialNumber: ABCDEFA74651
[  289.905491] scsi host0: uas
[  290.630695] scsi 0:0:0:0: Direct-Access     ACASIS   EC-7250          2210 PQ: 0 ANSI: 6
[  290.635894] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  290.641425] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[  290.641434] sd 0:0:0:0: [sda] 4096-byte physical blocks
[  290.641720] sd 0:0:0:0: [sda] Write Protect is off
[  290.641724] sd 0:0:0:0: [sda] Mode Sense: 2f 00 00 00
[  290.642378] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[  290.642557] sd 0:0:0:0: [sda] Preferred minimum I/O size 4096 bytes
[  290.642562] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of preferred minimum block size (4096 bytes)
[  290.709580]  sda: sda1 sda4 sda5 sda6 sda7 sda8 sda9 sda10 sda11
[  290.711485] sd 0:0:0:0: [sda] Attached SCSI disk

故障日志如下:

               ......
[  261.359686] usb 3-2: SerialNumber: ABCDEFA74651
[  261.363200] usb 3-2: UAS is ignored for this device, using usb-storage instead
[  261.363207] usb-storage 3-2:1.0: USB Mass Storage device detected
[  261.363610] usb-storage 3-2:1.0: Quirks match for vid 2109 pid 0715: 800000
[  261.363793] scsi host0: usb-storage 3-2:1.0
[  283.260355] usb 3-2: reset high-speed USB device number 5 using xhci_hcd
[  304.254842] usb 3-2: reset high-speed USB device number 5 using xhci_hcd

初步怀疑是4月左右内核引入的BUG。有人碰到过类似情况或了解uas/usb-storage相关的细节吗?

根据你的硬盘盒 USB ID,我大致定位到这个 commit:

它的作用就是禁用 UAS(理由是有 Bug)。我大致对照了一下,你说有问题的内核基本也都是包含或 backport 了该补丁的。

你可以试试在内核参数中添加(注意最后有个冒号)然后重新启动:

usb-storage.quirks=2109:0715:

可以覆盖掉这个 quirks 行为。