Ошибка 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

См. Получить имя поставщика SCSI.

Другие вопросы по тегам