在 Unix 上从磁盘标签查找 USB 版本

在 Unix 上从磁盘标签查找 USB 版本

我试图仅从驱动器标签中检测 USB 版本 (USB 2.0/USB 3.0)。

我知道 USB 版本可以从“USB接口“输出中的参数”lsusb -v“ 或者 ”运行速度“输出中的参数”lsusb -t“(480M/5000M)。

我知道驱动器标签可以从“的输出中找到LSBLK”,但我无法找到一种方法来匹配这些输出,以将 USB 版本与驱动器标签相匹配。

我的备份选项是测试文件的传输速度以检测 USB 版本,但这不太可靠。

我希望有一种简单可靠的方法。非常感谢任何指导。

答案1

该标签是用户设置的,也可以是在 USB 驱动器上的文件系统格式化时或之后设置的。使用 lsusb -v ....

答案2

这是一个特定于系统的事情,但假设是 Linux(而不是 BSD 等):

如果您有设备名称(lsblk 为您提供的),则:

$ udevadm info -a /dev/sdf1
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1a.7/usb1/1-2/1-2:1.0/host16/target16:0:0/16:0:0:0/block/sdf/sdf1':
    KERNEL=="sdf1"
  looking at parent device '/devices/pci0000:00/0000:00:1a.7/usb1/1-2':
    KERNELS=="1-2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{speed}=="480"

我怀疑“速度”就是您正在寻找的。如果不是,还有busnumdevnum那里,它们bus:device与 给出的相匹配lsusb

这也为您提供了如何手动执行此操作的线索:您查看/sys.你可以找到readlink -f /sys/block/sdf告诉我从哪里开始/sys/devices/pci0000:00/0000:00:1a.7/usb1/1-2/1-2:1.0/host16/target16:0:0/16:0:0:0/block/sdf。然后,您可以删除尾随目录,直到恢复到 USB 设备。那么speedbusnumdevnum等只是您可以读取的文件。

相关内容