Se collego un dispositivo fisico, come posso sapere quale file del dispositivo appartiene?


13

Supponiamo di collegare diverse unità USB che non vengono montate automaticamente. Come posso sapere quale file di dispositivo appartiene a quale dispositivo fisico, quindi posso montarlo per esempio?

Sto usando Mac OS X ma preferisco una risposta che funzioni su tutti i sistemi Unix (o almeno i più popolari). Ho avuto questo problema con Linux in passato.


Su Linux, la risposta tende a coinvolgere udev. Quindi prova a cercare gli equivalenti udev su OSX ; questo porta in particolare alla funzionalità Alternativa a udev su OSX e OSX USB Device Interface Guide .
Gilles 'SO- smetti di essere malvagio' il

Su MacOSX il più semplice è identificare i volumi con le loro etichette. Ma Gilles ha ragione sulla soluzione perfetta.
Peter - Ripristina Monica il

Risposte:


14

Utilizzando udev:

È possibile ottenere utili informazioni di interrogazione udev(sui sistemi che la utilizzano - quasi tutti i Linux di tipo desktop di sicuro). Ad esempio, se si desidera sapere a quale unità collegata è associata /dev/sdb, è possibile utilizzare:

udevadm info --query=property --name=sdb

Ti mostrerà un elenco di proprietà di quel dispositivo, incluso il seriale (ID_SERIAL_SHORT). Avendo queste informazioni, puoi vedere l'output dilsusb -v e scoprire cose come il produttore e il nome del prodotto.

Un percorso più breve per farlo sarebbe

udevadm info --query=property --name=sdb | grep "\(MODEL_ID\|VENDOR_ID\)"

e vedere la riga con corrispondenza $ID_VENDOR_ID:$ID_MODEL_IDnell'output molto più breve dilsusb .

Un'altra opzione utile è udevadm monitor. Usalo se desideri sapere quale nodo del dispositivo è stato creato al momento di collegare il dispositivo . Quindi prima volta

 udevadm monitor --udev --subsystem-match=block

E quindi collegare il dispositivo. Vedrai i nomi dei dispositivi a blocchi rilevati (dischi / partizioni) stampati alla fine di ogni linea di output.

Un esempio pratico di funzione shell:

Ecco una funzione che puoi inserire nel tuo .bashrc(o.zshrc ):

listusbdisks () 
{
    [["x $ 1" == "xv"]] && shift && local VERBOSE = -v
    per dsk in $ {@ - / dev / sd?}
    fare
        / sbin / udevadm info --query = path --name = "$ dsk" | grep --colour = auto -q usb || Continua
        echo "===== dispositivo $ dsk è:"
        (eval $ (/ sbin / udevadm info --query = proprietà --name = "$ dsk" | grep "\ (MODELLO \ | VENDOR \) _ ID")
          ["$ ID_VENDOR_ID: $ ID_MODEL_ID" == ":"] && echo "Unknown" || \
            lsusb $ VERBOSE -d "$ ID_VENDOR_ID: $ ID_MODEL_ID"
        )
        grep -q "$ dsk" / proc / mounts && echo "----- IL DISPOSITIVO È MONTATO ----"
        eco
    fatto
}

Usalo in questo modo:

  • listusbdisks- riconoscere tutti i /dev/sdxdispositivi;
  • listusbdisks sdboppure listusbdisks /dev/sdboppure listusbdisks sdb sdc- per ottenere informazioni solo su determinati dispositivi;
  • listusbdisks -v [optional devices as above] - per mostrare output dettagliati di lsusb

[Modifica]: aggiunte alcune funzionalità come interrogare molti dispositivi, controllare i montaggi e controllare la verbosità di lsusb.


Abbastanza vero per quanto va, ma non tutti i sistemi usano udev.
Caleb,

@Caleb True ... In realtà, lsusbè anche un programma opzionale. Ma entrambi sono estremamente comuni.
rozcietrzewiacz,

@rozcietrzewiacz La domanda riguarda principalmente OSX, ma udev è intrinsecamente specifico per Linux.
Gilles 'SO- smetti di essere malvagio' il

@Gil Bene, vero. Non ho esperienza con OSX, quindi ho appena aggiornato la mia risposta per non essere fuorviante.
rozcietrzewiacz,

Quello che generalmente faccio in tal caso è, collego il dispositivo e lo eseguo immediatamente dmesg. Ma questo non sarà utile se il dispositivo è già collegato e se ci sono più dispositivi collegati dopo il primo. :)
Abhishek A

3

Non esiste una risposta universale. Su Linux, il modo più semplice è probabilmente quello di avviare l'utility del disco gnome e mostrerà tutti i dischi rilevati, siano essi montati o meno. Dalla riga di comando, è possibile consultare l'output di blkido udevadm info --export-db.


3

In Mac OS X puoi provare a usare diskutil list.


1

Rispetto a tutti gli Unix, non credo sia fattibile.

I soliti bus esterni oggi non usano uno schema di numerazione fisso per le loro porte, come ha fatto IDE. Pertanto, le uniche origini dati rimanenti per il mapping necessario sono i nomi dei produttori delle unità, i loro numeri di serie o gli UID delle partizioni.

I nomi dei produttori non sono necessariamente univoci su una determinata macchina (supponiamo che tu colleghi due unità esterne della stessa serie: si identificheranno in modo identico). I numeri di serie non sono "visibili dall'esterno", come lo sono gli UID di partizione.

Quindi, l'unica soluzione universale che mi viene in mente è quella di etichettare le unità fisiche con il numero seriale e utilizzare il comando udevadm fornito nella risposta di rozcietrzewiacz, se UDEV è disponibile.

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.