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

Hoe kom ik erachter welke /dev een USB-stick is?

Ik wil een USB-stick monteren, twee ervan en ik heb twee verschillende bevestigingspunten nodig. Helaas heeft de Linux kernel een naamsverandering ondergaan en kan ik er niet achter komen welke /dev locatie de juiste is. Is er een manier om door dmesg of /proc te kijken of ergens anders om uit te vinden welke device node een USB drive is.

(ik gebruik ArchLinux als dat helpt…/dev/sda is de eerste harde schijf, /dev/sr0 is een dvd drive, etc.)

edit: De USB drive is aangesloten op een USB hub. Ik heb door dmesg gekeken en er staat dat de hub is aangesloten en het heeft gescand naar de 3 apparaten die erop zijn aangesloten. Ik kan echter nog steeds niet zien waar mijn USB-stick is.

Antwoorden (11)

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

Makkelijkste manier: Kijk naar de uitgang van dmesg na het aansluiten van het USB-apparaat. Het zou u moeten laten zien welke /dev node eraan is toegewezen.

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

Dit zijn allemaal goede suggesties, maar de snelste en minst verbose methode is om gewoon het volgende in de terminal te typen:

mount

die een lijst geeft van alle gemonteerde apparaten (dit gaat ervan uit dat de USB-stick is gemonteerd, wat meestal het geval is met moderne Linux distro’s).

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

Probeer het commando udevinfo -q all -n /dev/sda, waarbij /dev/sda het pad naar uw schijf is. Dit geeft je een bootlading aan informatie over de schijf waar je naar kijkt - er is een vermelding die je vertelt over de bus waarmee het verbonden is.

Dit bespaart je natuurlijk de moeite om door dmesg en/of logs te grijpen.

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

Vanaf tenminste juli 2010 [ 1 ] werd udevinfo in Debian vervangen (en afgeleid) door udevadm info met een beetje vergankelijkheid waarmee er al snel symfonieën werden afgeschreven en verwijderd (je kan ze nog steeds vinden in oude niet geüpdatete machine). Altijd vanaf [ 1 ] kunnen we lezen:

In udev 117 werd udevadm geïntroduceerd en udevinfo en andere programma’s werden omgezet in compatibiliteitssymlinks. De symlinks werden afgeschreven in udev 128 en voorgoed verwijderd in udev 147.

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

de eenvoudigste methode om te zien wat er aan de hand is, is gewoon typen (als root natuurlijk):

blkid -c /dev/null

dit geeft je een compleet overzicht over alle blokapparaten, zelfs als ze niet gemonteerd zijn

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

/dev/disk/by-* is in dit geval de eenvoudigste manier, als u om een of andere reden het leven interessanter wilt maken kunt u HAL gebruiken.

Om alle apparaten die je gebruikt op te sommen:

hal-device

Om een specifieke eigenschap te krijgen die je gebruikt (dit geeft /dev/sd* terug op een USB-opslagapparaat):

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

Er is ook:

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

Als je het nog ingewikkelder wilt maken kun je relatief eenvoudig zelf een HAL gebaseerde auto mounter schrijven, wat heel handig kan zijn als je de dingen volledig wilt automatiseren.

En voor de volledigheid zijn er ook nog:

lsusb -v
lshw

die wat algemene informatie geeft over USB en uw hardware in het algemeen.

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

En analyseer gewoon het resultaat.

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

Gebruik

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

Onder de standaard udev regels, zal dat de meeste usb apparaten laten zien en het zal je de symlink naar hun block-device naam op het systeem laten zien.

Als dat niet werkt, kijk dan direct naar /dev/disk/by-id/.

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

Voor USB-apparaten kunt u eenvoudig

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

Kijk eens naar de boom onder /dev/disk. Het geeft een overzicht van de schijven en hun partities (bestandssystemen) volgens verschillende schema’s.

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

Als u de USB-stick loskoppelt en weer aansluit, zou u het moeten zien initialiseren vanaf de kernel (dmesg)

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

Gebaseerd op het uitstekende antwoord van stormlash en met een afhankelijkheid van udev om de “/dev/disk/by-id/usb” device tree te bevolken, zou je een predikaat (Bash) als volgt kunnen definiëren:

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
}

En dan gebruiken:

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