我目前正在进行的项目要求我获取系统中安装的所有信息,例如总容量、外形尺寸、SSD 或 HDD、转速、接口类型等。
我搜索了很多,我可以找到执行此操作的任何命令。作为比较,我发现在Windows中,有一些应用程序可以满足我的要求。他们是怎么做到的?
只是出于兴趣,Linux 中也有类似的东西吗?
这两个操作系统主要用于服务器,所以我认为硬件信息应该比电脑中的硬件信息发挥更重要的作用。
答案1
如果您使用的是 Solaris 11,您可能需要查看新diskinfo
命令,看看它是否可以满足您的需求。
我知道在 Solaris 8 下,您可以查询内核来获取大部分信息。想想 sysinternals 书中甚至有 C 代码(?——从 10 多年前开始就失去了记忆)书来获取数据。
根据硬件的不同,您也许能够从 ILOM 或 XSCF 获取该数据。您还可以考虑使用 Ops Center。
答案2
问题是磁盘是否愿意共享此信息。如果你调查SCSI协议,它提供的信息不多。与此相关的是三个主要命令:
- 读取能力可能是不言自明的——它提供了块的数量
- 询问提供供应商名称、序列号等。
- 日志感测可能是最有趣的——它提供了许多特定于磁盘的信息页面,例如当前温度、使用情况统计信息等。但是许多页面不受磁盘支持。
这三个命令可以使用较低层命令来发出sg3_utils
相应地使用sg_readcap
、sg_inq
和sg_logs
命令。该软件包由 Linux 提供并随 Solaris 11.2+ 一起提供
但是,如果您研究一下sg_logs
可以为物理磁盘提供什么,就会发现并没有那么多:
root@calypso-sparc31:~# sg_logs -p 0x0 /dev/rdsk/c0t5000CCA01248AAE0d0s2
HITACHI H106060SDSUN600G A2B0
Supported log pages:
0x00 Supported log pages
0x02 Error counters (write)
0x03 Error counters (read)
0x05 Error counters (verify)
0x06 Non-medium errors
0x0d Temperature
0x0e Start-stop cycle counter
0x0f Application client
0x10 Self-test results
0x15 Background scan results (sbc-3)
0x18 Protocol specific port
0x1a Power condition transition
0x2f Informational exceptions (SMART)
0x30 Performance counters (Hitachi)
0x37 Cache (Seagate), Miscellaneous (Hitachi)
另外,如果磁盘位于 RAID 控制器(如 LSI)或存储服务器后面,您将无法从中得到任何东西。
这仅适用于 SCSI。 ATA 系列协议是完全不同的野兽。