如何在OS X系统上获取USB驱动器的硬盘序列号?

6

我已经查看了DADiskCopyDescription和从IOKit枚举IOUSBDevice,但两者都无法提供我需要的USB硬盘序列号。后者提供的是USB序列号,与其硬盘序列号不相同。我该如何获取它(使用c/c++,而非通过shell)?


1
可能是获取USB硬盘序列号(Mac OS)的重复问题。 - John Zwinck
2
@JohnZwinck 不是的,那个解决方案是我在问题中提到的 IOUSBDevice。也就是说,它只提供了 USB 串口,而不是硬盘序列号。 - chacham15
1个回答

5
您基本上在问“我如何通过USB直接与硬盘通信?”

答案是:这取决于USB控制器。并非所有控制器都支持您的请求。

必须满足以下条件:

  1. USB桥必须支持ATA穿透(如果是ATA)
  2. 主机操作系统必须支持SCSI
  3. 操作系统必须提供SCSI穿透API(Windows和Linux上有,MacOS X上没有)
另一个因素产生了:一些控制器支持独立于驱动器制造商的穿透,但有些控制器根据它们正在控制的硬盘支持不同的命令。这还取决于连接的驱动器是PATA、SATA/SAS还是SCSI。

至少支持上述其中一个条件的控制器包括Sunplus SPIF215/6、SPIF225/6;JMicron JM20329、JM20335-39;以及Cypress CY7C68300B/C(AT2LP)、CY7C68310(ISD-300LP)。

希望我能给您带来更好的消息。

有意思。Windows成功地给了我正确的(驱动器)序列号,而我并没有进行任何特殊的操作。也就是说,没有经过我的任何透传。那么在OS X中有类似的方法吗?所以,你是在说在OS X上不可能实现吗? - chacham15
我怀疑你的USB控制器将串行号请求传递到驱动器。关于MacOSX:没有什么是不可能的,但可能需要更多的工作。要开始,请查看:http://comments.gmane.org/gmane.linux.utilities.smartmontools/6812在最近的smartmontools版本(5.39之前),由于Mac OS X内核不支持SCSI通过,在Mac OS X上无法通过USB进行SMART监控... - Charles Burns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接