web-dev-qa-db-fra.com

Comment savoir quel/dev est un lecteur flash USB?

Je souhaite monter une clé USB, deux d’entre elles et deux points de montage différents. Malheureusement, le noyau Linux a subi un changement de nom et je ne sais pas quel emplacement /dev est le bon. Existe-t-il un moyen de rechercher dans dmesg ou /proc ou ailleurs pour savoir quel nœud de périphérique est un lecteur USB?.

(J'utilise ArchLinux si cela aide ... /dev/sda est le premier disque dur, /dev/sr0 est un lecteur de DVD, etc.)

edit: le lecteur USB est connecté à un concentrateur USB. J'ai parcouru dmesg et il est indiqué que le concentrateur était connecté et qu'il a analysé les 3 périphériques connectés. Je ne vois toujours pas où se trouve ma clé USB.

157
Rudolf Olah

Manière la plus simple: regardez la sortie de dmesg après avoir connecté le périphérique USB. Il devrait vous montrer quel noeud /dev lui a été attribué.

82
zigdon

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

53

Tant que vous exécutez udev , vous pouvez le faire facilement en faisant référence à/dev/disk/by-id/usb -nomfichier_numéro de série. Ils 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. Ceux-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 nom de lien. Par exemple, l'exécution de readlink -e/root/disk2 sur ma machine affiche actuellement "/dev/sde ", tandis que readlink -e/root/disk3 produit aucune sortie que ce soit.

53
stormlash

Essayez la commande udevinfo -q all -n /dev/sda, où /dev/sda est le chemin d'accès à votre disque. Cela vous donne une mine 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 

À partir de juillet 2010 au moins [ 1 ] udevinfo a été substitué dans Debian (et dérivé) par udevadm info par un 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, udevadm a été introduit et udevinfo et 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.

24
Eltariel

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

22
toh

/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 (ceci renverra /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 montage automatique basé sur HAL , ce qui peut s'avérer très pratique si vous souhaitez automatiser complètement les tâches.

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

lsusb -v
lshw

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

11
Grumbel
Sudo fdisk -l

Et juste analyser le résultat.

10
Felipe

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 directement /dev/disk/by-id/.

8
DJ Capelis

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"
6
lemsx1

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

2
Ted Percival

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

2
Allan Wind

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

0
Howler

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
0
user30747