如何使用 lsusb 的输出导出块设备信息

如何使用 lsusb 的输出导出块设备信息

我正在构建一个脚本,让用户选择 USB 磁盘作为备份目标。这个想法是创建一个跨越整个设备的分区。lsusb给出供应商 ID 和名称,我打算将其呈现给用户。

我显然只想列出磁盘,而不是其他设备。我还需要找出/dev用户选择的磁盘的设备名称,以便在其上创建分区。我查看了/dev/disk//sys/试图在那里的各种符号链接中找到交叉引用。我还没有能够利用lsblkdf实现我的目标。我想知道:

  • 如何使用lsusb提供的信息来确定哪些 USB 设备是磁盘?
  • 如何使用lsusb提供的信息来获取/dev特定设备的设备名称?

答案1

您的问题的答案在某种程度上取决于将使用什么机制来触发脚本。

假设该脚本是从某种备份程序中调用的,当连接 USB 设备时,该程序不会立即调用(如果您从乌德夫规则,例如),然后您可以用来udevadm info收集所需的所有信息。

这个想法如下:

  • 任何连接的 USB 驱动器都会自动分配一个设备节点/dev/sdX由内核
  • 如果循环所有设备节点/dev/sd[az](或者更确切地说,以实际存在的为准/开发/)并调用udevadm info --query=all /dev/sdX每个驱动器,您可以确定其中哪一个是 USB 驱动器,因为输出将有一行说明
E: ID_BUS=usb
  • 同样,您会发现包含供应商和型号的输出行,如
E: ID_MODEL=Flash_Disk
< ... >
E: ID_VENDOR=Generic

udevadm因此,通过解析using或类似的输出grep,您将能够收集用于您目的的所有必要信息。

相关内容