跟硬件相关的命令有uname, lspci,/proc目录下的文件等,有时候Linux/Unix系统下获取有关硬件方面的信息,这个时候,就要用到dmidecode, 使用该命令可以查询BIOS、系统、主板、处理器、内存、缓存等非常重要信息。下面是其常用的几个命令:

# dmidecode | grep 'Product Name'                           // 查看服务器型号
# dmidecode | grep 'Serial Number'                         // 查看主板的序列号
# dmidecode -s system-serial-number                        // 查看系统序列号
# dmidecode -t memory                                          // 查看内存信息
# dmidecode -t 11                                               // 查看OEM信息
# dmidecode | grep -A16 "Memory Device" | grep "Size" |sed 's/^[ \t]*//'  // 现有内存数量和内存大小
# dmidecode | grep "Maximum Capacity" |sed  "s/^[ \t]*//"                     // 最大支持内存容量:


备注:
-t  只显示指定条目的信息
-s  只显示指定DMI字符串关键字的信息

DMI (Desktop Management Interface)

 

dmidecode在 Linux 系统下获取有关硬件方面的信息。dmidecode 遵循 SMBIOS/DMI 标准,以一种可读的方式dump出机器的DMI(Desktop Management Interface)信息, 其输出的信息包括 BIOS、系统、主板、处理器、内存、缓存等等, 既可以得到当前的配置,也可以得到系统支持的最大配置,比如说支持的最大内存数等。

 

1

2

3

4

aptitude install dmidecode # Debian/Ubuntu

yum install dmidecode # Fedora

pacman -S dmidecode # Arch Linux

emerge -av dmidecode # Gentoo

1、查看内存槽数、那个槽位插了内存,大小是多少

 

1

dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range

2、查看最大支持内存数

 

1

dmidecode|grep -P 'Maximum\s+Capacity'

3、查看槽位上内存的速率,没插就是unknown。

 

1

dmidecode|grep -A16 "Memory Device"|grep 'Speed'

dmidecode的输出格式一般如下:

 

1

2

3

4

5

6

7

Handle 0×0002

DMI type 2, 8 bytes

Base Board Information

Manufacturer:Intel

Product Name: C440GX+

Version: 727281-0001

Serial Number: INCY92700942

其中的前三行都称为记录头(recoce Header), 其中包括了:
1、recode id(handle): DMI表中的记录标识符,这是唯一的,比如上例中的Handle 0×0002。
2、dmi type id: 记录的类型,譬如说:BIOS,Memory,上例是type 2,即”Base Board Information”
3、recode size: DMI表中对应记录的大小,上例为8 bytes.(不包括文本信息,所有实际输出的内容比这个size要更大。)
记录头之后就是记录的值:
4、decoded values: 记录值可以是多行的,比如上例显示了主板的制造商(manufacturer)、model、version以及serial Number。
dmidecode的使用方法
1. 最简单的的显示全部dmi信息:

 

1

# dmidecode

这样将输出所有的dmi信息,你可能会被一大堆的信息吓坏,通常可以使用下面的方法。
2.更精简的信息显示:

 

1

# dmidecode -q

-q(–quite) 只显示必要的信息,这个很管用哦。
3.显示指定类型的信息:
通常我只想查看某类型,比如CPU,内存或者磁盘的信息而不是全部的。这可以使用-t(–type TYPE)来指定信息类型:

 

1

2

3

# dmidecode -t bios

# dmidecode -t bios, processor (这种方式好像不可以用,必须用下面的数字的方式)

# dmidecode -t 0,4 (显示bios和processor)

dmidecode到底支持哪些type?
这些可以在man dmidecode里面看到:
文本参数支持:
bios, system, baseboard, chassis, processor, memory, cache, connector, slot
数字参数支持很多:(见附录)
4.通过关键字查看信息:
比如只想查看序列号,可以使用:

 

1

# dmidecode -s system-serial-number

-s (–string keyword)支持的keyword包括:

 

1

2

3

4

5

