2008-09-16 03:51:40 +0000 2008-09-16 03:51:40 +0000
161

¿Cómo averiguo qué /dev es una unidad flash USB?

Quiero montar una unidad USB, dos de ellas y necesito dos puntos de montaje diferentes. Desafortunadamente, el núcleo de Linux sufrió un cambio de nombre y no puedo averiguar qué ubicación de /dev es la correcta. ¿Hay alguna manera de buscar en dmesg o /proc o en algún otro lugar para averiguar qué nodo de dispositivo es una unidad USB.

(Estoy usando ArchLinux si eso ayuda en algo... /dev/sda es el primer disco duro, /dev/sr0 es una unidad de dvd, etc.)

_edición: La unidad USB está conectada a un concentrador USB. Miré a través de dmesg y dice que el hub estaba conectado y buscó los 3 dispositivos conectados a él. Aunque todavía no puedo ver dónde está mi unidad USB.

Respuestas [11]

83
2008-09-16 03:53:52 +0000

La manera más fácil: Mira la salida de dmesg después de conectar el dispositivo USB. Debería mostrarte qué nodo de /dev le fue asignado.

83
54
2012-09-04 18:51:43 +0000

Todas estas son buenas sugerencias, pero el método más rápido y menos verborreico es simplemente escribir lo siguiente en la terminal:

mount

que dará una lista de todos los dispositivos montados (esto asume que la unidad USB está montada, lo cual es usualmente el caso de las modernas distribuciones de Linux).

54
25
2008-09-16 03:59:28 +0000

Intenta con el comando udevinfo -q all -n /dev/sda, donde /dev/sda es la ruta de acceso a tu disco. Esto te da una gran cantidad de información sobre el disco que estás mirando - hay una entrada que te dice sobre el bus al que está conectado.

Esto, por supuesto, te ahorra tener que pasar por dmesg y/o logs.

Actualización

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

Desde al menos Jul 2010 [ 1 ] udevinfo fue sustituido en Debian (y derivado) por udevadm info con un pequeño transitorio con el que había enlaces simbólicos que pronto fueron desaprobados y eliminados (todavía los puede encontrar en una máquina vieja no actualizada). Siempre a partir de [ 1 ] podemos leer:

En udev 117, se introdujo udevadm y udevinfo y otros programas se convirtieron en symlinks de compatibilidad. Los enlaces simbólicos fueron desaprobados en udev 128 y eliminados para siempre en udev 147.

25
23
2013-01-02 08:37:01 +0000

el método más simple para ver lo que está pasando es simplemente teclear (como raíz, por supuesto):

blkid -c /dev/null

esto te da una visión completa sobre todos los dispositivos de bloque incluso si no están montados

23
11
2009-09-24 22:36:40 +0000

/dev/disk/by-* es la forma más fácil en este caso, si por alguna razón quieres hacer la vida más interesante puedes usar HAL.

Para listar todos los dispositivos que usas:

hal-device

Para obtener una propiedad específica que usas (esto devolverá /dev/sd* en un dispositivo de almacenamiento USB):

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

También hay:

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

Si quieres complicarlo aún más puedes escribirte un HAL based auto mounter , que puede ser bastante útil si quieres automatizar las cosas completamente.

Y sólo para completar hay también:

lsusb -v
lshw

Que proporciona alguna información general sobre USB y tu hardware en general.

11
10
2015-11-10 02:47:28 +0000
sudo fdisk -l

Y sólo analizar el resultado.

10
8
2008-09-16 04:18:39 +0000

Usa

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

Bajo las reglas predeterminadas de udev, eso te mostrará la mayoría de los dispositivos usb y te mostrará el enlace simbólico a su nombre de dispositivo de bloqueo en el sistema.

Si eso no funciona, mira /dev/disk/by-id/ directamente.

8
7
2012-08-24 17:37:56 +0000

Para los dispositivos USB puedes simplemente hacer

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"
7
2
2008-09-16 03:55:24 +0000

Echa un vistazo al árbol debajo de /dev/disk. Enumera los discos y sus particiones (sistemas de archivos) por varios esquemas.

2
0
2008-09-16 03:53:27 +0000

Si desenchufas la unidad USB y la vuelves a conectar, deberías ver cómo se inicializa desde el núcleo (dmesg)

0
0
2018-11-29 19:02:45 +0000

Basado en la excelente respuesta de stormlash y con una dependencia de udev para poblar el árbol de dispositivos "/dev/disk/by-id/usb", podrías definir un predicado (Bash) de la siguiente manera:

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
}

Y luego usarlo:

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