Какой драйвер находится за определенным файлом устройства?

10

По файлу устройства, скажем /dev/sdb, можно определить, какой драйвер стоит за ним?

В частности, я хочу определить, какой драйвер используют мои устройства хранения данных. fdisk -lсписки 2 устройств: /dev/sdaи /dev/sdb. Один из них представляет собой жесткий диск SATA, а другой - запоминающее устройство USB - фактически SD-карту.

Как определить программно, какой именно?

Я пишу часть программного обеспечения, и я хочу защитить новичка от уничтожения их жестких дисков, в то же время позволяя им стирать свои SD-карты.

Алекс Чемберлен
источник
Я предполагаю, что вы используете Linux, исходя из вашего имени устройства.
Жиль "ТАК - перестань быть злым"
@ Жиль Да, извини, это, наверное, очень важная информация ... Спасибо!
Алекс Чемберлен

Ответы:

12

Запустите udevadm info -a -n /dev/sdaи проанализируйте вывод. Вы увидите такие строки, как

DRIVERS=="ahci"

для диска SATA с использованием ahciдрайвера, или

DRIVERS=="usb-storage"

для устройства, подключенного через USB. Вы также сможете отображать названия поставщиков и моделей для подтверждения. Также,

ATTR{removable}=="1"

присутствует на съемных устройствах.

Всю эту информацию также можно получить с помощью /sys(на самом деле, это то, что udevadmнужно искать), но /sysинтерфейс время от времени меняется, поэтому анализ udevadmв долгосрочной перспективе является более надежным.

Жиль "ТАК - перестань быть злым"
источник
@AlexChamberlain Извините, да, -nожидает путь к блочному устройству (что-то под /dev), тогда как -pожидает путь под /sys(например -p /sys/block/sda).
Жиль "ТАК - перестать быть злым"