Wie kann ich jemals wissen, welche Gerätedatei dazu gehört, wenn ich ein physisches Gerät anschließe?

13

Angenommen, ich stecke mehrere USB-Laufwerke ein, die nicht automatisch gemountet werden. Wie kann ich herausfinden, welche Gerätedatei zu welchem ​​physischen Gerät gehört, damit ich es zum Beispiel mounten kann?

Ich verwende Mac OS X, aber ich mag eine Antwort, die auf allen (oder zumindest den beliebtesten) Unix-Systemen funktioniert. Ich hatte in der Vergangenheit dieses Problem mit Linux.

richtig falten
quelle
Unter Linux würde die Antwort in der Regel udev beinhalten. Sie versuchen also, sich unter OSX nach udev-Entsprechungen umzusehen . Dies führt insbesondere zu einer Alternative zu udev-Funktionalität in OSX und OSX USB Device Interface Guide .
Gilles 'SO- hör auf böse zu sein'
Unter MacOSX ist es am einfachsten, die Volumes anhand ihrer Bezeichnungen zu identifizieren. Aber Gilles hat Recht mit der perfekten Lösung.
peterh - Wiedereinsetzung von Monica

Antworten:

14

Udev verwenden:

Sie können nützliche Informationen abfragen udev(auf Systemen, die sie verwenden - fast alle Desktop-Linuxe mit Sicherheit). Wenn Sie beispielsweise wissen möchten, welches angeschlossene Laufwerk zugeordnet ist /dev/sdb, können Sie Folgendes verwenden:

udevadm info --query=property --name=sdb

Es wird eine Liste der Eigenschaften dieses Geräts angezeigt, einschließlich der Seriennummer (ID_SERIAL_SHORT). Mit diesen Informationen können Sie die Ausgabe von lsusb -vDingen wie dem Hersteller und dem Produktnamen anzeigen und herausfinden.

Ein kürzerer Weg dazu wäre

udevadm info --query=property --name=sdb | grep "\(MODEL_ID\|VENDOR_ID\)"

und siehe die Zeile mit der Übereinstimmung $ID_VENDOR_ID:$ID_MODEL_IDin der viel kürzeren Ausgabe von lsusb.

Eine weitere nützliche Option ist udevadm monitor. Verwenden Sie diese Option, wenn Sie wissen möchten, welcher Geräteknoten zum Zeitpunkt des Anfügens des Geräts erstellt wurde . Also erstmal laufen

 udevadm monitor --udev --subsystem-match=block

Und dann das Gerät anschließen. Sie sehen die Gerätenamen der erkannten Blockgeräte (Festplatten / Partitionen) am Ende jeder Ausgabezeile.

Ein praktisches Beispiel für eine Shell-Funktion:

Hier ist eine Funktion, die Sie in Ihr .bashrc(oder .zshrc) einfügen können :

listusbdisks () 
{
    [["x $ 1" == "xv"]] && shift && local VERBOSE = -v
    für dsk in $ {@ - / dev / sd?}
    tun
        / sbin / udevadm info --query = path --name = "$ dsk" | grep --colour = auto -q usb || fortsetzen
        echo "===== device $ dsk is:"
        (eval $ (/ sbin / udevadm info --query = property --name = "$ dsk" | grep "\ (MODEL \ | VENDOR \) _ ID")
          ["$ ID_VENDOR_ID: $ ID_MODEL_ID" == ":"] && "Unbekannt" || \
            lsusb $ VERBOSE -d "$ ID_VENDOR_ID: $ ID_MODEL_ID"
        )
        grep -q "$ dsk" / proc / mounts && echo "----- GERÄT IST MONTIERT ----"
        Echo
    erledigt
}

Benutze es so:

  • listusbdisks- um alle /dev/sdxGeräte zu erkennen ;
  • listusbdisks sdboder listusbdisks /dev/sdboder listusbdisks sdb sdc- um nur Informationen zu bestimmten Geräten zu erhalten;
  • listusbdisks -v [optional devices as above] - um ausführliche Ausgaben von anzuzeigen lsusb

[Bearbeiten]: Es wurden einige Funktionen hinzugefügt, z. B. das Abfragen vieler Geräte, das Überprüfen der Bereitstellungen und das Steuern der Ausführlichkeit von lsusb.

rozcietrzewiacz
quelle
So weit es geht, stimmt es, aber nicht alle Systeme nutzen es udev.
Caleb
@Caleb True ... Ist eigentlich lsusbauch ein optionales Programm. Aber beide sind sehr verbreitet.
Rozcietrzewiacz
@rozcietrzewiacz Die Frage bezieht sich hauptsächlich auf OSX, aber udev ist an sich spezifisch für Linux.
Gilles 'SO - hör auf, böse zu sein'
@ Gil Na ja, stimmt. Ich habe keine Erfahrung mit OSX, daher habe ich meine Antwort so aktualisiert, dass sie nicht irreführend ist.
Rozcietrzewiacz
Was ich in solchen Fällen im Allgemeinen mache, ist, dass ich das Gerät einstecke und sofort laufe dmesg. Dies ist jedoch nicht hilfreich, wenn das Gerät bereits angeschlossen ist und nach dem ersten weitere Geräte angeschlossen sind. :)
Abhishek A
3

Es gibt keine allgemeingültige Antwort. Unter Linux ist es wahrscheinlich am einfachsten, das Dienstprogramm gnome disk zu starten. Es zeigt alle erkannten Datenträger an, unabhängig davon, ob sie gemountet sind oder nicht. Über die Befehlszeile können Sie die Ausgabe von blkidoder abrufen udevadm info --export-db.

Psusi
quelle
3

In Mac OS X können Sie versuchen, zu verwenden diskutil list.

x1a0
quelle
1

In Bezug auf alle Unixe halte ich dies nicht für machbar.

Die heute üblichen externen Busse verwenden kein festes Nummerierungsschema für ihre Ports, wie IDE es tat. Die einzigen verbleibenden Datenquellen für die Zuordnung, die Sie benötigen, sind die Herstellernamen der Laufwerke, ihre Seriennummern oder die UIDs der Partitionen.

Herstellernamen sind auf einem bestimmten Computer nicht unbedingt eindeutig (Angenommen, Sie schließen zwei externe Laufwerke derselben Serie an - sie werden identisch identifiziert). Seriennummern sind nicht "von außen sichtbar", ebenso wie Partitions-UIDs.

Die einzige universelle Lösung, die mir in den Sinn kommt, besteht darin, die physischen Laufwerke mit der Seriennummer zu kennzeichnen und den Befehl udevadm in der Antwort von rozcietrzewiacz zu verwenden, wenn UDEV verfügbar ist.

jstarek
quelle