Форум программистов, компьютерный форум, киберфорум
Железо в Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
342 / 197 / 52
Регистрация: 18.10.2017
Сообщений: 1,938
1

Получить Serial Number диска

08.02.2022, 17:12. Показов 1337. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Возможно ли путём одного вызова ioctl() извлечь из SATA-диска его
Serial Number или Model Number, как их возвращает команда
Bash
1
hdparm -I device
Я делаю вызов
C
1
ioctl(fd, HDIO_DRIVE_CMD, args);
где
C
1
__u8 args[4 + 512];
массив для ответа, в args[0] передаётся команда,
args[1] = args[3] - NSECTOR (начальный сектор), обычно 1.
При этом некоторые команды чтения вызывают сообщение об ошибке,
например, ATA_OP_READ_PIO ATA_OP_READ_VERIFY и другие,
ATA_OP_IDENTIFY и ATA_OP_CHECKPOWERMODE1 выполняются, но ничего
осмысленного не возвращают.
А как добиться желаемого или где прочитать об этом?
То, что описано выше, я нашёл в исходном коде hdparm, но подробно
в нём не разбирался, т.к. мне требуется только два параметра.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2022, 17:12
Ответы с готовыми решениями:

Как определить Serial number жеского диска?
Как определить Serial number жеского диска? (код) Спосибо!

Serial number Bios
Привет всем форумчане! Я хочу получить сереала номера биоса но код дают ошибку на windows 10...

HDD serial number
Привет. Тема не нова, но всё-таки не понимаю одной вещи. Есть код для получения HDD s/n на c#: ...

usb serial number
Всем доброго времени суток! Передо мной стоит задача получить серийный номер флешки, которую я...

7
Нарушитель
499 / 656 / 86
Регистрация: 23.11.2021
Сообщений: 3,622
Записей в блоге: 6
08.02.2022, 17:20 2
А не забыл от рута запускать?
0
342 / 197 / 52
Регистрация: 18.10.2017
Сообщений: 1,938
08.02.2022, 20:39  [ТС] 3
Разумеется, запускал от root. М.б., надо применить другой тип команды? Один я успел попробовать, не помогло.
Надо бы почитать описания по самим дискам, где что находится и как получить доступ. Я ещё не сделал этого.
0
Нарушитель
499 / 656 / 86
Регистрация: 23.11.2021
Сообщений: 3,622
Записей в блоге: 6
08.02.2022, 20:59 4
NVMe?
0
342 / 197 / 52
Регистрация: 18.10.2017
Сообщений: 1,938
08.02.2022, 22:17  [ТС] 5
У нас диски подключаются по SATA, и HDD и SSD, hdparm читает все и даже SSD, подключённый через USB-бокс.
Сегодян я пробовал на HDD.

Добавлено через 18 минут
Забыл сказать, что мне это нужно именно для SSD в USB-боксе, т.к. для дисков, подключённых по SATA непосредственно,
Serial Number и Model NUmber можно прочитать из /sys и я так и делаю.
Попробую ещё HDIO_GET_IDENTITY. Кажется, в конце дня я пробовал то ли её, то ли похожую, но не получилось.
0
342 / 197 / 52
Регистрация: 18.10.2017
Сообщений: 1,938
09.02.2022, 14:36  [ТС] 6
Оказалось, что я правильно вводил команду и аргумент
C
1
ioctk(fd, HDIO_DRIVE_CMD, args);
C
1
args[0] = ATA_OP_IDENTIFY
но неправильно принимал и разбирал ответ, когда я исправил ошибки, я увидел в выводе и серийный номер и имя модели.
Но это работает с дисками, подключёнными по SATA, но не работает с диском в USB-боксе,
для него надо использовать HDIO_DRIVE_TASKFILE, это сдожно и с этим я ещё не разобрался.
0
342 / 197 / 52
Регистрация: 18.10.2017
Сообщений: 1,938
11.02.2022, 20:16  [ТС] 7
Оказалось, что надо использовать не HDIO_DRIVE_TASKFILE, а команду SG_IO. Я долго не мог этого понять,
даже когда по совету из поддержки запустил hdparm в strace, т.к. SG_IO - это также константа, определённая
через define. Когда, наконец, сообразил, оказалось, что к ней непонятно как стрится команда. Для
C
1
ioctl(fd, SG_IO, struct sg_io_hdr *hdr)
через эту структуру передаётся команда - опервция SCSI, в ней в первом байте должен быть код операции,
длина команды может быть, например, 6 байтов, а в hdparm передаются команда длиной 16 байтов такая:
"\x85\x08\x0e\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x40\xec\x00"
и первый байт - это не код операции SCSI, а некая константа внутри hdparm. Не знаю, как ядро воспринимает это,
но почему-то это работает. 0xec - это код команды для диска. Наверное, всё это работает через USB-контроллер,
диск находится в USB-боксе. Эта команда формируется при вызове в зависимости от параметров диска и довольно
сложным образом.
0
342 / 197 / 52
Регистрация: 18.10.2017
Сообщений: 1,938
19.02.2022, 18:03  [ТС] 8
Я также вырезал из hdparm часть, реализующую выполнение вызова
C
1
hdparm -I device
и оформил это и как отдельную программу и как библиотечный вызов, т.е. чтобы оно само строило команду,
так что теперь для получения серийного номера SSD в USB-боксе мне не требуется вызывать hdparm
и разбирать её вывод. Для дисков, непосредственно подключённых по SATA, у меня этот номер и название модели
читаются из каталога /sys обычным пользователем. Вот для hdparm или вырезанной из неё части требуются
права root.
0
19.02.2022, 18:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2022, 18:03
Помогаю со студенческими работами здесь

VMware hard drive serial number
У всех VM которые я создаю, одинаковый hard drive serial number: 000000001 (нулей не точное...

Как в С++ Билдере прочитать HDD Serial Number?
Как в С++ Билдере прочитать HDD Serial Number? подскажите ребят пожалуйста?

Как найти Serial Number для unity 4.3.4?
Пожалуйста помогите как найти Serial Number для unity 4.3.4

Получение serial number CPU/HDD asm
Можно ли получить серийный номер процессора или жесткого диска с помощью WinApi? Или же путем...

Serial number usb device (Windows 7) mini-filter
Привет всем, подскажите пожалуйста как можно получить серийный номер usb устройства, пробовал через...

Использование двух виртуальных машин с одинаковыми HDD Serial Number
Искал, как это сделать, нашёл несколько аналогичных вопросов на форумах Parallels Workstation и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru