代码之家  ›  专栏  ›  技术社区  ›  Piskvor left the building Rohit Kumar

在Linux中查找哪个驱动器对应于哪个USB大容量存储设备

  •  5
  • Piskvor left the building Rohit Kumar  · 技术社区  · 14 年前

    我有几个USB大容量存储闪存驱动器连接到一台UbuntuLinux计算机(Ubuntu10.04.1,内核2.6.32-25-386),我需要用程序将它们区分开来(如果可能的话,我也不怕编译)——我需要找到哪个块设备对应哪个块设备 身体的 /dev/sdb1 ->USB端口1中的设备;在我的情况下,一个设备~一个卷)。

    换句话说,我知道我有三个硬件设备插入了USB端口;它们中的每一个在系统中显示为一个USB大容量存储设备(如lsusb所示),被创建为一个块设备( /开发/sdb1 /media/1234-5678

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

    我是 试图找出块设备与安装点之间的关系; 我想找出块设备和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
    

    /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 回复  |  直到 14 年前
        1
  •  9
  •   Piskvor left the building Rohit Kumar    14 年前

    我不确定这是在哪个内核版本中实现的,但是 /sys/block/* 条目是指向设备的符号链接。

    /sys/block/sdb 符号链接到其他目录,其名称包含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
    

    Working example script in bash .

        2
  •  1
  •   plaes    10 年前

    我使用路径:

    /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

        3
  •  -1
  •   ochrist    14 年前
        4
  •  -1
  •   Peter O. Manuel Pinto    12 年前

    我就是这样做的。

    lsusb -v 显示所有设备磁盘都有一个iserial编号请注意它们

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

    一切都在 /dev/disk