Comment savoir quel / dev est un lecteur flash USB?


160

Je souhaite monter une clé USB, deux d’entre elles et deux points de montage différents. Malheureusement, le noyau Linux a changé de nom et je ne peux pas déterminer quel /devemplacement est le bon. Existe-t-il un moyen de regarder à travers dmesgou /procou ailleurs pour savoir quel nœud de périphérique est un lecteur USB?

(J'utilise ArchLinux si cela aide… /dev/sdale premier disque dur, /dev/sr0un lecteur de DVD, etc.)

edit: Le lecteur USB est connecté à un concentrateur USB. J'ai regardé à travers dmesget il est dit que le hub était connecté et qu'il a scanné les 3 périphériques connectés. Je ne vois toujours pas où se trouve ma clé USB.


1
Vous ne pouvez pas le voir? Peut-être attendre un peu. Ou essayez un autre port USB. Voyez quelles différences il y a dans 'lsusb'
Nick Devereaux

Peut-être voudrez-vous reformuler la question un peu - tous les périphériques USB ne sont pas des disques, après tout.
Arafangion

3
La dfcommande vous montre où il a été monté
Will Sheppard Le

Réponses:


83

Manière la plus simple: regardez la sortie dmesgaprès avoir connecté le périphérique USB. Il devrait vous montrer quel /devnœud lui a été attribué.


2
dmesgfonctionne très bien, mais j'ai un cas où dmesgne montre pas le /devnoeud: [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcdQu'est-ce que cela signifie? Comment puis-je monter cet appareil? L'appareil apparaît sur lsusb...
modulitos

1
En fait, je l'ai compris. Il y a eu une mise à jour du noyau depuis mon dernier redémarrage qui était à l'origine de ce problème. Après un redémarrage, mon usb monte très bien. Espérons que cela aide quelqu'un!
Modulitos

54

Tant que vous utilisez udev , vous pouvez le faire facilement en faisant référence / dev / disque / par id / usb- ManufacturerName _ serialnumber . Ceux-ci apparaissent sous forme de liens symboliques que vous pouvez référencer directement dans votre fstab ou que vous pouvez déréférencer en utilisant readlink -e pour déterminer le périphérique de bloc associé.

Voici un exemple du monde réel. Sur ma machine, j'ai 3 disques durs USB connectés. Celles-ci apparaissent dans / dev / disk / by-id avec des numéros de série uniques (bien qu'ils partagent une chaîne de fabricant commune). J'ai créé des liens symboliques vers chacune de ces trois entrées uniques et je peux maintenant déterminer rapidement quel lecteur est lequel (et quel périphérique est associé à chaque lecteur) en exécutant readlink -e linkname . Par exemple, l'exécution de readlink -e / root / disk2 sur ma machine affiche actuellement " / dev / sde ", alors que readlink -e / root / disk3 ne produit aucun résultat.


15
Bref et simple:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
Felipe Alcacibar

54

Toutes ces suggestions sont bonnes, mais la méthode la plus rapide et la moins explicite consiste à taper simplement ce qui suit dans le terminal:

mount

qui donnera une liste de tous les périphériques montés (cela suppose que le lecteur USB est monté, ce qui est généralement le cas avec les distributions Linux modernes).


5
Non, il ne monte pas comme par magie votre appareil. Vous devez le spécifier avec mount /dev/id /mount/point, pour que cela ne fonctionne pas.
polym

9
Ma réponse répond à la question de l'utilisateur: "Existe-t-il un moyen de rechercher dans dmesg ou / proc ou ailleurs afin de déterminer quel nœud de périphérique est un lecteur USB?" .
AnotherLongUsername

Cette réponse a résolu une question presque identique pour moi.
Matthew Brown alias Lord Matt

1
Je pense que le comportement du montage automatique dépend beaucoup du type de distribution.
Jiggunjer

1
dfaussi, je suppose.
Alexey

24

Essayez la commande udevinfo -q all -n /dev/sda, où /dev/sdaest le chemin d'accès à votre disque. Cela vous donne une foule d'informations sur le disque que vous regardez - une entrée vous informe sur le bus auquel il est connecté.

Ceci vous évite bien sûr de devoir grep via dmesg et / ou des logs.

Mise à jour

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

