Obtenga el nombre del dispositivo del disco USB conectado

Obtenga el nombre del dispositivo del disco USB conectado

Necesito obtener los nombres de los dispositivos de todos los discos USB conectados (es decir sdd).

Tengo 3 discos USB conectados y 2 discos SATA:

$ find /sys/devices/ -name block        
/sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block

Quiero ignorar los discos SATA, pero necesito enumerar todos los discos USB.

En la terminal, puedo nosotros lsy me dará sdd:

$ ls /sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
sdd

Pero necesito usar esto en un script. Necesito iterar sobre todos los discos USB y no sé la ruta exacta de antemano, así que tengo que usar comodines ( *o ?):

for DISK in $(ls /sys/devices/pci0000:00/0000:00:14.0/usb?/*/*:1.0/host?/target?:0:0/?:0:0:0/block) ; do
echo /dev/$DISK
done

lo anterior solo funciona si hay un disco USB conectado. Si hay dos o más discos conectados, obtengo sddtambién la /sysruta, que no quiero, es decir:

/dev//sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block:
/dev/sdd
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block:
/dev/sde
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block:
/dev/sdc

¿Cómo puedo iterar solo sobre sdd sde sdc?

Estoy buscando una solución que no utilice udevinfraestructura, es decir/dev/disk/by-path/

Respuesta1

Puedes hacerlo con lsblkcomando.

lsblk -l -o name,tranda

NAME TRAN
sda  sata
sda1 
sdb  usb
sdc  usb
sr0  sata

-lsignifica formato de "lista", por lo que es más fácil de analizar. De lo contrario, obtendrías un formato de árbol como este:

NAME   TRAN
sda    sata
└─sda1
sdb    usb
sr0    sata

Especificar otras banderas le brindará más información como FSTYPE, LABEL, UUID, MOUNTPOINT y muchas otras, simplemente ejecute lsblk --helppara ver todas las opciones.

Es posible que desee utilizar --paths --noheadings --scsibanderas para imprimir la salida de esta manera:

sata   /dev/sda
usb    /dev/sdb
usb    /dev/sdc
sata   /dev/sr0

y luego grepsobre la entrada para filtrar esas líneas con usb al principio de la línea.

Respuesta2

Do lsusb, da el nombre de los dispositivos conectados a través del bus USB.

Como en:

$ lsusb
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0421:0802 Nokia Mobile Phones CA-42 Phone Parent
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Ver tambiénhombre lsusb

Descripción

lsusb es una utilidad para mostrar información sobre los buses USB del sistema y los dispositivos conectados a ellos.

información relacionada