Comment puis-je déterminer quel / dev est un lecteur flash USB?

Je veux monter un lecteur USB, deux d'entre eux et j'ai besoin de deux points de montage différents. Malheureusement, le noyau Linux a subi un changement de nom et je ne peux pas comprendre quelle emplacement /dev est la bonne. Existe-t-il un moyen de regarder à travers 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 regardé à travers dmesg et il dit que le concentrateur était connecté et qu'il a parcouru les 3 périphériques connectés. Je ne vois toujours pas mon lecteur USB.

Le moyen le plus simple: regardez la sortie de dmesg après avoir connecté le périphérique USB. Il devrait vous montrer quel /dev nœud /dev .

Tant que vous utilisez udev , vous pouvez le faire facilement en référençant / dev / disk / by-id / usb- manufacturername _ serialnumber . Ceux-ci apparaissent sous forme de liens symboliques que vous pouvez soit référencer directement dans votre fstab, soit que vous pouvez désélectionner l'aide de 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 pour 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 ", tandis que readlink -e / root / disk3 ne produit aucun résultat.

Toutes ces suggestions sont bonnes, mais la méthode la plus rapide et la moins détaillée est simplement de taper ce qui suit dans le terminal:

 mount 

Qui donnera une liste de tous les appareils montés (cela suppose que le lecteur USB est monté, ce qui est habituellement le cas avec les distros Linux modernes).

Essayez la commande udevinfo -q all -n /dev/sda , où /dev/sda est le chemin de votre disque. Cela vous donne une cargaison d'informations sur le disque que vous regardez – il y a une entrée qui vous parle du bus auquel il est connecté.

Cela évidemment vous évite d'avoir à grep à travers dmesg et / ou les journaux.

Mettre à jour

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

À partir de au moins Jul 2010 [ 1 ] udevinfo été remplacé par Debian (et dérivé) par udevadm info avec un peu de transitoire avec lequel des liens symboliques ont é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 été introduit et udevinfo et d'autres programmes sont devenus des liens symboliques de compatibilité. Les liens symboliques ont été obsolètes dans udev 128 et supprimés pour de bon dans udev 147 .

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

 blkid -c /dev/null 

