根据设备的 VidPid 来安装位置

根据设备的 VidPid 来安装位置

我正在尝试找出一种方法,仅通过了解大容量存储设备(U盘、HDD)的供应商和产品 ID 即可知道其安装位置。是否有命令(或多个命令的组合)可以让我获取给定设备的安装位置?

我对 Linux 不太了解,尝试过dmesgmount和命令lsusb (-t)df,我甚至没有得到关于如何实现这一点的最小线索......

答案1

如果这将成为普通公众使用的程序的一部分,请记住:

  1. 可以有多个具有相同 VID:PID 对的设备;
  2. 单个磁盘(甚至是 USB 记忆棒)可以有多个分区;
  3. 在 Linux 上,同一个分区(文件系统)可以同时安装在多个地方。

这就是说:

首先使用 udev 列出所有父级具有所需 VID:PID 的块设备,这些块设备可以基于 ID_* 属性或实际 sysfsidVendor, idModel属性:

$ udevadm trigger -v -n -s block -p ID_VENDOR_ID=3538 -p ID_MODEL_ID=0051
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/host6/target6:0:0/6:0:0:0/block/sdb
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/host6/target6:0:0/6:0:0:0/block/sdb/sdb1

思考可以相当安全地假设名字的最后一部分总是与名字相匹配/dev......

用于findmnt列出挂载点:

$ findmnt -n -o TARGET /dev/sdb1
/run/media/grawity/A0D8-7268

结合:

devs=$(udevadm trigger -v -n -s block -p ID_VENDOR_ID=… -p ID_MODEL_ID=…)

for dev in $devs; do
    findmnt -n -o TARGET /dev/${dev##*/}
done

# alternative, based on the device's major:minor
for dev in $devs; do
    findmnt -n -o TARGET $(<"$dev/dev")
done

相关内容