Wie finde ich heraus, welches / dev ein USB-Flash-Laufwerk ist?


160

Ich möchte ein USB-Laufwerk mounten, zwei davon, und ich benötige zwei verschiedene Mount-Punkte. Leider wurde der Name des Linux-Kernels geändert und ich kann nicht herausfinden, welcher /devSpeicherort der richtige ist. Gibt es eine Möglichkeit, durchzusehen dmesgoder /procwoanders herauszufinden, welcher Geräteknoten ein USB-Laufwerk ist.

(Ich benutze ArchLinux, wenn das hilft ... /dev/sdaist die erste Festplatte, /dev/sr0ist ein DVD-Laufwerk, etc.)

Bearbeiten: Das USB-Laufwerk ist an einen USB-Hub angeschlossen. Ich habe durchgesehen dmesgund es heißt, dass der Hub verbunden war und nach den 3 angeschlossenen Geräten gesucht wurde. Ich kann immer noch nicht sehen, wo sich mein USB-Laufwerk befindet.


1
Kannst du es nicht sehen? Warten Sie vielleicht ein bisschen. Oder versuchen Sie es mit einem anderen USB-Anschluss. Sehen Sie, welche Unterschiede es in "lsusb" gibt
Nick Devereaux

Vielleicht möchten Sie die Frage etwas umformulieren - schließlich sind nicht alle USB-Geräte Festplatten.
Arafangion

3
Der dfBefehl zeigt Ihnen, wo es montiert wurde
Will Sheppard

Antworten:


83

Einfachste Methode: Überprüfen Sie die Ausgabe von dmesgnach dem Anschließen des USB-Geräts. Es sollte Ihnen zeigen, welcher /devKnoten ihm zugewiesen wurde.


