1

Я пытаюсь найти способ узнать, где установлено запоминающее устройство (pendrive, hdd), зная только его идентификаторы поставщика и продукта. Есть ли команда (или комбинация многих команд), которая позволила бы мне получить место установки для данного устройства?

Я не слишком разбираюсь в Linux, попробовав команды dmesg , mount , lsusb (-t) и df , даже не подскажу, как этого добиться ...

1 ответ1

1

Если это будет частью программы, используемой широкой публикой, имейте в виду, что:

  1. Может быть несколько устройств с одинаковой парой VID:PID;
  2. Один диск (даже флешка) может иметь несколько разделов;
  3. В Linux один и тот же раздел (файловая система) может быть смонтирован в нескольких местах одновременно.

Это говорит:

Сначала используйте udev для вывода списка всех блочных устройств, чей родитель имеет необходимый VID:PID, либо на основе свойств ID_ *, либо фактических атрибутов sysfs idVendor, 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .