【发布时间】: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