0

SATA-to-USB アダプタを介して接続された USB ハード ドライブの ID を取得しようとしています。私が書いた小さなプログラムは 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)

ここで見つけた方法

メソッドは内蔵 HDD で正常に実行されますが、

IOError: [Errno 22] Invalid argument

USB接続のHDDで実行する場合。

これに関連するものは何も見つかりませんでした-USB接続のHDDでは操作コードが異なる可能性があると思います....

これを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。

4

1 に答える 1

1

HDIO_GET_IDENTITY は IDE/ATA 固有のようです。

大容量記憶装置は ATA デバイスを SCSI デバイスに抽象化するため、以下を確認する必要があります。

  • udev
  • sg3-utils / libsg3
  • sysfs (Linux の場合)
  • より複雑な scsi コマンド

SCSI のベンダー名を取得するを参照してください。

于 2015-12-04T16:17:24.223 に答える