Come faccio a capire quale / dev è un'unità flash USB?


160

Voglio montare un'unità USB, due di esse 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 /devsia la posizione giusta. C'è un modo di guardare attraverso dmesgo /proco da qualche altra parte per scoprire quale nodo del dispositivo è un drive USB.

(Sto usando ArchLinux se questo aiuta ... /dev/sdaè il primo disco rigido, /dev/sr0è un disco DVD, ecc.)

modifica: l'unità USB è collegata a un hub USB. Ho guardato attraverso dmesge dice che l'hub era collegato e ha scansionato i 3 dispositivi collegati ad esso. Non riesco ancora a vedere dove sia la mia unità USB.


1
Non lo vedi? Forse aspetta un po '. Oppure prova un'altra porta USB. Scopri quali differenze ci sono in "lsusb"
Nick Devereaux,

Potrebbe voler riformulare la domanda in qualche modo - non tutti i dispositivi USB sono dischi, dopo tutto.
Arafangion,

3
Il dfcomando mostra dove era montato
Will Sheppard,

Risposte:


83

Il modo più semplice: guarda l'output di dmesgdopo aver collegato il dispositivo USB. Dovrebbe mostrarti quale /devnodo gli è stato assegnato.


2
dmesgfunziona benissimo, ma ho un caso in cui dmesgnon mostra il /devnodo: [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcdcosa significa? Come posso montare questo dispositivo? Il dispositivo si presenta su lsusb...
modulitos

1
In realtà, l'ho capito. C'è stato un aggiornamento del kernel dal mio ultimo riavvio che ha causato questo problema. Dopo un riavvio, il mio usb si monta bene. Spero che questo aiuti qualcuno!
Modulitos,

54

Finché si esegue udev , si può farlo facilmente facendo riferimento / dev / disk / by-id / USB- ManufacturerName _ numero di serie . Questi appaiono come collegamenti simbolici ai quali puoi fare direttamente riferimento nel tuo fstab, o che puoi dereferenziare usando readlink -e per determinare il dispositivo a blocchi associato.

Ecco un esempio del mondo reale. Sulla mia macchina, ho 3 hard disk USB collegati. Questi vengono visualizzati in / dev / disk / by-id con numeri di serie univoci (sebbene condividano una stringa del produttore comune). Ho creato collegamenti simbolici a ciascuna di queste tre voci univoche e ora posso determinare rapidamente quale unità è (e quale dispositivo è associato a ciascuna unità) eseguendo readlink -e linkname . Ad esempio, l'esecuzione di readlink -e / root / disk2 sul mio computer attualmente visualizza " / dev / sde ", mentre readlink -e / root / disk3 non produce alcun output.


15
Breve e semplice:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
Felipe Alcacibar,

54

Tutti questi sono buoni suggerimenti, ma il metodo più rapido e meno dettagliato è semplicemente digitare quanto segue nel terminale:

mount

che fornirà un elenco di tutti i dispositivi montati (ciò presuppone che l'unità USB sia montata, come nel caso delle moderne distribuzioni Linux).


5
No, non monta magicamente il tuo dispositivo. Devi specificarlo con mount /dev/id /mount/point, quindi non funziona.
polimero

9
La mia risposta risponde alla domanda dell'utente "Esiste un modo per esaminare dmesg o / proc o da qualche altra parte per scoprire quale nodo del dispositivo è un'unità USB", e non intende fornire una guida sulla praticità di montare un'unità su Linux .
AnotherLongUsername

Questa risposta ha risolto una domanda quasi identica per me.
Matthew Brown aka Lord Matt,

1
Penso che il comportamento dell'automount dipenda molto dal tipo di distro.
jiggunjer,

1
dfanche io suppongo.
Alexey,

24

Prova il comando udevinfo -q all -n /dev/sda, dov'è /dev/sdail percorso del tuo disco. Questo ti dà un carico di informazioni sul disco che stai guardando: c'è una voce che ti dice del bus a cui è collegato.

Questo ovviamente ti evita di dover eseguire grep attraverso dmesg e / o log.

Aggiornare

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

Da almeno luglio 2010 [ 1 ] è udevinfo stato sostituito in Debian (e derivato) udevadm infocon un piccolo transitorio con il quale c'erano collegamenti simbolici presto deprecati e rimossi (li puoi ancora trovare nella vecchia macchina non aggiornata). Sempre da [ 1 ] possiamo leggere:

In udev 117, è udevadmstato introdotto udevinfoe altri programmi trasformati in symlink di compatibilità. I symlink sono stati deprecati in udev 128 e rimossi definitivamente in udev 147 .


8
In Debian, udevinfoviene rinominato udevadm.
Steve Pomeroy,

8
Su Ubuntu, il comando sembra essere "udevadm info --query = all -n / dev / sda"
machineghost

Suppongo che ad un certo punto abbiano rinominato il comando - quando ho scritto la risposta (secoli fa) il comando ha funzionato sul sistema Ubuntu da cui l'ho pubblicato;)
Eltariel,

Il comando funziona ancora su Ubuntu,udevadm info --query=all -n /dev/ttyUSB1
Siddharth,

1
udevadm info --query=all -n /dev/ttyUSBanche in Fedora.
slm,

22

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

blkid -c /dev/null

questo offre una panoramica completa su tutti i dispositivi a blocchi anche se non montati


Non tutte le distro hanno questo. Quale stavi usando?
Nuova Alessandria,

Questo non genera nulla sulla mia distribuzione Raspbian.
IgorGanapolsky

Comando non trovato: blkid
IgorGanapolsky,

Nessun output da questo comando su Ubuntu 14.04 64-bit.
gbmhunter,

11

/dev/disk/by-* è il modo più semplice in questo caso, se per qualche motivo vuoi rendere la vita più interessante puoi usare HAL.

Per elencare tutti i dispositivi che usi:

hal-device

Per ottenere una proprietà specifica che usi (questo tornerà /dev/sd*su un dispositivo di archiviazione USB):

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

C'è anche:

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

Se vuoi renderlo ancora più complicato, puoi relativamente facilmente scrivere te stesso un montatore automatico basato su HAL , che può essere abbastanza utile se vuoi automatizzare completamente le cose.

E solo per completezza ci sono anche:

lsusb -v
lshw

Che fornisce alcune informazioni generali su USB e sull'hardware in generale.


2
/ dev / disk / by-id / * usb * è molto utile.
Rob,

/ dev / disk / per etichetta ftw. Grazie :)
Trittico,

10
sudo fdisk -l

E basta analizzare il risultato.


1
Pagina man di fdisk "Se non viene fornito alcun dispositivo, vengono utilizzati quelli menzionati in / proc / partitions (se esiste)." L'esecuzione di fdisk potrebbe non essere un'opzione ... Basandomi su un sistema Debian che so che non è installato, suppongo che alcuni sistemi GPT potrebbero non installare il software non necessario. Tuttavia, il controllo / proc / partitions dovrebbe essere un'opzione.
TOOGAM,

Questa è stata l'unica opzione che ha funzionato bene per me. Mi dispiace se non ha funzionato per te!
Felipe,

8

Uso

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

In base alle regole udev predefinite, questo ti mostrerà la maggior parte dei dispositivi USB e ti mostrerà il link simbolico al loro nome di dispositivo a blocchi sul sistema.

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


6

Per i dispositivi USB puoi semplicemente farlo

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. Script semplice e conciso per eseguire automaticamente l'attività.
leesei,

2

Dai un'occhiata all'albero sotto /dev/disk. Elenca i dischi e le loro partizioni (file system) in base a vari schemi.


2

/ var / log / message se dmesg non ha più le informazioni.


0

Se scollegate l'unità USB e la ricollegate, dovreste vederla inizializzata dal kernel (dmesg)


0

Sulla base dell'ottima risposta di stormlash e con una dipendenza da udev per popolare l'albero dei dispositivi "/ dev / disk / by-id / usb", è possibile 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 usalo:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.