引言
當我們需要獲取機器硬件信息時,可使用linux系統自帶的dmidecode工具進行查詢。
dmidecode命令通過讀取系統DMI表,顯示服務器硬件和BIOS信息。除了可使用dmidecode查詢機器現有配置,還可以查詢機器最大的可支持配置(例如現有的內存,機器最多可支持的內存)。
dmidecode命令輸出格式
執行dmidecode命令,輸出如下:
#dmidecode | head -10 # dmidecode 2.9 SMBIOS 2.4 present. 25 structures occupying 844 bytes. Table at 0x000DC010. Handle 0x0000, DMI type 0, 24 bytes BIOS Information Vendor: LENOVO Version: 05CN39WW(V1.10) Release Date: 08/29/2007
以上輸出中,前面4條是dmidecode命令整體信息,“25 structures occupying 844 bytes.”該行指示該機器的DMI記錄項總共有25條。
后面就是DMI表中各條記錄,每條記錄的輸出格式如下:
Record Header: Handle {record id}, DMI type {dmi type id}, {record size} bytes
Record Value: {multi line record value}
record id: DMI表中每條記錄唯一的標識
dmi type id: 記錄的類型,比如BIOS,Memory等
record size: DMI表中該條記錄的大小
multi line record values: 多行與該DMI類型相關的字段描述
DMI類型
DMI表包含以下DMI類型,每個DMI Type值對應一項硬件信息:
Type Information ---------------------------------------- 0 BIOS 1 System 2 Base Board 3 Chassis 4 Processor 5 Memory Controller 6 Memory Module 7 Cache 8 Port Connector 9 System Slots 10 On Board Devices 11 OEM Strings 12 System Configuration Options 13 BIOS Language 14 Group Associations 15 System Event Log 16 Physical Memory Array 17 Memory Device 18 32-bit Memory Error 19 Memory Array Mapped Address 20 Memory Device Mapped Address 21 Built-in Pointing Device 22 Portable Battery 23 System Reset 24 Hardware Security 25 System Power Controls 26 Voltage Probe 27 Cooling Device 28 Temperature Probe 29 Electrical Current Probe 30 Out-of-band Remote Access 31 Boot Integrity Services 32 System Boot 33 64-bit Memory Error 34 Management Device 35 Management Device Component 36 Management Device Threshold Data 37 Memory Channel 38 IPMI Device 39 Power Supply
根據上表我們亦可知道,可以通過dmidecode命令查到哪些硬件信息,例如要查詢主板(Base Board)的信息,可以執行以下命令:
#dmidecode -t 2 # dmidecode 2.9 SMBIOS 2.4 present. Handle 0x0002, DMI type 2, 8 bytes Base Board Information Manufacturer: LENOVO Product Name: IGT30 Version: REFERENCE Serial Number: 2083601501567
除了使用DMI Type_id作為索引進行查詢外,還可以通過設備關鍵詞查詢,設備關鍵詞與Type_id對應關系如下:
Keyword Types ------------------------------ bios 0, 13 system 1, 12, 15, 23, 32 baseboard 2, 10 chassis 3 processor 4 memory 5, 6, 16, 17 cache 7 connector 8 slot 9
這樣,執行“dmidecode –t baseboard”命令將顯示type_id為2、10項的信息。
使用dmidecode命令查詢內存(RAM)信息
最后來看個使用dmidecode命令的例子,如何使用dmidecode命令查詢內存信息。
首先,可以通過以下命令查詢機器最大支持的內存總量:
#dmidecode -t 16 # dmidecode 2.9 SMBIOS 2.4 present. Handle 0x000D, DMI type 16, 15 bytes Physical Memory Array Location: System Board Or Motherboard Use: System Memory Error Correction Type: None Maximum Capacity: 4 GB Error Information Handle: Not Provided Number Of Devices: 2
從以上輸出可知,該機器理論上支持的最大內存為4G。
然后使用以下命令查詢機器可用的內存:
#grep MemTotal /proc/meminfo MemTotal: 2055764 kB
可以看到機器可用的內存為2G,也即我們可以再擴2G內存。
但是在用的2G內存是怎么組成的?是1條2G內存?是2條1G內存?
我們可以通過以下命令進行查詢:
#dmidecode -t 17 # dmidecode 2.9 SMBIOS 2.4 present. Handle 0x000E, DMI type 17, 27 bytes Memory Device Array Handle: 0x000D Error Information Handle: No Error Total Width: 32 bits Data Width: 32 bits Size: 1024 MB Form Factor: SODIMM Set: 1 Locator: M1 Bank Locator: Bank 0 Type: DDR2 ⋯⋯ Handle 0x000F, DMI type 17, 27 bytes Memory Device Array Handle: 0x000D Error Information Handle: No Error Total Width: 32 bits Data Width: 32 bits Size: 1024 MB ⋯⋯
從以上信息可以看出,該機器插了2條1G的內存。
小結
使用linux系統自帶工具dmidecode可以查看機器硬件信息,較常用到以下幾條命令。
查詢機器型號:
#dmidecode | grep -i product Product Name: TIANYI F41A Product Name: IGT30
查詢內存條數:
#dmidecode -t 17 | grep "Size.*MB" | wc -l 2
查詢物理CPU信息:
#dmidecode -t 4
另外也可通過/proc查詢CPU相關信息。
查詢物理CPU個數:
#cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l 1
查詢CPU核數:
#cat /proc/cpuinfo | grep 'core id'| wc -l 2
本文翻譯自 How To Get Hardware Information On Linux Using dmidecode Command