2
dmesgfunktioniert prima, aber ich habe einen fall wo der dmesgknoten nicht /devangezeigt wird: [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcdWas bedeutet das? Wie kann ich dieses Gerät einbinden? Das Gerät zeigt auf lsusb...
Modulitos

1
Eigentlich habe ich es herausgefunden. Seit meinem letzten Neustart gab es ein Kernel-Update, das dieses Problem verursachte. Nach einem Neustart ist mein USB-Anschluss in Ordnung. Hoffentlich hilft das jemandem!
Modulitos

54

Solange Sie udev ausführen , können Sie dies problemlos tun, indem Sie auf / dev / disk / by-id / usb- manufacturername _ serialnumber verweisen . Diese werden als symbolische Links angezeigt, auf die Sie entweder direkt in Ihrer fstab verweisen oder die Sie mit readlink -e dereferenzieren können , um das zugehörige Blockgerät zu bestimmen.

Hier ist ein Beispiel aus der Praxis. An meinem Computer sind 3 USB-Festplatten angeschlossen. Diese werden jeweils in / dev / disk / by-id mit eindeutigen Seriennummern angezeigt (obwohl sie einen gemeinsamen Hersteller-String haben). Ich habe symbolische Links zu jedem dieser drei eindeutigen Einträge erstellt und kann jetzt schnell feststellen, welches Laufwerk welches ist (und welches Gerät jedem Laufwerk zugeordnet ist), indem ich readlink -e linkname ausführe . Wenn Sie beispielsweise readlink -e / root / disk2 auf meinem Computer ausführen, wird derzeit " / dev / sde " angezeigt , während readlink -e / root / disk3 überhaupt keine Ausgabe erzeugt.


15
Kurz und einfach:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
Felipe Alcacibar

54

All dies sind gute Vorschläge, aber die schnellste und am wenigsten ausführliche Methode besteht darin, einfach Folgendes in das Terminal einzugeben:

mount

Hier wird eine Liste aller gemounteten Geräte angezeigt (dies setzt voraus, dass das USB-Laufwerk gemountet ist, was in der Regel bei modernen Linux-Distributionen der Fall ist).


5
Nein, Ihr Gerät wird nicht auf magische Weise aktiviert. Sie müssen es mit angeben mount /dev/id /mount/point, damit das nicht funktioniert.
Polym

9
Meine Antwort bezieht sich auf die Frage des Benutzers "Gibt es eine Möglichkeit, durch dmesg oder / proc oder irgendwo anders herauszufinden, welcher Geräteknoten ein USB-Laufwerk ist?" .
AnotherLongUsername

Diese Antwort löste eine fast identische Frage für mich.
Matthew Brown alias Lord Matt

1
Ich denke, dass das Verhalten von automount stark vom Distro-Typ abhängt.
Jiggunjer

1
dfIch nehme auch an.
Alexey

24

Probieren Sie den Befehl aus udevinfo -q all -n /dev/sda, wo /dev/sdasich der Pfad zu Ihrer Festplatte befindet. Auf diese Weise erhalten Sie eine Schiffsladung mit Informationen zu der Festplatte, die Sie sich ansehen. Ein Eintrag informiert Sie über den Bus, mit dem Sie verbunden sind.

Dies erspart Ihnen natürlich das Durchsuchen von dmesg und / oder Protokollen.

Aktualisieren

udevadm info --query=all -n /dev/sda 

Ab mindestens Juli 2010 wurde [ 1 ] udevinfo in Debian durch udevadm infoeine kleine Transiente ersetzt (und abgeleitet), mit der Symlinks bald veraltet und entfernt wurden (Sie können sie immer noch in alten, nicht aktualisierten Maschinen finden). Immer aus [ 1 ] können wir lesen:

In udev 117 udevadmwurde eingeführt und udevinfound andere Programme in Kompatibilitäts-Symlinks umgewandelt. Die Symlinks wurden in udev 128 verworfen und in udev 147 endgültig entfernt .


8
In Debian udevinfowird umbenannt udevadm.
Steve Pomeroy

8
Unter Ubuntu scheint der Befehl "udevadm info --query = all -n / dev / sda" zu sein
machineghost

Ich nehme an, sie haben den Befehl irgendwann umbenannt - als ich die Antwort schrieb (vor
langer

Befehl funktioniert noch in Ubuntu,udevadm info --query=all -n /dev/ttyUSB1
Siddharth

1
udevadm info --query=all -n /dev/ttyUSBauch in Fedora.
Slm

22

Die einfachste Methode, um zu sehen, was los ist, ist die Eingabe (natürlich als root):

blkid -c /dev/null

Dies gibt Ihnen einen vollständigen Überblick über alle Blockgeräte, auch wenn sie nicht montiert sind


Nicht alle Distributoren haben dies. Welches hast du benutzt?
New Alexandria

Dies gibt nichts auf meiner Raspbian Distribution aus.
IgorGanapolsky

Befehl nicht gefunden: blkid
IgorGanapolsky

Keine Ausgabe dieses Befehls unter Ubuntu 14.04 64-Bit.
gbmhunter

11

/dev/disk/by-* ist in diesem Fall der einfachste Weg. Wenn Sie das Leben aus irgendeinem Grund interessanter gestalten möchten, können Sie HAL verwenden.

So listen Sie alle Geräte auf, die Sie verwenden:

hal-device

So rufen Sie eine bestimmte Eigenschaft ab, die Sie verwenden (dies wird /dev/sd*auf einem USB-Speichergerät zurückgegeben):

hal-get-property --udi $UDI --key block.device

Es gibt auch:

hal-find-by-capability
hal-find-by-property

Wenn Sie es noch komplizierter machen möchten, können Sie sich relativ einfach einen HAL-basierten Auto-Mounter schreiben. Dies kann sehr praktisch sein, wenn Sie die Dinge vollständig automatisieren möchten.

Und der Vollständigkeit halber gibt es auch:

lsusb -v
lshw

Hier finden Sie allgemeine Informationen zu USB und Ihrer Hardware im Allgemeinen.


2
/ dev / disk / by-id / * usb * ist sehr hilfreich.
Rob

/ dev / disk / by-label ftw. Danke :)
Triptychon

10
sudo fdisk -l

Und analysieren Sie einfach das Ergebnis.


1
fdisk man page "Wenn keine Geräte angegeben sind, werden die in / proc / partitions (falls vorhanden) genannten verwendet." Das Ausführen von fdisk ist möglicherweise keine Option ... Basierend auf einem Debian-System, von dem ich weiß, dass es nicht installiert ist, gehe ich davon aus, dass einige GPT-Systeme die nicht benötigte Software möglicherweise nicht installieren. Trotzdem sollte das Prüfen von / proc / Partitionen eine Option sein.
TOOGAM

Dies war die einzige Option, die für mich gut funktionierte. Es tut mir leid, wenn es bei Ihnen nicht geklappt hat!
Felipe

8

Verwenden

ls -l /dev/disk/by-id/usb*

Unter den Standardregeln von udev werden Ihnen die meisten USB-Geräte und der Symlink zu deren Blockgerätenamen auf dem System angezeigt.

Wenn das nicht geht, schau /dev/disk/by-id/direkt zu.


6

Für USB-Geräte können Sie einfach tun

REMOVABLE_DRIVES=""
for _device in /sys/block/*/device; do
    if echo $(readlink -f "$_device")|egrep -q "usb"; then
        _disk=$(echo "$_device" | cut -f4 -d/)
        REMOVABLE_DRIVES="$REMOVABLE_DRIVES $_disk"
    fi
done
echo Removable drives found: "$REMOVABLE_DRIVES"

1
+1. Einfaches und präzises Skript, um die Aufgabe automatisch zu erledigen.
Leesei

2

Schauen Sie sich den Baum darunter an /dev/disk. Es listet Festplatten und deren Partitionen (Dateisysteme) nach verschiedenen Schemata auf.


2

/ var / log / message, wenn dmesg die Informationen nicht mehr hat.


0

Wenn Sie das USB-Laufwerk trennen und wieder anschließen, sollte es über den Kernel initialisiert werden (dmesg).


0

Basierend auf der hervorragenden Antwort von stormlash und der Abhängigkeit von udev, um den Gerätebaum "/ dev / disk / by-id / usb" zu füllen, können Sie ein Prädikat (Bash) wie folgt definieren:

is_usb_device() {
    local device_path=$1        # such as /dev/sdc
    for devlink in /dev/disk/by-id/usb*; do
        if [ "$(readlink -f "$devlink")" = "$device_path" ]; then
            return 0
        fi
    done
    return 1
}

Und dann benutze es:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.