2008-09-16 03:51:40 +0000 2008-09-16 03:51:40 +0000
161
161

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

Ich möchte ein USB-Laufwerk mounten, zwei davon, und ich brauche zwei verschiedene Mount-Punkte. Leider hat der Linux-Kernel eine Namensänderung erfahren, und ich kann nicht herausfinden, welcher /dev-Punkt der richtige ist. Gibt es eine Möglichkeit, durch dmesg oder /proc oder irgendwo anders zu schauen, um herauszufinden, welcher Geräteknoten ein USB-Laufwerk ist.

(Ich benutze ArchLinux, falls das irgendwie hilft…/dev/sda ist die erste Festplatte, /dev/sr0 ist ein DVD-Laufwerk, usw.)

edit: Das USB-Laufwerk ist an einen USB-Hub angeschlossen. Ich habe dmesg durchgesehen und es sagt, dass der Hub angeschlossen war und nach den 3 daran angeschlossenen Geräten gescannt wurde. Ich kann aber immer noch nicht sehen, wo mein USB-Laufwerk ist.

Antworten (11)

83
83
83
2008-09-16 03:53:52 +0000

Der einfachste Weg: Schauen Sie sich die Ausgabe von dmesg an, nachdem Sie das USB-Gerät angeschlossen haben. Er sollte Ihnen zeigen, welcher /dev-Knoten ihm zugewiesen wurde.

54
54
54
2012-09-04 18:51:43 +0000

All dies sind gute Vorschläge, aber die schnellste und am wenigsten wortreiche Methode ist es, einfach Folgendes in das Terminal einzugeben:

mount

, was eine Liste aller eingebundenen Geräte ergibt (dies setzt voraus, dass das USB-Laufwerk eingebunden ist, was bei modernen Linux-Distributionen normalerweise der Fall ist).

25
25
25
2008-09-16 03:59:28 +0000

Versuchen Sie den Befehl udevinfo -q all -n /dev/sda, wobei /dev/sda der Pfad zu Ihrer Festplatte ist. Dies gibt Ihnen eine Fülle von Informationen über die Platte, die Sie gerade betrachten - es gibt einen Eintrag, der Ihnen Auskunft über den Bus gibt, mit dem sie verbunden ist.

Dies erspart Ihnen natürlich, durch dmesg und/oder Logs zu blättern.

Update

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

Mindestens ab Jul 2010 [ 1 ] wurde udevinfo in Debian (und abgeleitet) durch udevadm info mit einem kleinen Transient ersetzt, mit dem es Symlinks gab, die bald veraltet waren und entfernt wurden (Sie können sie immer noch in der alten, nicht aktualisierten Maschine finden). Immer aus [ 1 ] können wir lesen:

In udev 117 wurde udevadm eingeführt und udevinfo und andere Programme wurden zu Kompatibilitäts-Symlinks. Die Symlinks wurden in udev 128 veraltet und in udev 147 endgültig entfernt.

23
23
23
2013-01-02 08:37:01 +0000

die einfachste Methode, um zu sehen, was vor sich geht, ist einfach zu tippen (als root natürlich):

blkid -c /dev/null

dies gibt Ihnen einen vollständigen Überblick über alle Blockgeräte, auch wenn sie nicht eingehängt sind

11
11
11
2009-09-24 22:36:40 +0000

/dev/disk/by-* ist in diesem Fall der einfachste Weg, wenn Sie aus irgendeinem Grund Ihr Leben interessanter gestalten wollen, können Sie HAL verwenden.

Um alle Geräte aufzulisten, die Sie benutzen:

hal-device

Um eine bestimmte Eigenschaft zu erhalten, die Sie benutzen (das ergibt /dev/sd* auf einem USB-Speichergerät):

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 wollen, können Sie sich relativ einfach einen HAL-basierten Auto-Mounter schreiben, was ziemlich praktisch sein kann, wenn Sie Dinge vollständig automatisieren wollen.

Und nur der Vollständigkeit halber gibt es noch:

lsusb -v
lshw

Der einige allgemeine Informationen über USB und Ihre Hardware im Allgemeinen liefert.

10
10
10
2015-11-10 02:47:28 +0000
sudo fdisk -l

Und analysieren Sie einfach das Ergebnis.

8
8
8
2008-09-16 04:18:39 +0000

Verwenden Sie

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

Unter den Standard udev-Regeln zeigt Ihnen das die meisten usb-Geräte an und zeigt Ihnen den Symlink zu ihrem Block-Device-Namen auf dem System an.

Wenn das nicht funktioniert, schauen Sie sich /dev/disk/by-id/ direkt an.

7
7
7
2012-08-24 17:37:56 +0000

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

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"
2
2
2
2008-09-16 03:55:24 +0000

Schauen Sie sich den Baum unter /dev/disk an. Er listet Platten und ihre Partitionen (Dateisysteme) nach verschiedenen Schemata auf.

0
0
0
2008-09-16 03:53:27 +0000

Wenn Sie das USB-Laufwerk ausstecken und wieder einstecken, sollten Sie sehen, wie es sich vom Kernel aus initialisiert (dmesg)

0
0
0
2018-11-29 19:02:45 +0000

Basierend auf der ausgezeichneten Antwort von stormlash und mit einer Abhängigkeit von udev, um den “/dev/disk/by-id/usb”-Gerätebaum zu füllen, könnten 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 es dann verwenden:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi