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.

Rudolf Olah
la source
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é.

zigdon
la source
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.


la source
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).

AnotherLongUsername
la source
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 .

Eltariel
la source
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

toh
la source
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.

Grumbel
la source
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.

Felipe
la source
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.

DJ Capelis
la source
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"
lemsx1
la source
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.

Ted Percival
la source
2

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


la source
0

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

Hurleur
la source
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
utilisateur30747
la source