Qual driver está por trás de um determinado arquivo de dispositivo?

10

Dado um arquivo de dispositivo, por exemplo /dev/sdb, é possível determinar qual driver está por trás dele?

Especificamente, quero determinar qual driver meus dispositivos de armazenamento estão usando. fdisk -llista 2 dispositivos: /dev/sdae /dev/sdb. Um é um disco rígido SATA e o outro é um dispositivo USB de armazenamento em massa - na verdade, um cartão SD.

Como determino programaticamente qual é qual?

Estou escrevendo um software e quero proteger o iniciante de obliterar seus discos rígidos, enquanto permite que eles obliterem seus cartões SD.

Alex Chamberlain
fonte
Presumo que você esteja executando o Linux, com base na sua escolha do nome do dispositivo.
Gilles 'SO- stop be evil' (
@ Gilles Sim, desculpe, provavelmente é uma informação muito importante ... Obrigado!
Alex Chamberlain

Respostas:

12

Execute udevadm info -a -n /dev/sdae analise a saída. Você verá linhas como

DRIVERS=="ahci"

para um disco SATA usando o ahcidriver ou

DRIVERS=="usb-storage"

para um dispositivo conectado por USB. Você também poderá exibir nomes de fornecedores e modelos para confirmação. Além disso,

ATTR{removable}=="1"

está presente em dispositivos removíveis.

Todas essas informações também podem ser obtidas através /sys(de fato, é aí que udevadmvamos procurar), mas a /sysinterface muda de tempos em tempos, portanto, a análise udevadmé mais robusta a longo prazo.

Gilles 'SO- parar de ser mau'
fonte
@AlexChamberlain Desculpe, sim, -nespera um caminho para um dispositivo de bloco (algo abaixo /dev) enquanto -pespera um caminho sob /sys(por exemplo -p /sys/block/sda).
Gilles 'SO- stop be evil'