Si je connecte un appareil physique, comment savoir quel fichier d'appareil lui appartient?

13

Disons que je branche plusieurs clés USB qui ne sont pas montées automatiquement. Comment puis-je savoir quel fichier d'appareil appartient à quel appareil physique, donc je peux le monter par exemple?

J'utilise Mac OS X mais j'aime plutôt une réponse qui fonctionne sur tous les systèmes Unix (ou du moins les plus populaires). J'ai eu ce problème avec Linux dans le passé.

à droite
la source
Sous Linux, la réponse aurait tendance à impliquer udev. Vous essayez donc de regarder les équivalents udev sur OSX ; cela conduit en particulier à la fonctionnalité Alternative à udev sur OSX et OSX USB Device Interface Guide .
Gilles 'SO- arrête d'être méchant'
Sur MacOSX, le plus simple est d'identifier les volumes par leurs étiquettes. Mais Gilles a raison sur la solution parfaite.
peterh

Réponses:

14

Utiliser udev:

Vous pouvez obtenir des informations utiles udev(sur les systèmes qui l'utilisent - presque tous les Linux de type bureau à coup sûr). Par exemple, si vous voulez savoir à quel lecteur connecté est associé /dev/sdb, vous pouvez utiliser:

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

Il vous montrera une liste des propriétés de cet appareil, y compris la série (ID_SERIAL_SHORT). Ayant ces informations, vous pouvez regarder la sortie de lsusb -vet découvrir des choses comme le fabricant et le nom du produit.

Un chemin plus court pour ce faire serait

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

et voir la ligne avec correspondance $ID_VENDOR_ID:$ID_MODEL_IDdans la sortie beaucoup plus courte de lsusb.

Une autre option utile est udevadm monitor. Utilisez-le si vous souhaitez savoir quel nœud de périphérique est créé au moment de connecter le périphérique . Donc, première course

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

Et puis connectez l'appareil. Vous verrez les noms des périphériques des blocs détectés (disques / partitions) imprimés à la fin de chaque ligne de sortie.

Un exemple pratique de fonction shell:

Voici une fonction que vous pouvez mettre dans votre .bashrc(ou .zshrc):

listusbdisks () 
{
    [["x $ 1" == "xv"]] && shift && local VERBOSE = -v
    pour dsk dans $ {@ - / dev / sd?}
    faire
        / sbin / udevadm info --query = path --name = "$ dsk" | grep --colour = auto -q usb || continuer
        echo "===== device $ dsk is:"
        (eval $ (/ sbin / udevadm info --query = property --name = "$ dsk" | grep "\ (MODEL \ | VENDOR \) _ ID")
          ["$ ID_VENDOR_ID: $ ID_MODEL_ID" == ":"] && écho "Inconnu" || \
            lsusb $ VERBOSE -d "$ ID_VENDOR_ID: $ ID_MODEL_ID"
        )
        grep -q "$ dsk" / proc / mounts && echo "----- LE DISPOSITIF EST MONTÉ ----"
        écho
    terminé
}

Utilisez-le comme ceci:

  • listusbdisks- reconnaître tous les /dev/sdxappareils;
  • listusbdisks sdbou listusbdisks /dev/sdbou listusbdisks sdb sdc- pour obtenir des informations sur certains appareils uniquement;
  • listusbdisks -v [optional devices as above] - pour afficher des sorties verbeuses de lsusb

[Modifier]: Ajout de certaines fonctionnalités comme interroger de nombreux appareils, vérifier les montages et contrôler la verbosité de lsusb.

rozcietrzewiacz
la source
C'est vrai autant que cela va, mais pas tous les systèmes utilisent udev.
Caleb
@Caleb True ... En fait, lsusbc'est aussi un programme optionnel. Mais les deux sont extrêmement courants.
rozcietrzewiacz
@rozcietrzewiacz La question concerne principalement OSX, mais udev est intrinsèquement spécifique à Linux.
Gilles 'SO- arrête d'être méchant'
@Gil Eh bien, c'est vrai. Je n'ai aucune expérience avec OSX, donc je viens de mettre à jour ma réponse pour ne pas être trompeuse.
rozcietrzewiacz
Ce que je fais généralement dans ce cas, c'est que je branche l'appareil et que je cours immédiatement dmesg. Mais cela ne sera pas utile si l'appareil est déjà branché et s'il y a plus d'appareils connectés après le premier. :)
Abhishek A
3

Il n'y a pas de réponse universelle. Sous Linux, le moyen le plus simple consiste probablement à simplement lancer l'utilitaire de disque gnome et il affichera tous les disques détectés, qu'ils soient montés ou non. Depuis la ligne de commande, vous pouvez consulter la sortie de blkidou udevadm info --export-db.

psusi
la source
3

Sous Mac OS X, vous pouvez essayer d'utiliser diskutil list.

x1a0
la source
1

En ce qui concerne tous les Unix, je ne pense pas que ce soit possible.

Les bus externes habituels n'utilisent pas aujourd'hui un schéma de numérotation fixe pour leurs ports, comme l'IDE. Ainsi, les seules sources de données restantes pour le mappage dont vous avez besoin sont les noms de fabricants des lecteurs, leurs numéros de série ou les UID des partitions.

Les noms de fabricants ne sont pas nécessairement uniques sur une machine donnée (supposons que vous connectez deux disques externes de la même série - ils s'identifieront de manière identique). Les numéros de série ne sont pas "visibles de l'extérieur", comme le sont les UID de partition.

Donc, la seule solution universelle à laquelle je peux penser est d'étiqueter les disques physiques avec le numéro de série et d'utiliser la commande udevadm donnée dans la réponse de rozcietrzewiacz, si UDEV est disponible.

jstarek
la source