Cela vous donne un aperçu complet de tous les périphériques de blocs, même si 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 (cela 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 encore compliquer, vous pouvez vous écrire un monteur automatique basé sur HAL , qui peut être très pratique si vous souhaitez automatiser complètement les choses.

Et pour l'exhaustivité, 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.

 sudo fdisk -l 

Et analysez simplement le résultat.

Utilisation

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

Sous les règles udev par défaut, cela vous montrera la plupart des périphériques USB et il vous montrera le lien symbolique à leur nom de bloc-périphérique sur le système.

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

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

 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" 

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

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

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

Voici ma réponse mise à jour pour Ubuntu 10.04 LTS.
Cela détectera les disques USB externes lors du démarrage à chaque fois.

 # Become root su # Find USB devices. # Search for sd # :/sd dmesg | less # Find out what partitions are currently mounted df -h | less # Find out where the different(ie Windows,NTFS,ext3) volumes are in the partition table fdisk -l | less # # Disk /dev/sda: 160.0 GB, 160041885696 bytes # 255 heads, 63 sectors/track, 19457 cylinders # Units = cylinders of 16065 * 512 = 8225280 bytes # Sector size (logical/physical): 512 bytes / 512 bytes # I/O size (minimum/optimal): 512 bytes / 512 bytes # Disk identifier: 0x00062bd5 # # Device Boot Start End Blocks Id System # /dev/sda1 * 1 19269 154778211 83 Linux # /dev/sda2 19270 19457 1510110 5 Extended # /dev/sda5 19270 19457 1510078+ 82 Linux swap / Solaris # # Disk /dev/sdb: 500.1 GB, 500107862016 bytes # 255 heads, 63 sectors/track, 60801 cylinders # Units = cylinders of 16065 * 512 = 8225280 bytes # Sector size (logical/physical): 512 bytes / 512 bytes # I/O size (minimum/optimal): 512 bytes / 512 bytes # Disk identifier: 0x00000000 # # Device Boot Start End Blocks Id System # /dev/sdb1 1 60801 488384001 83 Linux # # Disk /dev/sdc: 500.1 GB, 500107862016 bytes # 255 heads, 63 sectors/track, 60801 cylinders # Units = cylinders of 16065 * 512 = 8225280 bytes # Sector size (logical/physical): 512 bytes / 512 bytes # I/O size (minimum/optimal): 512 bytes / 512 bytes # Disk identifier: 0xde504d75 # # Device Boot Start End Blocks Id System # /dev/sdc1 1 60801 488384001 83 Linux # See properties of sd. devices udevadm info --attribute-walk --name /dev/sdb1 udevadm info --attribute-walk --name /dev/sdd1 udevadm info -a -p `udevadm info -q path -n /dev/sdb1` | grep -e "SUBSYSTEM==" -e "KERNEL==" -e "ATTR{partition}==" -e "ATTR{size}==" -e "ATTRS{serial}==" # KERNEL=="sdb1" # SUBSYSTEM=="block" # ATTR{partition}=="1" # ATTR{size}=="976768002" # ATTRS{serial}=="2HA4DF8P " # ATTRS{serial}=="0000:02:0a.2" udevadm info -a -p `udevadm info -q path -n /dev/sdc1` | grep -e "SUBSYSTEM==" -e "KERNEL==" -e "ATTR{partition}==" -e "ATTR{size}==" -e "ATTRS{serial}==" # KERNEL=="sdc1" # SUBSYSTEM=="block" # ATTR{partition}=="1" # ATTR{size}=="976768002" # ATTRS{serial}=="2HA16NDX " # ATTRS{serial}=="0000:02:0a.2" # External hard drives # d - delete all existing partitions # n - add a new partition # p - primary partition # 1 - partition number 1 # 83 - partition type: 83 Linux # w - write table to disk and exit fdisk /dev/sdb fdisk /dev/sdc # Create ext2 filesystems on USB drives and format them # I create ext2 not ext3 because for a while there was # only ext2 filesystem support on Windows. # I wanted to be able to read the filesystem from a # Windows machine. # Your needs may be different. mkfs.ext2 /dev/sdb1 mkfs.ext2 /dev/sdc1 # Determine kernel version (see below) uname -r # Instruct udev to make symlinks for the drives based on the manufactor, # size, or any number of properties about the device. That symlink will # always point to that device regardless of what device node # (ie /dev/sda, /dev/sdb) it ends up getting assigned. Then you can modify # your fstab to use the symlink vs the device node, which in turn allows # you to always address the device the same way. # Put a hard return at the end so it would print cat > /etc/udev/rules.d/85-usb-hd-fix.rules <<'EOF' # Udevadm info starts with the device specified by the devpath and then # walks up the chain of parent devices. It prints for every device # found, all possible attributes in the udev rules key format. # # A rule to match, can be composed by the attributes of the device # (first paragraph or block of rules) # and the attributes from one single parent device. # (any paragraph or block of rules following the first paragraph or block of rules) # # For example, below we see some of the attributes of the device listed first # SUBSYSTEM # KERNEL # ATTR{partition} # ATTR{size} # and the attribute from one single parent device listed last # ATTRS{serial} # backup500 SUBSYSTEM=="block", KERNEL=="sd?1", ATTR{partition}=="1", ATTR{size}=="976768002" , ATTRS{serial}=="2HA4DF8P ", SYMLINK+="backup500", GROUP="disk", MODE="0660" # backup501 SUBSYSTEM=="block", KERNEL=="sd?1", ATTR{partition}=="1", ATTR{size}=="976768002" , ATTRS{serial}=="2HA16NDX ", SYMLINK+="backup501", GROUP="disk", MODE="0660" EOF # Change the attributes of the udev rules file chmod 644 /etc/udev/rules.d/85-usb-hd-fix.rules # Test udev udevadm test /sys/block/sdb block udevadm test /sys/block/sdc block # Test udev restart udev # Install kernel for PentiumPro sudo apt-get install linux-686 # Create the mount points mkdir -p /mnt/backup500 mkdir -p /mnt/backup501 # Make sure that the external USB drives (identified by the udev system) # are not referenced in /etc/fstab # # The current /etc/fstab file looks like: cat /etc/fstab # Should look like # # /etc/fstab: static file system information. # # # # <file system> <mount point> <type> <options> <dump> <pass> # proc /proc proc defaults 0 0 # # /dev/sda1 # UUID=fb518094-0d3b-42f4-a1cc-a3fa659fcd8a / ext3 relatime,errors=remount-ro 0 1 # # /dev/sda5 # UUID=b04dba06-114e-0fa5-f823-75a116ae2fc0 none swap sw 0 0 # /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0 # /dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0 # Install sdparm apt-get update apt-get install sdparm # See the current state of the STANDBY drive flag sdparm -al /dev/backup500 # This should be 1 (on/true/enabled) # Set STANDBY to 0 (off/false/disabled) sdparm --clear STANDBY -6 /dev/backup500 # See the current state of the STANDBY drive flag # This should be 0 (off/false/disabled) sdparm -al /dev/backup500 # Modify script /etc/rc.local to mount all filesystems in /etc/fstab cat > /etc/rc.local <<'EOF' #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Set STANDBY to 0 (off/false/disabled) only on the Maxtor OneTouch enclosures sdparm --clear STANDBY -6 /dev/backup500 sdparm --clear STANDBY -6 /dev/backup501 # Mount USB drives mount -t ext2 -o rw,auto,user /dev/backup500 /mnt/backup500 mount -t ext2 -o rw,auto,user /dev/backup501 /mnt/backup501 exit 0 EOF # Change the attributes of the udev rules file chmod 755 /etc/rc.local # Reboot shutdown -r now # The following should already be mounted automatically after the reboot # If not mounted, mount manually # mount /mnt/backup500 # mount /mnt/backup501 # Create or rename directories # mkdir -p /mnt/backup501/backup501/files # mkdir -p /mnt/backup500/backup500/files # Create symbolic links # /home/backup500 -> /mnt/backup500/backup500 # /home/backup501 -> /mnt/backup501/backup501 ln -s /mnt/backup500/backup500 /home ln -s /mnt/backup501/backup501 /home # To remove the links # unlink /home/backup500 # unlink /home/backup501