挂载无法识别的 U 盘

25 arch-linux usb mount usb-drive

使用 Arch Linux / XFCE,我经常遇到未正确安装的 USB 驱动器问题。有时它们会自动出现在 Thunar 中,我可以一键安装它们。但是,在其他时候(大约是五十/五十),只是无法识别驱动器。我在使用 USB 外置硬盘、USB 记忆棒和相机时遇到过这个问题。如果无法识别外部驱动器,则是这种情况:

  • 驱动器根本不显示fdisk -l(它只显示我的硬盘驱动器)
  • 驱动器没有出现在 /dev/disk
  • 驱动DOES运行时出现lsusb

所以有某种认识,但我不明白为什么,也不知道发生这种情况时如何安装驱动器。我只是重新启动并希望下次可以正常工作,这显然不方便......

更新

当我监控时/var/log/everything.log(系统日志中没有信息),然后我在插入 USB 时看到这种情况:

Dec 14 15:36:32 localhost kernel: [ 6591.042911] usb 1-3: new high speed USB device number 9 using ehci_hcd
Dec 14 15:36:32 localhost mtp-probe: checking bus 1, device 9: "/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-3"
Dec 14 15:36:32 localhost mtp-probe: bus: 1, device: 9 was not an MTP device
Run Code Online (Sandbox Code Playgroud)

这是另一个请求的输出:

$udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[6809.192268] add      /devices/pci0000:00/0000:00:1d.7/usb1/1-3 (usb)
KERNEL[6809.193421] add      /devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0 (usb)
UDEV  [6809.299246] add      /devices/pci0000:00/0000:00:1d.7/usb1/1-3 (usb)
UDEV  [6809.306074] add      /devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0 (usb)
Run Code Online (Sandbox Code Playgroud)

kby*_*yrd 13

问题似乎是一个包罗万象的规则/lib/udev/rules.d/69-libmtp.rules

# Autoprobe vendor-specific, communication and PTP devices
ENV{ID_MTP_DEVICE}!="1", ENV{MTP_NO_PROBE}!="1", ENV{COLOR_MEASUREMENT_DEVICE}!="1", ENV{libsane_matched}!="yes", ATTR{bDeviceClass}=="00|02|06|ef|ff", PROGRAM="/usr/lib/udev/mtp-probe /sys$env{DEVPATH} $attr{busnum} $attr{devnum}", RESULT=="1", SYMLINK+="libmtp-%k", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
Run Code Online (Sandbox Code Playgroud)

注释掉该行,如下所示,解决了问题:

# Autoprobe vendor-specific, communication and PTP devices
ENV{ID_MTP_DEVICE}!="1", ENV{MTP_NO_PROBE}!="1", ENV{COLOR_MEASUREMENT_DEVICE}!="1", ENV{libsane_matched}!="yes", ATTR{bDeviceClass}=="00|02|06|ef|ff", PROGRAM="/usr/lib/udev/mtp-probe /sys$env{DEVPATH} $attr{busnum} $attr{devnum}", RESULT=="1", SYMLINK+="libmtp-%k", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"
Run Code Online (Sandbox Code Playgroud)

就我而言,我不得不重新启动,但可能有一个可以重新启动的服务。

  • 好吧,现在看来已经解决了!在日志中,我发现了这个:Dec 14 15:36:32 localhost mtp-probe: bus: 1, device: 9 不是 MTP 设备,在搜索之后我找到了这个线程:https://bbs.archlinux。 org/viewtopic.php?id=119676 - 我能够通过注释掉 MTP 规则中的全能行来解决它,它现在似乎正在工作。谢谢! (5认同)
  • @ user11780:如果实际答案是您在评论中给出的答案,那么您不应接受所提供的答案,而应使用您找到的信息自己编写一个新答案,然后接受该答案。否则,不经意的读者会被误导认为 kbyrd 的答案 - 这实际上更像是评论而不是答案 - 是正确的。 (4认同)
  • “注释掉该行,如下所示”,在我看来并没有被注释掉。 (2认同)

小智 8

我曾经ENV{MTP_NO_PROBE}="1"停止过 MTP 探针。这样我就没有修改 Arch 的/lib/udev/rules.d/69-libmtp.rules.

export MTP_NO_PROBE="1"
Run Code Online (Sandbox Code Playgroud)