¿Qué controlador está detrás de un determinado archivo de dispositivo?

10

Dado un archivo de dispositivo, por ejemplo /dev/sdb, ¿es posible determinar qué controlador está detrás?

Específicamente, quiero determinar qué controlador están usando mis dispositivos de almacenamiento. fdisk -lenumera 2 dispositivos: /dev/sday /dev/sdb. Uno es un disco duro SATA y el otro es un dispositivo de almacenamiento masivo USB, en realidad una tarjeta SD.

¿Cómo determino, programáticamente, cuál es cuál?

Estoy escribiendo una pieza de software, y quiero proteger al principiante para que no borre sus discos duros, al tiempo que les permite borrar sus tarjetas SD.

Alex Chamberlain
fuente
Supongo que está ejecutando Linux, en función de su elección del nombre del dispositivo.
Gilles 'SO- deja de ser malvado'
@Gilles Sí, lo siento, esa es probablemente una información bastante importante ... ¡Gracias!
Alex Chamberlain

Respuestas:

12

Ejecute udevadm info -a -n /dev/sday analice la salida. Verás líneas como

DRIVERS=="ahci"

para un disco SATA con el ahcicontrolador, o

DRIVERS=="usb-storage"

para un dispositivo conectado por USB. También podrá mostrar nombres de proveedores y modelos para su confirmación. También,

ATTR{removable}=="1"

está presente en dispositivos extraíbles.

Toda esta información también se puede obtener a través de /sys(de hecho, ahí es donde udevadmse debe buscar), pero la /sysinterfaz cambia de vez en cuando, por lo que el análisis udevadmes más robusto a largo plazo.

Gilles 'SO- deja de ser malvado'
fuente
@AlexChamberlain Lo sentimos, sí, -nespera una ruta a un dispositivo de bloque (algo debajo /dev) mientras que -pespera una ruta debajo /sys(por ejemplo -p /sys/block/sda).
Gilles 'SO- deja de ser malvado'