我有一台金士顿的 DataTraveler SE9(8G,序列号:0014785448B4BCA13728002A),我自己正在运行 Pop!_OS,我似乎无法弄清楚为什么它没有被检测到。在 Windows 系统中也没有。在 GNOME 的disks
实用程序中也没有检测到它。我试过了lsusb
,它确实出现在那里:
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0bda:2852 Realtek Semiconductor Corp. Bluetooth Radio
Bus 001 Device 002: ID 04f2:b735 Chicony Electronics Co., Ltd HP Wide Vision HD Camera
*Bus 001 Device 008: ID 0951:1689 Kingston Technology DataTraveler SE9*
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
(记住它是总线 001 和设备 008,以后会用到)
但它没有出现在fdisk
输出中:
Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: MTFDHBA512TDV-1AZ1AABHA
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: F244FCA0-47AE-4C49-B585-B9F2437DBCEC
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 3678206 3676159 1.8G EFI System
/dev/nvme0n1p2 3678208 379082751 375404544 179G Linux filesystem
/dev/nvme0n1p3 798515200 894152703 95637504 45.6G Microsoft basic data
/dev/nvme0n1p4 894152704 999010301 104857598 50G Linux filesystem
/dev/nvme0n1p5 999010304 1000202239 1191936 582M Windows recovery environmen
/dev/nvme0n1p6 1000202240 1000214526 12287 6M BIOS boot
Disk /dev/zram0: 7.09 GiB, 7617904640 bytes, 1859840 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
lsblk
的输出中也没有:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
zram0 252:0 0 7.1G 0 disk [SWAP]
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 1.8G 0 part /boot/efi
├─nvme0n1p2 259:2 0 179G 0 part /home
├─nvme0n1p3 259:3 0 45.6G 0 part
├─nvme0n1p4 259:4 0 50G 0 part /
├─nvme0n1p5 259:5 0 582M 0 part
└─nvme0n1p6 259:6 0 6M 0 part
输出sudo dmesg -w
确实表明至少它在某些低级别被识别为 USB:
[458632.136596] usb 1-2: new high-speed USB device number 8 using xhci_hcd
[458632.292668] usb 1-2: New USB device found, idVendor=0951, idProduct=1689, bcdDevice= 1.00
[458632.292685] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[458632.292691] usb 1-2: Product: DataTraveler SE9
[458632.292697] usb 1-2: Manufacturer: Kingston
[458632.292703] usb 1-2: SerialNumber: 0014785448B4BCA13728002A
最后,由于某种奇怪的原因,如果我搜索所有 /dev/ 条目,我会发现这个!( sudo ls /dev/*
):
<...>
/dev/char:
<...>
lrwxrwxrwx 1 root root 18 Dec 11 11:51 189:7 -> ../bus/usb/001/008
<...>
嗯?它被检测为字符设备了吗?
我不知道这是否可以工作,但我尝试了一下
sudo mount /dev/bus/usb/001/008 /mnt
,得到了输出:
mount: /mnt: /dev/bus/usb/001/008 is not a block device.
不确定这是否意味着它无法挂载,因为它不是堵塞设备,或者因为它不再是一个设备(死机)。
哦,忘了补充,它也没有分配块设备地址(没有像 /dev/sd* 这样的地址,事实上我的系统中没有带有该前缀的块设备)。
知道这里发生什么事吗?
编辑:根据@u1686_grawity的建议,以下是输出lsusb.py -ci
:
WARNING: Failure to read usb.ids
usb1 1d6b:0002 09 1IF [USB 2.00, 480 Mbps, 0mA] (xhci-hcd 0000:08:00.3) hub
1-2 0951:1689 00 1IF [USB 2.00, 480 Mbps, 200mA] (Kingston DataTraveler SE9 0014785448B4BCA13728002A)
1-2:1.0 (IF) 08:06:50 2EPs (Mass Storage:SCSI:Bulk-Only)
1-3 04f2:b735 ef 3IFs [USB 2.01, 480 Mbps, 500mA] (Chicony Electronics Co.,Ltd. HP Wide Vision HD Camera 0001)
1-3:1.0 (IF) 0e:01:00 1EP (Video:Video Control:None) uvcvideo video4linux/video1 video4linux/video0
1-3:1.1 (IF) 0e:02:00 0EPs (Video:Video Streaming:None) uvcvideo
1-3:1.2 (IF) fe:01:01 0EPs (Application Specific Interface:Device Firmware Update:None)
1-4 0bda:2852 e0 2IFs [USB 1.00, 12 Mbps, 500mA] (Realtek Bluetooth Radio 00e04c000001)
1-4:1.0 (IF) e0:01:01 3EPs (Wireless:Radio Frequency:Bluetooth) btusb bluetooth/hci0
1-4:1.1 (IF) e0:01:01 2EPs (Wireless:Radio Frequency:Bluetooth) btusb
usb2 1d6b:0003 09 1IF [USB 3.10, 10000 Mbps, 0mA] (xhci-hcd 0000:08:00.3) hub
usb3 1d6b:0002 09 1IF [USB 2.00, 480 Mbps, 0mA] (xhci-hcd 0000:08:00.4) hub
usb4 1d6b:0003 09 1IF [USB 3.10, 10000 Mbps, 0mA] (xhci-hcd 0000:08:00.4) hub
答案1
如果这种情况仅发生在 Linux 上,最常见的答案就是缺少必要的驱动模块(例如内核升级不完整)。
但考虑到它也发生在 Windows 上,可以安全地假设故障出在 USB 驱动器的固件中;也就是说,闪存驱动器处于死机状态,你可能对此无能为力。
嗯?它被检测为字符设备了吗?
它同时被“检测为”字符设备低等级lsusb 正在处理此问题。/dev/bus 中的设备节点允许您访问“原始”USB 设备,您可以在其中发送自定义 USB 请求块。这是并不互相排斥它被检测为上层的 USB 大容量存储设备,以及上几层的 SCSI 块设备;如果您连接任何可以正常工作的 USB 记忆棒 - 或者 USB 鼠标,您将拥有相同的 /dev/bus。
(“检测为”是因为这绝对不是 USB 设备的工作方式 - 它们不会说“我是字符设备”或“我是块设备”;两者之间可能有五层。USB 设备被询问以列出它支持的“接口”,然后每个接口都会分配一个适当的驱动程序,然后驱动程序根据需要创建一个设备节点 - 或连接到更高层的驱动程序。因此,您会得到一个块设备,因为这是“SCSI 磁盘”驱动程序使用的,而 SCSI 驱动程序的存在是因为“大容量存储”USB 接口。)
您可以使用它lsusb.py -ci
来获取每个 USB 设备声称公开的所有接口的列表。(该程序是 usbutils 的一部分,与 lsusb 相同,但您可能需要直接从 GitHub 下载它,因为某些发行版不喜欢它是 Python,但它提供了非常方便的 USB 设备和接口概述。)
USB 设备切换到报告 0 大小介质或根本没有介质的模式是很常见的(就像没有 CD 的 CD 驱动器一样)。这些设备仍会创建 SCSI 块设备,但“lsblk”工具会故意将其视为空设备而跳过。但完全无法显示为块设备的情况也并非闻所未闻。
分区错误的驱动器是否也无法工作
否;典型的分区是在块设备之上的一层进行的。整个 USB 棒呈现为单个线性存储设备,其中操作系统存储分区表以供其自身使用(使用几种格式之一)并在其上创建更多块设备。当您在 diskmgmt.msc 或 GNOME Disks 中编辑分区时,您实际上所做的只是更改磁盘扇区 0 或 1 中的数据。
(有一种不同的分区方式,会导致驱动器暴露几个单独的块设备(SCSI LUN),某些 USB 驱动器(包括金士顿的一些产品)有一个“制造商”工具可以实现这一点。但这是不是通过 GNOME 磁盘进行的分区类型。