PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : USB-Laufwerkszuordnung



Ralf_
07.10.10, 09:31
Hallo zusammen,

Ich habe einen USB-Hub mit 7 USB-Anschlüssen und
bin auf der Suche nach einer eindeutigen (konstanten) Zuordnung,
und zwar vom Device zum vergebenen SCSI-Laufwerk.
Mit 'cat /proc/partitions' sehe ich die vergebenen SCSI-Gerätenamen, 'lsusb' zeigt mir die Devices an, aber die Zuordnung finde ich nicht.
Der verwendete Linux-Kernel ist 2.6.23.

Danke
Ralf

derRichard
07.10.10, 09:38
hi!

udev legt in /dev/disks/ viele prkatische symlinks an.
da findest du sicher etwas.

hth,
//richard

oziris
08.10.10, 00:16
Ich mache das so und kann das empfehlen:
Nach dem einstecken kurz warten und dann "dmesg" eingeben. Am Ende kommt etwa so ein Text:
[ 2827.487404] usb 2-1.3: new high speed USB device using ehci_hcd and address 12
[ 2827.590786] usb 2-1.3: New USB device found, idVendor=058f, idProduct=6387
[ 2827.590792] usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2827.590796] usb 2-1.3: Product: Mass Storage Device
[ 2827.590799] usb 2-1.3: Manufacturer: JetFlash
[ 2827.590802] usb 2-1.3: SerialNumber: GB3K5AP9
[ 2827.590896] usb 2-1.3: configuration #1 chosen from 1 choice
[ 2827.591240] scsi11 : SCSI emulation for USB Mass Storage devices
[ 2827.591301] usb-storage: device found at 12
[ 2827.591303] usb-storage: waiting for device to settle before scanning
[ 2832.583722] usb-storage: device scan complete
[ 2832.591848] scsi 11:0:0:0: Direct-Access JetFlash TS2GJFT3 8.07 PQ: 0 ANSI: 2
[ 2832.592133] sd 11:0:0:0: Attached scsi generic sg4 type 0
[ 2832.593488] sd 11:0:0:0: [sdc] 4005886 512-byte logical blocks: (2.05 GB/1.90 GiB)
[ 2832.593967] sd 11:0:0:0: [sdc] Write Protect is off
[ 2832.593969] sd 11:0:0:0: [sdc] Mode Sense: 03 00 00 00
[ 2832.593971] sd 11:0:0:0: [sdc] Assuming drive cache: write through
[ 2832.595963] sd 11:0:0:0: [sdc] Assuming drive cache: write through
[ 2832.595966] sdc: sdc1
[ 2832.597931] sd 11:0:0:0: [sdc] Assuming drive cache: write through
[ 2832.597933] sd 11:0:0:0: [sdc] Attached SCSI removable disk
In diesem fall ist es "sdc". Ich habe die Stellen Fett markiert, an denen man es erkennen kann.

Steckt das Gerät schon länger und kann nicht entfernt werden (z.B. weil nicht klar ist, ob es gemountet ist oder weil es an einem Server im Rechenzentrum ganz weit weg steckt oder so), dann kann man oft ähnliche Meldungen in /var/log/syslog oder /var/log/messages finden, aber das könnte dann auch ein andres Gerät sein...

Man kann auch folgendes machen:
su -c 'hddtemp /dev/sd?'
#oder
sudo hddtemp /dev/sd?Obwohl es eigentlich zur Überprüfung der Temperatur gedacht ist, wird auch die Hardwarebezeichnng angezeigt. hddtemp muss man aber evtl. erst noch installieren. Da käme z.B. sowas raus:
$ su -c 'hddtemp /dev/sd?'
[...]
/dev/sdc: JetFlashTS2GJFT3: S.M.A.R.T. not available

spoc
12.10.10, 11:27
hal ist schonmal ein guter Tip. udev wird wahrscheinlich hal verdrängen.
Als Einstieg könntest Dir mal die Regeln in /etc/udev/rules.d/ ansehen.

Ralf_
11.11.10, 07:54
Danke für die bisherigen Antworten. Da wir die Lösung immer noch suchen, ist das Problem ausführlicher beschrieben:

Wir sind auf der Suche nach einer Möglichkeit herauszufinden, ob ein USB-Stick direkt im Rechner oder indirekt über einen USB-Hub angeschlossen ist und auf welchen SCSI-Device-Node er abgebildet wird.
Das ganze soll auf einem Embedded-Rechner mit Linux 2.6 (momentan 2.6.23, es könnte wahrscheinlich auch ein neuerer Kernel verwendet werden) laufen, der überwiegend mit BusyBox ausgestattet ist, d.h. kein udev oder sonstiger moderner Kram aus den allerneusten Linux-Distributionen.

Ersteres (ob der USB-Stick über einen Hub angeschlossen ist), lässt sich ja recht einfach über /proc/bus/usb/devices feststellen.
Allerdings ist es anscheinend nicht sonderlich einfach, von diesem Eintrag auf den SCSI-Device-Node zurückzuschließen.

Bei Linux 2.4 gab es die Möglichkeit VendorID, ProductID und Seriennummer zu einer GUID zusammenzuhängen und diese in /proc/scsi/usb-storage-*/* zu suchen.
Unter Linux 2.6 kann man diesen /proc-Zweig zwar noch optional aktivieren, allerdings ist dabei die GUID weggelassen worden.

Theoretisch sollte alles, was unter /proc/scsi war, jetzt unter /sys liegen. Dort findet sich zwar einiges zum Thema SCSI (z.B. /sys/bus/scsi/devices, /sys/block/sda/device, /sys/class/scsi_disk, etc.), allerdings scheint darin die GUID nicht aufzutauchen, was eine Zuordnung zum USB-Stick schwierig macht.

Gibt es unter Linux 2.6 irgendeine elegante Möglichkeit (ohne große Zusätze wie udev) die Zuordnung eines bestimmten USB-Sticks aus der Device-Liste zu einem bestimmten SCSI-Device-Node nachzuvollziehen oder sind wir gezwungen Linux 2.4 einzusetzen?

buzz768
11.11.10, 09:27
Ich hatte mir mal ein Script geschrieben, um anhand von VendorID und ProductID den zugehörigen USB-Bus (?) zu finden, vielleicht kannst du das irgendwie verwursten


#!/bin/bash
# find usb bus-device from idVendor and idProduct

if [ $# -ne 2 ]
then
echo "usage: usbfind idVendor idProduct" > /dev/stderr
exit 1
fi

for l in /sys/bus/usb/devices/*
do
if [ -e $l/idVendor ] && [ -e $l/idProduct ]
then
idV=$(cat $l/idVendor)
idP=$(cat $l/idProduct)
if [ $idV = $1 ] && [ $idP = $2 ]
then
basename $(readlink $l)
exit 0
fi
fi
done

echo "No such device" > /dev/stderr
exit 1

Das zugehörige Blockdevice könnte man damit anscheinend so ermitteln


ls -l `find /sys/bus/usb/drivers/usb/$(./usbfind $idVendor $idProduct)/ -name block`