USB存储设备上的ioctl HDIO_GET_IDENTITY失败

时间:2015-02-04 19:59:17

标签: python usb device ioctl hdd

我正在尝试通过SATA-to-USB适配器获得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)

方法我找到了here

该方法在我的内置硬盘上成功运行,但我得到了

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 个答案:

答案 0 :(得分:1)

HDIO_GET_IDENTITY似乎是IDE / ATA特定的。

大容量存储将ATA设备抽象为SCSI设备,因此您应该查看:

  • 的udev
  • sg3-utils / libsg3
  • sysfs(在linux下)
  • 更复杂的scsi命令

请参阅Get vendor name of SCSI