识别设备插入的 USB 端口

unf*_*nfa 2 usb

我正在编写自定义 Bash 脚本,用于大量复制 USB 闪存和大量测试(使用f3)。

我想知道是否可以识别插入的 USB 端口是什么 USB 端口。

我有带编号端口的 USB 集线器。如果有一些静态地址我可以识别并知道是否有东西插入其中,那是什么(本质上:哪个 /dev/sd* 文件对应于该 USB 端口)我可以让用户更容易了解正在发生的事情并允许他们在此过程中尽早移除坏驱动器,而无需等到整个批次处理完毕,然后尝试从好的驱动器中找出坏驱动器(这就是我现在的做法)。

我尝试四处寻找,但没有发现任何与我想要实现的目标相吻合的内容,因此我决定在这种情况下直接寻求帮助。

现在我通过 /dev/sd* 节点名称识别驱动器,而用户不知道那是什么。如果我可以将这些映射到集线器中的 USB 端口,我可以根据 USB 端口显示信息,用户可以知道端口 5 插入了一个坏驱动器,他们可以将其删除,而不会干扰正在发生的其余过程.

然后我什至可以停止批量执行此操作并使所有端口同时循环工作,用户可以一直插入和拔出驱动器,通过 HUB 端口号跟踪什么,它可以极大地促进工作流程.

所以基本问题是:如何识别插入这些端口的 USB 端口和 USB 闪存?

dir*_*rkt 8

您可以使用udevadm来获取某些设备的设备路径。这是通过检查 中的符号链接来完成的/sys/,因此您也可以手动执行此操作(但使用起来更容易udevadm)。

例如,插入我系统上的外部 USB 集线器的 USB 记忆棒会产生

$ udevadm info -q path -n /dev/sdh
/devices/pci0000:00/0000:00:1d.0/usb3/3-1/3-1.1/3-1.1.3/3-1.1.3.2/3-1.1.3.2:1.0/host7/target7:0:0/7:0:0:0/block/sdh
Run Code Online (Sandbox Code Playgroud)

通过与 USB 树的比较可以看出,

$ lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
        |__ Port 1: Dev 26, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 3: Dev 29, If 0, Class=Hub, Driver=hub/4p, 480M
                |__ Port 2: Dev 31, If 0, Class=Mass Storage, Driver=usb-storage, 480M
                |__ Port 4: Dev 30, If 0, Class=Mass Storage, Driver=usb-storage, 480M
...
Run Code Online (Sandbox Code Playgroud)

3-1.1.3.2路径的一部分表示在总线 3 上,它通过端口 1(在南桥上)、端口 1(在主板上)、端口 3(仍在主板上),然后在外部 USB 集线器的端口 2 上。该集线器的端口 4 用于 SD 卡读卡器。

因此,根据您的 USB 集线器的连接方式,您需要做类似的事情,并提取您感兴趣的最后一个端口。