Найдите, какой диск соответствует какому USB-накопителю в Linux - PullRequest
5 голосов
/ 07 октября 2010

У меня есть несколько USB-накопителей, подключенных к компьютеру с Ubuntu Linux (Ubuntu 10.04.1, ядро ​​2.6.32-25-386), и мне нужно отделить их программно (от bash, если это возможно, но яя тоже не боюсь компилирования) - мне нужно найти, какое блочное устройство соответствует какому физическому устройству (например, /dev/sdb1 -> устройство в USB-порту 1; в моем случае одно устройство ~ один том).

Другими словами, я знаю, что к USB-портам подключено три аппаратных устройства;каждый из них отображается в системе как запоминающее устройство USB (как в случае с lsusb), создается как блочное устройство (/dev/sdb1) и автоматически монтируется с помощью UUID (/media/1234-5678).

USB device               block device    mountpoint
USB device in port 2.2 <-> /dev/sdb1   <-> /media/1234-5678

Я не пытаюсь найти связь между блочным устройством и точкой монтирования; Я пытаюсь найти связь между блочным устройством и USB-устройством, есть ли способ?

Почему?Будет несколько записей на дисках с непредсказуемым временем завершения.Мне нужно дать оператору какое-то указание типа «теперь вы можете извлечь диск в порт 2 (второй слева)».Я обнаружил, какой физический порт соответствует какому номеру порта на этой конкретной машине, и найти блочные устройства по точкам монтирования очень просто;Теперь я застрял при сопоставлении логических портов USB для блокировки устройств.

Я вижу диски с помощью lsusb:

Bus 001 Device 058: ID 067b:2517 Prolific Technology, Inc. Mass Storage Device
Bus 001 Device 060: ID 067b:2517 Prolific Technology, Inc. Mass Storage Device
Bus 001 Device 061: ID 067b:2517 Prolific Technology, Inc. Mass Storage Device

и вижу их подключенными (по их UUID):

/dev/sdb1 on /media/BC88-15C4 type vfat
/dev/sdc1 on /media/AE54-65AA type vfat
/dev/sdd1 on /media/58D2-FED1 type vfat

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

Я нашел /sys/bus/usb/devices (список USB-устройств), но, похоже, это те же данные, которые я получаю от lsusb - я не вижу там отображения дисков.

Там естьтакже /sys/block/sdb и /sys/block/sdb/sdb1 (блочное устройство и его первый раздел; аналогично для sdc и sdd), но, опять же, я не вижу сопоставления с устройствами.

Ответы [ 4 ]

8 голосов
/ 07 октября 2010

Я не уверен, в какой версии ядра это было реализовано, но записи /sys/block/* являются символическими ссылками на устройства.

Другими словами, /sys/block/sdb символические ссылки на другой каталог и его имясодержит идентификатор устройства USB.

$ file /sys/block/sdb
/sys/block/sdb: symbolic link to `../devices/pci0000:00/0000:00:02.1/usb1/1-1/1-1.1/1-1.1:1.0/host31/target31:0:0/31:0:0:0/block/sdb'
                                                  USB version and port here---^^^^^

1-1.1 - интересная часть, обозначающая usb1-port 1.device 1.При подключении к концентратору добавляется другой уровень: 1-2.3.1, обозначающий usb1-port 2.port 3.device 1.

Псевдокод:

get partition name # e.g. /dev/sdb1
get disk name # that would be /dev/sdb
get your basename # sdb
see where /sys/block/$your_basename points to # e.g. ../devices/blah/blah/1-2.1/blah
get the longest substring matching "\d-\d+(.\d+)*"  # e.g. 1-2.1
that is the device id you want
/sys/bus/usb/devices/$device_id/ has all kinds of information about it
the ID corresponds to hardware USB ports

Рабочий пример сценария в bash .

1 голос
/ 09 апреля 2014

Я использую путь:

/sys/bus/usb/drivers/usb-storage/4-1:1.0/host4/target4:0:0/4:0:0:0/block/sda

, чтобы вы могли видеть шину USB 4, порт 1 связан с USB-накопителем / dev / sda

0 голосов
/ 23 октября 2012

Вот как я это делаю.

lsusb -v показывает все устройства, на которые записан звездный номер, запомните их

 ls -l /dev/disk | grep [iserial] 

Все в /dev/disk является символической ссылкой, поэтому перейдите по символической ссылке, чтобы увидеть устройство.

0 голосов
/ 07 октября 2010

Разве вы не можете использовать метки дисков?http://ubuntuforums.org/showthread.php?t=322973

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