Как можно в Линуксе определить из программы сколько PATA/SATA/SCSI винчестеров физически подключено к компьютеру и для каждого получить vendor/model? Понятно, что это можно прочитать в dmesg после загрузки, но как это сделать программно? Была идея заглянуть в /proc (/proc/ide/hd?/model) или /sys (/sys/block/sd?/device/{model,vendor}), но ведь они могут быть не смонтированы (а /sys для ядер 2.4 AFAIK вообще отсутствует). Смотрел исходники hdparm, но это как я понимаю, требует root-а. Хотелось бы использовать максимально общий метод, который не зависит от версий ядер.
Если кто-нибудь знает также способ для FreeBSD, буду благодарен, а то я ничего кроме atacontrol не нашел (как добраться до SCSI дисков вообще не знаю).