Given a device file, say /dev/sdb, is it possible to determine what driver is behind it?

Specifically, I want to determine what driver my storage devices are using. fdisk -l lists 2 devices: /dev/sda and /dev/sdb. One is a SATA hard drive and the other is a USB Mass Storage device - actually an SD card.

How do I determine, programmatically, which is which?

I am writing a piece of software, and I want to protect the beginner from obliterating their hard drives, whilst allowing them to obliterate their SD cards.

  • I assume you're running Linux, based on your choice of device name. Aug 11, 2012 at 15:28
  • @Gilles Yeah, sorry that's probably quite an important piece of information... Thanks! Aug 11, 2012 at 16:07

1 Answer 1


Run udevadm info -a -n /dev/sda and parse the output. You'll see lines like


for a SATA disk using the ahci driver, or


for an USB-connected device. You'll also be able to display vendor and model names for confirmation. Also,


is present on removable devices.

All of this information can also be obtained through /sys (in fact, that's where udevadm goes to look), but the /sys interface changes from time to time, so parsing udevadm is more robust in the long term.

  • @AlexChamberlain Sorry, yes, -n expects a path to a block device (something under /dev) whereas -p expects a path under /sys (e.g. -p /sys/block/sda). Aug 12, 2012 at 18:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.