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

Come faccio a capire quale /dev è una chiavetta USB?

Voglio montare una chiavetta USB, due di queste e ho bisogno di due punti di montaggio diversi. Sfortunatamente, il kernel Linux ha subito un cambio di nome e non riesco a capire quale posizione /dev sia quella giusta. C'è un modo per cercare attraverso dmesg o /proc o da qualche altra parte per scoprire quale nodo del dispositivo è un drive USB.

(sto usando ArchLinux se questo aiuta…/dev/sda è il primo hard disk, /dev/sr0 è un dvd drive, etc.)

edit: Il drive USB è collegato ad un hub USB. Ho guardato attraverso dmesg e dice che l'hub è stato collegato e ha eseguito la scansione per i 3 dispositivi ad esso collegati. Non riesco ancora a vedere dove si trova la mia chiavetta USB.

Risposte (11)

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

Il modo più semplice: Guardate l'uscita di dmesg dopo aver collegato il dispositivo USB. Dovrebbe mostrarvi quale nodo /dev gli è stato assegnato.

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

Tutti questi sono buoni suggerimenti, ma il metodo più veloce e meno verboso è quello di digitare semplicemente quanto segue nel terminale:

mount

che darà un elenco di tutti i dispositivi montati (questo presuppone che il drive USB sia montato, che di solito è il caso delle moderne distro Linux).

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

Provate il comando udevinfo -q all -n /dev/sda, dove /dev/sda è il percorso del vostro disco. Questo vi dà un carico di informazioni sul disco che state guardando - c'è una voce che vi dice del bus a cui è collegato.

Questo naturalmente vi risparmia di dover passare attraverso dmesg e/o log.

Aggiornamento

udevadm info --query=all -n /dev/sda
``` &001 


Almeno da luglio 2010 [ [1 ](https://lists.debian.org/debian-user/2010/07/msg01134.html)] `udevinfo` è stato sostituito in Debian (e derivati) da `udevadm info` con un piccolo transitorio con il quale sono stati presto deprecati e rimossi i link simbolici (si possono ancora trovare nella vecchia macchina non aggiornata). Sempre da [ [1 ](https://lists.debian.org/debian-user/2010/07/msg01134.html)] possiamo leggere: 

> In udev 117, fu introdotto `udevadm` e `udevinfo` e altri programmi si trasformarono in symlinks di compatibilità. I symlink sono stati deprecati in _udev 128_ e rimossi definitivamente in _udev 147_.
23
23
23
2013-01-02 08:37:01 +0000

il metodo più semplice per vedere cosa sta succedendo è semplicemente digitando (come root naturalmente):

blkid -c /dev/null
``` &001 


questo vi dà una panoramica completa su tutti i dispositivi a blocchi anche se non montati
11
11
11
2009-09-24 22:36:40 +0000

/dev/disk/by-* è il modo più semplice in questo caso, se per qualche motivo si vuole rendere la vita più interessante si può utilizzare HAL.

Per elencare tutti i dispositivi che usate:

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

Per ottenere una proprietà specifica che usate (questo restituirà /dev/sd* su un dispositivo di memorizzazione USB):

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

C'è anche:

lsusb -v
lshw
``` &001 


Se volete renderla ancora più complicata potete scrivere con relativa facilità un [ HAL based auto mounter ](http://redclay.altervista.org/wiki/doku.php?id=projects%3Ahal-automount), che può essere abbastanza pratico se volete automatizzare le cose in modo completo. 


E solo per completezza ci sono anche: 


&001 



che fornisce alcune informazioni generali sull'USB e sul vostro hardware in generale.
10
10
10
2015-11-10 02:47:28 +0000
sudo fdisk -l

E basta analizzare il risultato.

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

Usa

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

Sotto le regole predefinite udev, che vi mostrerà la maggior parte dei dispositivi usb e vi mostrerà il collegamento simbolico al loro nome a blocchi sul sistema.

Se questo non funziona, guardate direttamente /dev/disk/by-id/.

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

Per i dispositivi USB si può semplicemente fare

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

Date un'occhiata all'albero sotto /dev/disk. Elenca i dischi e le loro partizioni (file system) secondo vari schemi.

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

Se si scollega il drive USB e lo si ricollega, si dovrebbe vederlo inizializzare dal kernel (dmesg)

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

Basandosi sull'eccellente risposta di stormlash e con una dipendenza da udev per popolare l'albero del dispositivo “/dev/disk/by-id/usb”, si potrebbe definire un predicato (Bash) come segue:

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
}

E poi usarlo:

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