我有一台 MSI Optix MAG245R 23.8" 显示器。它具有 USB 连接。
当我启动基于 Debian 的计算机 (BunsenLabs) 时,我收到警告:
May 4 19:41:51 localname kernel: [ 240.573980] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=4060, sector_sz=512)
May 4 19:41:51 localname kernel: [ 240.573986] sd 9:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
May 4 19:41:51 localname kernel: [ 240.573988] sd 9:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 00 00 00 08 00
May 4 19:41:51 localname kernel: [ 240.573990] print_req_error: I/O error, dev sdc, sector 0
May 4 19:41:51 localname kernel: [ 240.673838] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:51 localname kernel: [ 240.673846] sd 9:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
May 4 19:41:51 localname kernel: [ 240.673850] sd 9:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 00 00 00 04 00
May 4 19:41:51 localname kernel: [ 240.673852] print_req_error: I/O error, dev sdc, sector 0
May 4 19:41:51 localname kernel: [ 240.673859] Buffer I/O error on dev sdc, logical block 0, async page read
May 4 19:41:51 localname kernel: [ 240.860367] Buffer I/O error on dev sdc, logical block 1, async page read
May 4 19:41:52 localname kernel: [ 241.500663] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=4060, sector_sz=512)
May 4 19:41:52 localname kernel: [ 241.612517] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=4060, sector_sz=512)
May 4 19:41:52 localname kernel: [ 241.697840] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:52 localname kernel: [ 241.785872] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:52 localname kernel: [ 241.818899] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=16348, sector_sz=512)
May 4 19:41:52 localname kernel: [ 241.909838] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:52 localname kernel: [ 241.993839] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:55 localname kernel: [ 244.842973] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=16348, sector_sz=512)
May 4 19:41:55 localname kernel: [ 244.942219] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:55 localname kernel: [ 245.034140] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:56 localname kernel: [ 245.473992] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:56 localname kernel: [ 245.557874] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:57 localname kernel: [ 246.425872] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May 4 19:41:57 localname kernel: [ 246.425881] sd 9:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
May 4 19:41:57 localname kernel: [ 246.425884] sd 9:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 00 00 00 04 00
然后,我继续启动 GParted 来检查我的存储卷。我知道什么/dev/sda
和/dev/sdb
是什么;这些都是我所期望的。因此我很惊讶为什么a/dev/sdc
被检测到。
在那里,设备信息显示它是 MSI Optix 驱动程序。我尝试仅隔离显示器的 USB 连接(无键盘连接、加密狗等),并且这被检测为/dev/sdc
.
我可以做什么来消除这些错误?我的非专家想法是找到某种方法来告诉我的机器这个带有 UUID0123456789 的设备不是存储设备,所以不要费心将其作为存储设备进行测试。我怎么做?
或者有其他办法吗?
答案1
显示器似乎是双模式设备,默认模式是存储设备,其中包含适用于该设备的 Windows 和/或 Mac 驱动程序。如今,越来越多需要驱动程序的 USB 设备似乎都这样做。
如果你运行ls -l /sys/block/sdc
,你会看到它是一个指向类似路径的符号链接
../devices/<PCI device path for the USB controller>/usb#/<USB device path>/host#/target#:#:#/#:#:#:#/block/sdc
...其中 # 是数字,具体取决于您的确切硬件配置,在这里并不重要。
您需要移动到该host#
部分之前的目录:
cd /sys/devices/<PCI device path for the USB controller>/usb#/<USB device path>/
...然后查看该目录是否包含名为bNumConfigurations
和 的文件bConfigurationValue
。如果没有,请上移一级 ( cd ..
) 并再次检查。
一旦找到正确的目录,cat bNumConfigurations
就会告诉您 USB 设备有多少种可能的配置(模式)。提供自己的驱动程序的 USB 设备很可能至少有两种模式,因此该命令可能会输出2
.
cat bConfigurationValue
会告诉您当前配置的编号。存储设备配置很可能是第一个,1
。
要将 USB 设备切换到第二个配置,请运行:
echo 2 | sudo tee bConfigurationValue
(或者,如果您以 root 身份运行,则只需。请注意和echo 2 > bConfigurationValue
之间的空格,因为它对许多 shell 具有特殊含义。)2
>
2>
这应该会导致“USB 存储设备”消失并被相关 USB 设备的实际功能所取代。
为了自动化这个过程,大多数现代发行版都有一个usb-modeswitch
组件/实用程序。事实上,它尚未切换您的设备,这意味着您需要将有关设备的信息添加到其配置中。一旦您知道所需的配置号,您就可以创建一个文本文件,/etc/usb_modeswitch.d/XXXX:YYYY
其中 XXXX:YYYY 是需要切换的 USB 设备的供应商:产品 ID。文件的内容应该是标识您想要的配置的行。例如,如果您发现配置 2 提供了设备的实际功能,您可以编写如下行:
Configuration=2
就是这样。 (您实际上可能希望将文件的副本发送给 usb-modeswitch 开发人员,以便他们可以将信息添加到该实用程序的未来版本中。)
有些设备可能使用不同的切换方法,这更难弄清楚。如果 sysfs 文件bNumConfigurations
指示相关 USB 设备只有一种配置,则您需要构建一个 Windows VM,向其提供 USB 设备,安装设备提供的驱动程序,然后在VM 正在启动以捕获 Windows 驱动程序发送到设备的 USB 消息以触发配置切换。该usb-modeswitch
实用程序可以配置为自动发送此类消息,并且其数据文件将包括此类情况的许多现有示例。
一般来说,Windows 显示器“驱动程序”可能只包含*.icc
颜色校准配置文件,该配置文件也可以在 Linux 中使用。如果显示器针对高刷新率进行了优化(= 游戏显示器)或由于某些其他原因具有奇怪的颜色再现字符,您可以通过在 Windows 驱动程序包中查找颜色校准配置文件来改善显示器的颜色再现,并告诉您的桌面环境将其与显示器一起使用。
答案2
感谢@telcoM 提供的线索。我已经解决了这个问题。
太长了;博士
使用规则取消对有问题的 USB 设备的授权udev
。
怎么做
- 以跟随模式运行
dmesg
:
$ dmesg -w
- 断开并重新连接显示器的 USB 电缆。
- 在 的输出中
dmesg
,记下要禁用的设备的总线编号(以黄色覆盖)
dmesg
使用 CTRL+C退出。- 现在运行以下命令来获取设备属性。替换
xxxusbxxx
为您获得的巴士号码dmesg
$ udevadm info -a -p /sys/bus/usb/devices/xxxusbxxx
- 这是输出的第一部分,也是您关心的部分。记下以下属性和红框中覆盖的路径。
DRIVER=="usb-storage"
ATTR{bInterfaceClass}=="aa"
ATTR{bInterfaceNumber}=="bb"
ATTR{bInterfaceProtocol}=="cc"
ATTR{bInterfaceSubClass}=="dd"
- 现在创建一个新文件
/etc/udev/rules.d/10-disable-MSI-optix-storage.rules
。该数字10
表示该规则先于其他具有更高数字的规则执行。保留.rules
扩展名。文件名的其余部分并不重要。这些应该是文件的内容。相应地替换字符串。
- 重新启动计算机,即可看到读取错误消息不再出现。
这实际上做了什么
udev
当检测到与规则文件中指定的属性相匹配的 USB 设备时,其authorized
标志会立即设置为0
并且不能再使用。