Averigüe si un dispositivo específico es un almacenamiento masivo USB

10

Contexto

Estoy automatizando la imagen de la tarjeta SD de una ddimagen de fábrica existente . La tarjeta SD siempre está conectada a través de un lector de tarjetas USB externo y, por lo tanto, aparece en el sistema como un dispositivo de bloque SCSI /dev/sd*.

Actualmente la sintaxis de mi comando es: write-image DEVICEdónde DEVICEestá el dispositivo de bloqueo de la tarjeta SD, por ejemplo. /dev/sdd.

Problema

Ya estoy haciendo una verificación básica DEVICEpara verificar que sea de la forma, /dev/sd*pero esto no es suficiente: me temo que los usuarios (gente de producción no acostumbrada a Linux) cometen un error y especifican otro dispositivo aparentemente válido, por ejemplo. /dev/sda. Puede ver la catástrofe que se avecina, especialmente porque mi script de imágenes necesita privilegios de root (no para escribir la imagen en sí misma, sino modificar la tarjeta SD después, incluido el ajuste del tamaño de una partición según el tamaño real de la tarjeta SD) ...

Pregunta

Me gustaría verificar que el dispositivo especificado sea en realidad un almacenamiento masivo USB (o al menos un dispositivo extraíble) para poder proteger los discos del sistema de que se destruyan accidentalmente. ¿Cómo puedo hacer eso?

No encontré nada relevante en /proco en la web, ahora estoy bastante perdido.

syam
fuente

Respuestas:

10

Echa un vistazo debajo del /sys/directorio. En particular, /sys/block/contiene enlaces simbólicos para bloquear dispositivos /sys/devices/.

/sys/block/sdX/removableparece que se leerá como 1 para un dispositivo extraíble, y 0 en caso contrario. Esto le proporciona una comprobación básica de la capacidad de extracción.

No estoy seguro de si hay una mejor manera de verificar si es un dispositivo USB, pero readlink /sys/block/sdeescupirá algo como eso ../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1.2/6-1.2:1.0/host7/target7:0:0/7:0:0:0/block/sde. Verificar si eso contiene una usb*carpeta podría funcionar como una simple verificación.

Puede obtener otros detalles del dispositivo, como el proveedor y el modelo /sys/block/sdX/device/, que también pueden ser útiles.

David Baggerman
fuente