LINUX.ORG.RU

Возможно ли определить в какой физический порт воткнуто usb устройство?

 


0

5

Есть usb-хаб (вероятно dlink dub-h7).

В него воткнуто большое количество одинаковых флешек.

Возможно ли определить, в какой физический разъем хаба какая флешка воткнута?

★★★★★

Последнее исправление: Tanger (всего исправлений: 1)

Возможно ли определить, в какой физический разъем хаба какая флешка воткнута?

Приклей на флешки бирки. А порты и так пронумерованы.

deep-purple ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Ещё можно запустить udevadm monitor втыкнуть устройство и видеть что там. Но как это будет с хабом опять же я не в курсе

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
    |__ Port 2: Dev 19, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 20, If 0, Class=Human Interface Device, Driver=usbhid, 480M
        |__ Port 4: Dev 23, If 0, Class=Mass Storage, Driver=usb-storage, 480M
        |__ Port 5: Dev 21, If 0, Class=Hub, Driver=hub/5p, 480M
            |__ Port 5: Dev 25, If 0, Class=Mass Storage, Driver=usb-storage, 480M
            |__ Port 1: Dev 22, If 0, Class=Human Interface Device, Driver=usbhid, 480M
        |__ Port 3: Dev 24, If 0, Class=Mass Storage, Driver=usb-storage, 480M

3 флешки dev 23-25. Воткнуты в 1,2 и 4й порты хаба.

Tanger ★★★★★
() автор топика
Ответ на: комментарий от deep-purple

Приклей на флешки бирки. А порты и так пронумерованы.

Это никоим образом не позволит мне по /dev/sd* понять в какой порт какая флешка воткнута.

У меня есть периодически задача делать массовое клонирование образа флешки. И по завершении записи сигнализировать о том что в таком-то порту флешку можно заменить на следующую.

Раньше я ориентировался на индикатор на флешках (не мигает - запись закончена), а теперь появились флешки без индикаторов.

Можно конечно вручную после вставки флешки указать номер порта в который она вставлена, но удобнее было бы автоматически.

Tanger ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

udevadm monitor

Да, его и так использую для обнаружения вновь подключенных устройств.

Tanger ★★★★★
() автор топика

узнать можно. при подключении в dmesg пишется какое устройство и в каком (с точки зрения системы) порту USB появилось. сопоставить с «в какой физический разъем хаба какая флешка воткнута» вроде бы не сложно, но требуется «вмешательство оператора»

Это никоим образом не позволит мне по /dev/sd* понять в какой порт какая флешка воткнута.

вот это «моя не пони-мать». тем более ты даже udevadm используешь... ещё раз

  • при подключении флешки система пишет «в порт X подключено устройство Y ...устройство Y будет файлом /dev/sdZ»
  • Сложность: соотнести внутреннюю нумерацию портов USB (вид со стороны системы) с внешней «нумерацией» (вид со стороны оператора-пользователя)
  • до перезагрузки (или переподключения хаба) порядок портов не меняется
  • после перезагрузки (переподключения) возможно и меняется
anymouze ★★
()

Возможно ли определить, в какой физический разъем хаба какая флешка воткнута?

udev rule вроде этого:

KERNEL!="sd[a-z]1", GOTO="usb_automount_end"

ENV{hub_port_num}="unknown"
DEVPATH=="*usb3/3-2/3-2.4*", ENV{hub_port_num}="0"
DEVPATH=="*usb3/3-2/3-2.3*", ENV{hub_port_num}="1"
DEVPATH=="*usb3/3-2/3-2.2*", ENV{hub_port_num}="2"

ACTION=="add", RUN+="/bin/mkdir -p /media/usb-hub-port-%E{hub_port_num}", RUN+="/bin/mount -o sync,errors=continue /dev/%k /media/usb-hub-port-%E{hub_port_num}"
ACTION=="remove", RUN+="/bin/umount -l /media/usb-hub-port-%E{hub_port_num}", RUN+="/bin/rmdir /media/usb-hub-port-%E{hub_port_num}"

LABEL="usb_automount_end"

может монтировать флешки в /media/usb-hub-port-N

$ mount |grep usb-hub
/dev/sdd1 on /media/usb-hub-port-0 type vfat (rw,relatime,sync,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=continue)

только надо будет еще

$ grep MountFlags  /lib/systemd/system/systemd-udevd.service 
MountFlags=shared
alx777 ★★
()
Ответ на: комментарий от Tanger

Можно по имени блочного устройства найти порт хаба вот так:

$ find /sys/devices -name st0
/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.6/2-1.6:1.0/host7/target7:0:0/7:0:0:0/scsi_tape/st0

Вместо st0 тебе надо использовать sdX. 2-1.6 — это USB-устройство, подключенное в порт 6 хаба 2-1. У тебя это будут 1-2.3, 1-2.4, 1-2.5.5. 1-2 это твой хаб, к портам 3 и 4 подключены флешки, к порту 5 подключен ещё один хаб, к его порту 5 подключена флешка. Твой хаб внутри похоже устроен как какад из двух хабов. Для многопортовых хабов это в порядке вещей.

Можно на хаб напротив каждого порта наклеить ярлычок с номером порта, как этот номер виден на шине USB. Для каскадов там будет два (или более) числа, разделённых точками.

iliyap ★★★★★
()
25 декабря 2019 г.
Ответ на: комментарий от Tanger

выложил быдлоскрипт, который использовал для того чтобы сделать сотню копий одной флешки. Скрипт вначале нумерует порты (в порядке вставки накопителей), затем начинает записывать на накопители данные и отображать текущий статус портов (unplugged, plugged, writing, ready)

https://github.com/tarwirdur/mass-flash-image-writer

Tanger ★★★★★
() автор топика
Ответ на: комментарий от Tanger

Этот высер равносилен отсутствию лицензии

Goury ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.