Как получить список физических жёстких дисков в системе и места их монтирования?

Пишу программу для тестирование железа, и для тестирование жёстких дисков необходимо получить список жёстких дисков и их соответствие точкам монтирования (если они есть) и разумеется файлу устройства типа

/dev/sd*

Для этих целей, я использовал удобную программу lsblk, которая при запросе даёт всё что у ней спрашивают:
lsblk -io KNAME,TYPE,SIZE,MODEL,MOUNTPOINT
KNAME TYPE   SIZE MODEL            MOUNTPOINT
sda   disk 465.8G WDC WD5000AZRX-0 
sda1  part 457.9G                  /
sda2  part     1K                  
sda5  part   7.9G                  [SWAP]
sr0   rom   1024M iHAS124   W


Удобно можно встроить в код программы и далее парсить её вывод и мучить соответствующий жёсткий диск (отбирая строку содержащую disk)

FILE * fp = popen("lsblk -io KNAME,TYPE,SIZE,MODEL,MOUNTPOINT", "r");
...// проверка на ошибки
	while(fgets(buf, sizeof(buf) -1,fp)) {
		if (strstr(buf, "disk")) {
			//пошли тут тестировать
		}


Беда пришла от туда, откуда не ждали. Этой программы нет на сборке дебиана, на которой будет проводится тест (в репах тоже нет). Поменять сборку нельзя. Есть ли какие-то альтернативные и простые варианты получить подобный список, например через /proc или /sys?
  • Вопрос задан
  • 40574 просмотра
Решения вопроса 1
@klirichek
Запуск strace lsbkl говорит, что последний читает /sys/block и как-то интерпретирует прочитанное.
Может вам так же попробовать, напрямую?
Ну или исходники его посмотреть, в конце концов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
df | grep /dev/sd
mount | grep /dev/sd
Ответ написан
blockdev --report
Показывает блочные устройства

А mount показывает что примонтированно и куда.
Ответ написан
lesovsky
@lesovsky
lsblk поставляетя в util-linux начиная с версии 2.19. найти deb-пакет не должно составить труда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы