我有几个 USB 大容量存储闪存驱动器连接到 Ubuntu Linux 计算机(Ubuntu 10.04.1,内核 2.6.32-25-386),我需要以编程方式区分它们(如果可能的话,从 bash,但我不怕编译) - 我需要找到哪个块设备对应于哪个physical设备(例如/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
I'm not试图找到块设备和挂载点之间的关系;我正在尝试查找块设备和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
and /sys/block/sdb/sdb1
(块设备及其第一个分区;类似地sdc
and sdd
),但我再次看到没有映射到设备。