bios-vendor,bios-version, bios-release-date,

system-manufacturer, system-product-name, system-version, system-serial-number,

baseboard-manu-facturer,baseboard-product-name, baseboard-version, baseboard-serial-number, baseboard-asset-tag,

chassis-manufacturer, chas-sis-version, chassis-serial-number, chassis-asset-tag,

processor-manufacturer, processor-version.

5.示例
5.1 查看当前内存和支持的最大内存
Linux下,可以使用free或者查看meminfo来获得当前的物理内存:

 

1

2

3

4

5

6

7

# free

total used free shared buffers cached

Mem: 8182532 8010792 171740 0 148472 4737896

-/+ buffers/cache: 3124424 5058108

Swap: 4192956 3304 4189652

# grep MemTotal /proc/meminfo

MemTotal: 8182532 kB

这里显示了当前服务器的物理内存是8GB。
服务器到底能扩展到多大的内存?

 

1

2

3

4

5

6

7

8

9

10

11

12

#dmidecode -t 16

# dmidecode 2.7

SMBIOS 2.4 present.

 

Handle 0×0013, DMI type 16, 15 bytes.

Physical Memory Array

Location: System Board Or Motherboard

Use: System Memory

Error Correction Type: Multi-bit ECC

Maximum Capacity: 64 GB (可扩展到64GB)

Error Information Handle: Not Provided

Number Of Devices: 4

但是,事实不一定如此,因此插槽可能已经插满了。也就是我们还必须查清这里的8G到底是4*2GB, 2*4GB还是其他?
如果是4*2GB,那么尽管可以扩展到64GB,但是插槽已经插满,无法扩展了:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

#dmidecode -t 17

# dmidecode 2.7

SMBIOS 2.4 present.

 

Handle 0×0015, DMI type 17, 27 bytes.

Memory Device

Array Handle: 0×0013

Error Information Handle: Not Provided

Total Width: 72 bits

Data Width: 64 bits

Size: 2048 MB 【插槽1有1条2GB内存】

Form Factor: DIMM

Set: None

Locator: DIMM00

Bank Locator: BANK

Type: Other

Type Detail: Other

Speed: 667 MHz (1.5 ns)

Manufacturer:

Serial Number: BZACSKZ001

Asset Tag: RAM82

Part Number: MT9HTF6472FY-53EA2

 

Handle 0×0017, DMI type 17, 27 bytes.

Memory Device

Array Handle: 0×0013

Error Information Handle: Not Provided

Total Width: 72 bits

Data Width: 64 bits

Size: 2048 MB 【插槽2有1条2GB内存】

Form Factor: DIMM

Set: None

Locator: DIMM10

Bank Locator: BANK

Type: Other

Type Detail: Other

Speed: 667 MHz (1.5 ns)

Manufacturer:

Serial Number: BZACSKZ001

Asset Tag: RAM83

Part Number: MT9HTF6472FY-53EA2

 

Handle 0×0019, DMI type 17, 27 bytes.

Memory Device

Array Handle: 0×0013

Error Information Handle: Not Provided

Total Width: 72 bits

Data Width: 64 bits

Size: 2048 MB 【插槽3有1条2GB内存】

Form Factor: DIMM

Set: None

Locator: DIMM20

Bank Locator: BANK

Type: Other

Type Detail: Other

Speed: 667 MHz (1.5 ns)

Manufacturer:

Serial Number: BZACSKZ001

Asset Tag: RAM84

Part Number: MT9HTF6472FY-53EA2

 

Handle 0x001B, DMI type 17, 27 bytes.

Memory Device

Array Handle: 0×0013

Error Information Handle: Not Provided

Total Width: 72 bits

Data Width: 64 bits

Size: 2048 MB 【插槽4有1条2GB内存】

Form Factor: DIMM

Set: None

Locator: DIMM30

Bank Locator: BANK

Type: Other

Type Detail: Other

Speed: 667 MHz (1.5 ns)

Manufacturer:

Serial Number: BZACSKZ001

