Ошибка ioctl HDIO_GET_IDENTITY на запоминающих устройствах USB
Я пытаюсь идентифицировать жесткий диск USB, подключенный через адаптер SATA-to-USB. Маленькая программа, которую я написал, написана на Python и использует это:
def getID(dev):
HDIO_GET_IDENTITY = 0x030d
with open(dev, 'r') as fd:
buf = fcntl.ioctl(fd, HDIO_GET_IDENTITY, ' ' * 512)
fields = struct.unpack_from(struct_hd_driveid, buf)
serial_no = fields[10].strip()
fw_rev = fields[14].strip()
model = fields[15].strip()
return (serial_no, fw_rev, model)
Метод, который я нашел здесь
Метод успешно работает на моем внутреннем жестком диске, но я получаю
IOError: [Errno 22] Invalid argument
при запуске его на моем жестком диске, подключенном через USB.
Я не мог найти ничего, связанного с этим - я предполагаю, что код операции может отличаться для жестких дисков, подключенных через USB....
Я почти забыл сказать, что я запускаю это из Ubuntu
Linux dragosmc-Lenovo-V570 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Спасибо, dragosmc.
1 ответ
HDIO_GET_IDENTITY, похоже, зависит от IDE/ATA.
Запоминающее устройство абстрагирует устройство ATA в устройство SCSI, поэтому вы должны обратить внимание на:
- Udev
- sg3-utils / libsg3
- sysfs (под linux)
- более сложная команда scsi