Depuis au moins juillet 2010 [ 1 ] a udevinfo été substitué dans Debian (et dérivé) par udevadm infoun petit transitoire avec lequel des liens symboliques étaient bientôt obsolètes et supprimés (vous pouvez toujours les trouver dans une ancienne machine non mise à jour). Toujours de [ 1 ] on peut lire:

Dans udev 117, a udevadmété introduit udevinfoet d’autres programmes sont devenus des liens symboliques de compatibilité. Les liens symboliques étaient obsolètes dans udev 128 et supprimés définitivement dans udev 147 .


8
Dans Debian, udevinfoest renommé udevadm.
Steve Pomeroy

8
Sur Ubuntu, la commande semble être "udevadm info --query = all -n / dev / sda"
machineghost

Je suppose qu'ils ont renommé la commande à un moment donné - lorsque j'ai écrit la réponse (il y a longtemps), la commande a fonctionné sur le système Ubuntu à partir
duquel

Le commandement fonctionne toujours à Ubuntu,udevadm info --query=all -n /dev/ttyUSB1
Siddharth

1
udevadm info --query=all -n /dev/ttyUSBdans Fedora aussi.
slm

22

la méthode la plus simple pour voir ce qui se passe est simplement de taper (en tant que root bien sûr):

blkid -c /dev/null

cela vous donne un aperçu complet de tous les dispositifs de blocage, même s'ils ne sont pas montés


Toutes les distributions n'ont pas cela. Que utilisiez-vous?
New Alexandria

Cela ne génère rien sur ma distribution Raspbian.
IgorGanapolsky

Commande non trouvée: blkid
IgorGanapolsky le

Aucune sortie de cette commande sur Ubuntu 14.04 64 bits.
gbmhunter

11

/dev/disk/by-* est le moyen le plus simple dans ce cas, si pour une raison quelconque vous voulez rendre la vie plus intéressante, vous pouvez utiliser HAL.

Pour répertorier tous les appareils que vous utilisez:

hal-device

Pour obtenir une propriété spécifique que vous utilisez (elle sera renvoyée /dev/sd*sur un périphérique de stockage USB):

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

Il y a aussi:

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

Si vous voulez compliquer encore les choses, vous pouvez relativement facilement écrire vous-même un monteur automatique basé sur HAL , ce qui peut s'avérer très pratique si vous souhaitez automatiser complètement les choses.

Et juste pour être complet, il y a aussi:

lsusb -v
lshw

Ce qui fournit des informations générales sur l'USB et votre matériel en général.


2
/ dev / disk / by-id / * usb * est très utile.
Rob

/ dev / disk / by-label ftw. Merci :)
Triptyque

10
sudo fdisk -l

Et juste analyser le résultat.


1
Page de manuel de fdisk "Si aucun périphérique n'est indiqué, ceux mentionnés dans / proc / partitions (le cas échéant) sont utilisés." Exécuter fdisk n’est peut-être pas une option ... Basé sur un système Debian qui, à ma connaissance, n’est pas installé, j’imagine que certains systèmes GPT pourraient ne pas installer les logiciels inutiles. Néanmoins, vérifier / proc / partitions devrait être une option.
TOOGAM

C'était la seule option qui a bien fonctionné pour moi. Je suis désolé si cela n'a pas fonctionné pour vous!
Felipe

8

Utilisation

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

Selon les règles par défaut d'udev, cela vous montrera la plupart des périphériques USB et le lien symbolique vers leur nom de périphérique en mode bloc sur le système.

Si cela ne fonctionne pas, regardez /dev/disk/by-id/directement.


6

Pour les périphériques USB, vous pouvez simplement faire

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 simple et concis pour faire la tâche automatiquement.
leesei

2

Regardez l'arbre sous /dev/disk. Il répertorie les disques et leurs partitions (systèmes de fichiers) selon différents schémas.


2

/ var / log / message si dmesg n'a plus les informations.


0

Si vous débranchez le lecteur USB et que vous le rebranchez, vous devriez le voir s’initialiser à partir du noyau (dmesg).


0

Basé sur l'excellente réponse de stormlash et avec une dépendance sur udev pour peupler l'arborescence de périphérique "/ dev / disk / by-id / usb", vous pouvez définir un prédicat (Bash) comme suit:

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
}

Et puis l'utiliser:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.