Asset Tag: RAM85

Part Number: MT9HTF6472FY-53EA2

根据上面输出可以发现,如果要扩展,只有将上面的内存条换成16GB的,才能达到4*16GB=64GB的最大支持内存。
附录:
dmidecode支持的数字参数:
Type Information

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

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

 

转载请注明出处:http://www.ttlsa.com/html/1708.html

一、dmidecode简介

      dmidecode允许你在Linux系统下获取有关硬件方面的信息。dmidecode遵循SMBIOS/DMI标准,其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等。

      DMI(Desktop Management Interface,DMI)就是帮助收集电脑系统信息的管理系统,DMI信息的收集必须在严格遵照SMBIOS规范的前提下进行。SMBIOS(System Management BIOS)是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范。SMBIOS和DMI是由行业指导机构Desktop Management Task Force(DMTF)起草的开放性的技术标准,其中DMI设计适用于任何的平台和操作系统。

DMI充当了管理工具和系统层之间接口的角色。它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。DMI的主要组成部分是Management Information Format(MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。

二、dmidecode的作用

      dmidecode的作用是将DMI数据库中的信息解码,以可读的文本方式显示。由于DMI信息可以人为修改,因此里面的信息不一定是系统准确的信息。

三、dmidecode命令用法

    不带选项执行dmidecode通常会输出所有的硬件信息。dmidecode有个很有用的选项-t,可以指定类型输出相关信息。假如要获得处理器方面的信息,则可以执行:dmidecode -t processor

Usage: dmidecode [OPTIONS]

Options are:

-d:(default:/dev/mem)从设备文件读取信息,输出内容与不加参数标准输出相同。

-h:显示帮助信息。

-s:只显示指定DMI字符串的信息。(string)

-t:只显示指定条目的信息。(type)

-u:显示未解码的原始条目内容。

-- dump-bin FILE: Dump the DMI data to a binary file.

-- from-dump FILE: Read the DMI data from a binary file.

-V:显示版本信息

dmidecode的输出格式一般如下:

Handle 0x0002, DMI type 2, 95 bytes.

Base Board Information

    Manufacturer: IBM

    Product Name: Node1 Processor Card

    Version: Not Specified

    Serial Number: Not Specified

其中记录头(recode header)包括了:

recode id(Handle):DMI表中的记录标识符,这是唯一的,比如上例中的Handle 0x0002.

DMI type id:记录的类型,譬如说:BIOS,Memory,上例是type 2,即“Base Board Information”.

recode size:DMI表中对应记录的大小,上例为95 bytes。(不包括文本信息,所有实际输出的内容比这个size要更大)。记录头之后就是记录的值。

recoded values:记录值可以是多行的,比如上例显示了主板的制造商(Manufacturer)、Product Name、Version以及Serial Number。

1. 最简单的的显示全部dmi信息:

[root@BAIYU_180 ~]# dmidecode
[root@BAIYU_180 ~]# dmidecode|wc -l
6042

这样将输出所有的dmi信息,你可能会被一大堆的信息吓坏,通常可以使用下面的方法。
2.显示指定类型的信息:
通常我只想查看某类型,比如CPU,内存或者磁盘的信息而不是全部的。这可以使用-t(–type TYPE)来指定信息类型:

# dmidecode -t bios
# dmidecode -t bios, processor (这种方式好像不可以用,必须用下面的数字的方式)
# dmidecode -t 0,4 (显示bios和processor)

dmidecode到底支持哪些type?
这些可以在man dmidecode里面看到:
文本参数支持:
bios, system, baseboard, chassis, processor, memory, cache, connector, slot
数字参数支持很多:(见附录)
4.通过关键字查看信息:
比如只想查看序列号,可以使用:

# dmidecode -s system-serial-number

-s (–string keyword)支持的keyword包括:

bios-vendor,bios-version,bios-release-date,

system-manufacturer,system-product-name,system-version,system-serial-number,

baseboard-manu-facturer,baseboard-product-name,baseboard-version,baseboard-serial-number,baseboard-asset-tag,

chassis-manufacturer,chas-sis-version,chassis-serial-number,chassis-asset-tag,

processor-manufacturer,processor-version.

四、实例

查看当前内存和支持的最大内存
Linux下,可以使用free或者查看meminfo来获得当前的物理内存:

[root@SC4304 ~]# free
            total      used      free    shared    buffers    cached
Mem:    132091660    5649612  126442048          0    224492    4052384
-/+ buffers/cache:    1372736  130718924
Swap:    209715192          0  209715192
[root@SC4305 ~]# free -m
            total      used      free    shared    buffers    cached
Mem:        128995      6230    122765          0        259      4615
-/+ buffers/cache:      1354    127640
Swap:      204799          0    204799

这里显示了当前服务器的物理内存是128GB。
服务器到底能扩展到多大的内存?

[root@SC4304 ~]# dmidecode -t 16
# dmidecode 2.11
# SMBIOS entry point at 0xb89a5000
SMBIOS 2.7 present.
 
Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
    Location: System Board Or Motherboard
    Use: System Memory
    Error Correction Type: Multi-bit ECC
    Maximum Capacity: 1536 GB
    Error Information Handle: Not Provided
    Number Of Devices: 24

从上面的信息我们可以看出:

内存插槽数:24个

最大扩展内存:1536G

单跟内存条最大:64G

现在内存为:128G

但是,我们还必须查清这里的128G到底是16*8GB, 2*64GB还是其他?就是查看已使用的插槽数
如果是2*64GB,那么可以扩展到1536GB,但是如果插槽已经插满,无法扩展了:

1、查看内存槽数、哪个槽位插了内存,大小是多少

 [root@SC4305 ~]# dmidecode|grep -A5 'Memory Device'|grep Size
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed
    Size: No Module Installed

2、查看最大支持内存数

 [root@SC4305 ~]# dmidecode|grep 'Maximum Capacity'
    Maximum Capacity: 1536 GB

3、查看槽位上内存的速率,没插就是unknown。

 [root@SC4305 ~]# dmidecode|grep -A16 'Memory Device'|grep 'Speed'
    Speed: 1600 MHz
    Speed: 1600 MHz
    Speed: 1600 MHz
    Speed: 1600 MHz
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: 1600 MHz
    Speed: 1600 MHz
    Speed: 1600 MHz
    Speed: 1600 MHz
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown
    Speed: Unknown

五、一个查看基本硬件信息的shell脚本

[root@SC4306 test]# cat test.sh
#!/bin/bash 
echo "IP:" 
ifconfig |grep "inet addr"|grep -v 127.0.0.1|awk '{print $2}'|awk -F ':' '{print $2}' 
echo "Product Name:" 
dmidecode |grep Name 
echo "CPU Info:" 
dmidecode |grep -i cpu|grep -i version|awk -F ':' '{print $2}' 
echo "Disk Info:" 
parted -l|grep 'Disk /dev/sd'|awk -F ',' '{print "  ",$1}' 
echo "Network Info:" 
lspci |grep Ethernet 
echo "Memory Info:" 
dmidecode|grep -A5 "Memory Device"|grep Size|grep -v No 
echo "Memory number:"`dmidecode|grep -A5 "Memory Device"|grep Size|grep -v No|wc -l`

输出结果:

[root@SC4306 test]# bash test.sh
IP:
10.0.17.6
10.0.250.6
Product Name:
    Product Name: PowerEdge R720
    SKU Number: SKU=NotProvided;ModelName=PowerEdge R720
    Product Name: 0DCWD1
CPU Info:
      Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
      Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
Disk Info:
    Disk /dev/sda: 1074GB
    Disk /dev/sdb: 18.9TB
Network Info:
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet PCIe
01:00.1 Ethernet controller: Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet PCIe
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet PCIe
02:00.1 Ethernet controller: Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet PCIe
Memory Info:
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
    Size: 16384 MB
Memory number:8