LINUX.ORG.RU

Определение количества и модели винчестеров


0

0

Как можно в Линуксе определить из программы сколько 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 дисков вообще не знаю).

Ответ на: комментарий от Rain

К сожалению lshw тоже доступается через /proc насколько мне удалось понять из исходных кодов (/src/core/ide.cc)

arnold_shade
() автор топика

Если /proc не смонтирован, то даже X сервер не запустится. О чём вопрос?

anonymous
()

для FreeBSD можно попробовать через sysctl, попробуй для начала:
/sbin/sysctl -a

может быть и для Linux это подойдёт.

Eshkin_kot ★★
()
Ответ на: комментарий от anonymous

> Если /proc не смонтирован, то даже X сервер не запустится. О чём вопрос?

Для моей программы X-сервер необязателен, так что это возможно.

arnold_shade
() автор топика
Ответ на: комментарий от Eshkin_kot

> для FreeBSD можно попробовать через sysctl, попробуй для начала

Благодарю за подсказку, обязательно попробую.

arnold_shade
() автор топика

cat /proc/partitions

fdisk -l

ls /dev/disks #при смонтированом devfs

ls /dev/sd? /dev/hd? #тебует devfs OR sysfs в паре с devfsd OR udev соответсвенно

...

ну и вариации на эту тему, на любом языке программирования

\\cvv

anonymous
()

вообще, задача определения железа никак не пользовательская проблема, поэтому не удивительно что требуются права root'a . Если думаете иначе, то может пользователю разрешим управлять загрузкой драйверов устройств?

mator ★★★★★
()
Ответ на: комментарий от mator

А я не предлагаю заниматься детектом железа на низком уровне пользователю. И не предлагаю позволять ему загружать драйверы и выгружать их. Однако IMHO дать возможность непривилегированному пользователю (по возможности унифицированный) механизм для того, чтобы узнать, что подключено и работает в системе, было бы не лишним. В винде например это можно сделать через открытие \\.\PHYSICALDISK0, 1 и т.д. с правильными правами и выдачей соответствующих DeviceIoControl-ов. И даже прав администратора на это не требуется.

arnold_shade
() автор топика
Ответ на: комментарий от anonymous

Все приведенные Вами методы позволяют узнать имена устройств (типа /dev/hda), но не более. А мне нужно знать строку типа "Maxtor M098705923-55". И конечно самое печальное, что если используется скрипт MAKEDEV, то механизм один (просто листать /dev/hd? и /dev/sd? не подойдет), если devfs, то второй, для udev - третий. Никакой унификации =(

arnold_shade
() автор топика
Ответ на: комментарий от mator

Да, кстати, уважаемый mator, а почему Вас не удивляет, что dmesg обычно можно вызывать непривилегированному пользователю? Ведь мне по сути нужна информация, которая там отображается прямым текстом, доступном для чтения глазами пользователя. А мне нужно то же самое, но программный API.

arnold_shade
() автор топика
Ответ на: комментарий от arnold_shade

Вот, накопал наконец кое-какие утилиты: sdparm и camcontrol - обе для SCSI. Первая работает в Linux и декларируется, что и в FreeBSD тоже есть. Вторая, как я понял, только для FreeBSD.

arnold_shade
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.