【问题标题】:Detecting SSD storage devices on POSIX OS'es在 POSIX 操作系统上检测 SSD 存储设备
【发布时间】:2014-06-21 17:07:51
【问题描述】:

我正在开发一个操作系统可移植程序,该程序将受益于检测物理存储设备是 SSD 还是普通的旧旋转磁盘。

在 Linux 上有:

/sys/block/sdX/queue/rotational

如果是 SSD,则返回 0 或 1,但我不确定这是否是最好的方法。

在 Windows 和 UNIX 上,我没有找到任何检测方法,也许我应该使用 ioctl DEVICE_SEEK_PENALTY_DESCRIPTOR 并检查搜索强度(在 SSD 存储设备上应该非常低),或者也许使用 DeviceIoControl 来检查标称媒体旋转速率(在 SSD 存储设备上也应该非常低)。

关于如何继续在 POSIX 兼容操作系统上检测 SSD 磁盘,有什么建议吗?

【问题讨论】:

  • 没有标准接口,因此您必须全面执行特定于操作系统的操作。如果有一种简单的跨平台方法来确定它,那就太好了。对于 Linux,IIRC rotational 对于 USB 笔式驱动器也将是 0
  • @Petesh 但是,如果没有可靠的方法检测 SSD 存储设备,将很难将其纳入 POSIX 标准。
  • 您的应用程序可能会受益于一个不起眼的用户设置选项,可能是一个包含所有磁盘的漂亮表,以及它们是否用于“SSD 模式”、“微调器模式”或可能的“RAM”磁盘模式”、“未知 NAS 设备模式”、“有趣的特殊文件系统模式”等。我不会浪费时间开发一个可能需要人工审查和覆盖的检测功能。
  • @LorenzoGatti 好主意,除非有人想出一种非常简单的方法来检测 SSD 存储设备,否则我会这样做。
  • 请列出您心目中的目标操作系统。 en.wikipedia.org/wiki/POSIX 是一系列标准,其本身甚至没有磁盘的概念。

标签: c++ hard-drive solid-state-drive


【解决方案1】:

相关:https://unix.stackexchange.com/questions/65595/how-to-know-if-a-disk-is-an-ssd-or-an-hdd

不过,海事组织。您可以使用 POSIX 方法来确定操作系统,并且有多种方法来检测 SSD,当无法确定时,只需询问最终用户,如果他们不知道,请设置一个安全的默认值。我想如果没有符合 POSIX 的方法,我会这样做(但我可能也会先检查 POSIX 邮件列表)。我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我将回应 Lorenzo Gatti 的上述评论,即执行此操作的最佳方式几乎可以肯定是向用户公开的选项。没有可移植的方式来做到这一点,如果其他操作系统(尤其是较旧的操作系统,除非您有一定的保证您的用户正在使用某种最新的操作系统,否则这是一个问题)无法做到这一点,我不会感到惊讶。

    真的,一个类似于“我正在使用固态驱动器”的复选框,默认为关闭,可能是最好的选择,特别是因为那些可能有 SSD 的(至少现在)精通技术,知道他们有什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-14
      • 2015-07-14
      • 2011-03-13
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 2016-09-29
      相关资源
      最近更新 更多