Linux: Map a blockdevice to a USB-device
The information in
/sys is organized in multiple ways (by driver, by bus, etc.), and there are many symbolic links to go from one hierarchy to another.
Case in point (example seen on kernel 2.6.26): starting from the block device in
/sys/block/sdc, the symbolic link
/sys/block/sdc/device points inside the per-device-type hierarchy. You can see that it’s an USB device because the target of the link is something like
Conversely, USB devices are listed in
/sys/bus/usb/devices, and we can see that
8-2:1.0 is a disk-like device because
/sys/bus/usb/devices/8-2:1.0/driver links to
usb-storage. To find out what the associated block device is, it seems we need to go down to the directory
/sys/bus/usb/devices/8-2:1.0/host9/target9:0:0/9:0:0:0 which contains a symbolic link
block:sdc whose target is
ADDED: Caution: the exact structure of
/sys changes from kernel version to kernel version. For example, with kernel 2.6.32,
/sys/block/sdc/device points directly into the
/dev/bus/scsi without going through the USB hop.
A different approach is to call the
udevadm info command.
udevadm info -p /sys/block/sdc --query=… gives information on a device based on its
/sys entry, while
udevadm info -n sdc --query=… gives information on the device
The information includes bus information, for example
udevadm info -p /sys/block/sdc --query=env shows
The udev documentation may have more information of interest to you.