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.
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é.
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).
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.
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 etudevinfo
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.
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
/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.
Sudo fdisk -l
Et juste analyser le résultat.
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/
.
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"
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.
/ var/log/message si dmesg n'a plus les informations.
Si vous débranchez le lecteur USB et que vous le rebranchez, vous devriez le voir s’initialiser à partir du noyau (dmesg).
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