我有几个 USB 大容量存储闪存驱动器连接到 Ubuntu Linux 计算机(Ubuntu 10.04.1,内核 2.6.32-25-386),我需要以编程方式区分它们(如果可能,从 bash,但我'我也不怕编译)——我需要找到哪个 block 设备对应于哪个物理设备(例如/dev/sdb1
-> USB端口1中的设备;在我的案例,一台设备 ~ 一卷)。
换句话说,我知道我有三个硬件设备插入了 USB 端口;它们中的每一个都在系统中显示为 USB 大容量存储设备(如 lsusb 所示),创建为 block 设备(/dev/sdb1
)并由 UUID(/media)自动挂载/1234-5678
).
USB device block device mountpoint
USB device in port 2.2 <-> /dev/sdb1 <-> /media/1234-5678
我不是试图找到 block 设备和挂载点之间的关系; 我正在尝试查找 block 设备和 USB 设备之间的关系,有什么办法吗?
为什么?磁盘上会有一些写入,完成时间不可预测。我需要给运算符(operator)一些指示,例如“您现在可以删除端口 2(从左数第二个)中的磁盘”。我已经找到哪个物理端口对应于该特定机器上的哪个端口号,并且从挂载点查找 block 设备很简单;现在我无法将逻辑 USB 端口映射到 block 设备。
我可以使用 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
( block 设备及其第一个分区;sdc
和 sdd
),但同样,我没有看到任何到设备的映射。
最佳答案
我不确定这是在哪个内核版本中实现的,但是 /sys/block/*
条目是设备的符号链接(symbolic link)。
换句话说,/sys/block/sdb
符号链接(symbolic link)到不同的目录,其名称包含 USB 设备 ID。
$ 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
关于linux - 在 Linux 中查找哪个驱动器对应哪个 USB 大容量存储设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881449/