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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .