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


160

Quiero montar una unidad USB, dos de ellas y necesito dos puntos de montaje diferentes. Desafortunadamente, el kernel de Linux experimentó un cambio de nombre y no puedo averiguar qué /devubicación es la correcta. ¿Hay alguna manera de mirar a través dmesgo /procen otro lugar para averiguar qué nodo de dispositivo es una unidad USB?

(Estoy usando ArchLinux si eso ayuda ... /dev/sdaes el primer disco duro, /dev/sr0es una unidad de DVD, etc.)

editar: la unidad USB está conectada a un concentrador USB. Miré a través dmesgy dice que el hub estaba conectado y escaneó los 3 dispositivos conectados a él. Sin embargo, todavía no puedo ver dónde está mi unidad USB.


1
¿No puedes verlo? Quizás espere un momento. O intente con otro puerto USB. Vea qué diferencias hay en 'lsusb'
Nick Devereaux

Es posible que desee reformular un poco la pregunta: después de todo, no todos los dispositivos USB son discos.
Arafangion

3
El dfcomando te muestra dónde estaba montado
Will Sheppard

Respuestas:


83

La forma más fácil: mira la salida de dmesgdespués de conectar el dispositivo USB. Debería mostrarle qué /devnodo se le asignó.


2
dmesgfunciona muy bien, pero tengo un caso en el dmesgque no muestra el /devnodo: [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcd¿Qué significa esto? ¿Cómo puedo montar este dispositivo? El dispositivo aparece en lsusb...
modulitos

1
En realidad, lo descubrí. Hubo una actualización del kernel desde mi último reinicio que estaba causando este problema. Después de reiniciar, mi usb se monta muy bien. ¡Ojalá esto ayude a alguien!
modulitos

54

Mientras esté ejecutando udev , puede hacerlo fácilmente haciendo referencia a / dev / disk / by-id / usb- manufacturername _ serialnumber . Estos aparecen como enlaces simbólicos a los que puede hacer referencia directamente dentro de su fstab, o que puede desreferenciar usando readlink -e para determinar el dispositivo de bloqueo asociado.

Aquí hay un ejemplo del mundo real. En mi máquina, tengo 3 discos duros USB conectados. Cada uno de ellos aparece en / dev / disk / by-id con números de serie únicos (aunque comparten una cadena de fabricante común). He creado enlaces simbólicos a cada una de estas tres entradas únicas, y ahora puedo determinar rápidamente qué unidad es cuál (y qué dispositivo está asociado con cada unidad) ejecutando readlink -e linkname . Por ejemplo, ejecutar readlink -e / root / disk2 en mi máquina muestra actualmente " / dev / sde ", mientras que readlink -e / root / disk3 no produce ningún tipo de salida.


15
Corto y simple:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
Felipe Alcacibar

54

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

mount

que proporcionará una lista de todos los dispositivos montados (esto supone que la unidad USB está montada, que suele ser el caso con las distribuciones modernas de Linux).


55
No, mágicamente no monta tu dispositivo. Tienes que especificarlo con mount /dev/id /mount/point, para que eso no funcione.
polym

99
Mi respuesta responde a la pregunta del usuario '¿Hay alguna manera de mirar a través de dmesg o / proc o en otro lugar para averiguar qué nodo de dispositivo es una unidad USB?', Y no tiene la intención de proporcionar orientación sobre la practicidad de montar una unidad bajo Linux .
AnotherLongUsername

Esta respuesta resolvió una pregunta casi idéntica para mí.
Matthew Brown también conocido como Lord Matt

1
Creo que el comportamiento del montaje automático depende mucho del tipo de distribución.
jiggunjer

1
dftambién, supongo.
Alexey

24

Pruebe el comando udevinfo -q all -n /dev/sda, donde /dev/sdaestá la ruta a su disco. Esto le brinda una gran cantidad de información sobre el disco que está viendo: hay una entrada que le informa sobre el bus al que está conectado.

Por supuesto, esto le ahorra tener que pasar por dmesg y / o registros.

Actualizar

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

Desde al menos julio de 2010 [ 1 ] udevinfo fue sustituido en Debian (y derivado) por udevadm infoun poco transitorio con el que pronto hubo enlaces simbólicos en desuso y eliminados (aún puede encontrarlos en una máquina antigua no actualizada). Siempre desde [ 1 ] podemos leer:

En udev 117, udevadmse introdujo udevinfoy otros programas se convirtieron en enlaces simbólicos de compatibilidad. Los enlaces simbólicos quedaron en desuso en udev 128 y se eliminaron definitivamente en udev 147 .


8
En Debian, udevinfose renombra udevadm.
Steve Pomeroy

8
En Ubuntu, el comando parece ser "udevadm info --query = all -n / dev / sda"
machineghost

Supongo que cambiaron el nombre del comando en algún momento: cuando escribí la respuesta (hace años), el comando funcionó en el sistema ubuntu desde el que lo
publiqué

El comando aún funciona en ubuntu,udevadm info --query=all -n /dev/ttyUSB1
Siddharth

1
udevadm info --query=all -n /dev/ttyUSBen Fedora también.
slm

22

El método más simple para ver lo que está sucediendo es simplemente escribir (como raíz, por supuesto):

blkid -c /dev/null

Esto le ofrece una visión general completa de todos los dispositivos de bloque, incluso si no está montado


No toda la distribución tiene esto. ¿Qué estabas usando?
Nueva Alejandría

Esto no genera nada en mi distribución Raspbian.
IgorGanapolsky

Comando no encontrado: blkid
IgorGanapolsky

No hay salida de este comando en Ubuntu 14.04 de 64 bits.
gbmhunter

11

/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 enumerar todos los dispositivos que usa:

hal-device

Para obtener una propiedad específica que use (esto regresará /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 desea que sea aún más complicado, puede escribirse relativamente fácilmente un montador automático basado en HAL , que puede ser bastante útil si desea automatizar las cosas por completo.

Y solo para completar, también hay:

lsusb -v
lshw

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


2
/ dev / disk / by-id / * usb * es muy útil.
Rob

/ dev / disk / by-label ftw. Gracias :)
Tríptico

10
sudo fdisk -l

Y solo analiza el resultado.


1
página de manual de fdisk "Si no se proporcionan dispositivos, se utilizan los mencionados en / proc / particiones (si existe)". Es posible que ejecutar fdisk no sea una opción ... Basado en un sistema Debian que sé que no lo tiene instalado, supongo que algunos sistemas GPT podrían no instalar el software innecesario. Aún así, verificar / proc / particiones debería ser una opción.
TOOGAM

Esta fue la única opción que funcionó bien para mí. Lo siento si no te funcionó!
Felipe

8

Utilizar

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

Según las reglas predeterminadas de udev, eso le mostrará la mayoría de los dispositivos usb y le mostrará el enlace simbólico a su nombre de dispositivo de bloque en el sistema.

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


6

Para dispositivos USB simplemente puedes 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"

1
+1. Script simple y conciso para hacer la tarea automáticamente.
leesei

2

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


2

/ var / log / message si dmesg ya no tiene la información.


0

Si desconecta la unidad USB y la vuelve a conectar, debería ver que se inicializa desde el núcleo (dmesg)


0

Basado en la excelente respuesta de stormlash y con una dependencia de udev para llenar el árbol de dispositivos "/ dev / disk / by-id / usb", puede 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 úsalo:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.