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.