Блочные устройства имеют "съемный" атрибут. Хотя это не совсем соответствует внутреннему / внешнему (например, внутренний CDROM является "съемным" и дисковод eSATA может быть неправильно классифицирован), он может быть достаточно близок для ваших целей.
$ cd /sys/block/
$ grep ^ */removable
dm-0/removable:0
dm-1/removable:0
dm-2/removable:0
dm-3/removable:0
dm-4/removable:0
dm-5/removable:0
dm-6/removable:0
dm-7/removable:0
dm-8/removable:0
fd0/removable:1
hdc/removable:1
loop0/removable:0
loop1/removable:0
loop2/removable:0
loop3/removable:0
loop4/removable:0
loop5/removable:0
loop6/removable:0
loop7/removable:0
md0/removable:0
md1/removable:0
sda/removable:0
sdb/removable:0
sdc/removable:0
sdd/removable:0
sde/removable:1
sdf/removable:1
sdg/removable:1
sdh/removable:1
sdi/removable:1