Skip to content

27 硬件数据的收集

1. 用系统内置的 dmidecode 解析硬件配备

dmidecode 是一种以人可读格式转换计算机的 DMI(有人说是 SMBIOS)表内容的工具。此表包含系统硬件组件的说明,以及其他有用的信息,如序列号和 BIOS 修订版。虽然就报告速度和安全性而言很不错,但这也使得提供的信息可能不可靠。

dmidecode [-t TYPE]

TYPE
    # 更详细的参考 “man dmidecode”
    1 :详细的系统数据,含主板的型号与硬件的基础数据等
    4 :CPU 的相关资料,包括倍频、外频、核心数、核心绪数等
    9 :系统的相关插槽格式,包括 PCI, PCI-E 等等的插槽规格说明
    17:每一个内存插槽的规格,若内有内存,则列出该内存的容量与型号
[root@dev ~]# dmidecode | less
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.7 present.
620 structures occupying 28932 bytes.
Table at 0x000E0010.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
        Vendor: Phoenix Technologies LTD
        Version: 6.00
        Release Date: 05/19/2017
        ……
Handle 0x0002, DMI type 2, 15 bytes
Base Board Information
        Manufacturer: Intel Corporation
        Product Name: 440BX Desktop Reference Platform
        ……
Handle 0x026B, DMI type 127, 4 bytes
End Of Table

2. 硬件资源的收集与分析

内核所侦测到的各项硬件装置,后来就会被记录在 /proc/sys 当中了。

其实核心所侦测到的硬件可能并非完全正确!因为他仅是使用最适当的模块来驱动这个硬件而已,所以有时候难免会误判啦 (虽然机率非常之低)!

除了直接呼叫出 /proc 底下的文件内容之外, 还有一些指令可用,常见的指令有底下这些:

  • gdisk
  • dmesg
  • vmstat:分析系统 (CPU/RAM/IO) 目前的状态
  • lspci:列出整个 PC 系统的 PCI 接口装置
  • lsusb:列出目前系统上面各个 USB 端口口的状态,与连接的 USB 装置
  • iostat:与 vmstat 类似,可实时列出整个 CPU 与接口设备的 Input/Output 状态

2.1 lspci

lspci [options]

Display options
    -v
    -vv

Options to control resolving ID's to names
    -n     直接观察 PCI 的 ID 而不是厂商名称

Options for selection of devices
    -s [[[[<domain>]:]<bus>]:][<device>][.[<func>]]     Show only devices in the specified domain, bus, device and function
[root@dev ~]# lspci 
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
……
02:05.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
03:00.0 USB controller: VMware USB3 xHCI 1.0 Controller
[root@dev ~]# lspci -s 03:00.0 -v
03:00.0 USB controller: VMware USB3 xHCI 1.0 Controller (prog-if 30 [XHCI])
    Subsystem: VMware USB3 xHCI 1.0 Controller
    Physical Slot: 160
    Flags: bus master, fast devsel, latency 64, IRQ 18
    Memory at fd4e0000 (64-bit, non-prefetchable) [size=128K]
    Capabilities: [64] Power Management version 3
    Capabilities: [6c] Express Endpoint, MSI 00
    Capabilities: [a8] MSI: Enable- Count=1/1 Maskable+ 64bit+
    Capabilities: [c0] MSI-X: Enable+ Count=31 Masked-
    Kernel driver in use: xhci_hcd

-s 接的参数就是每个设备的总线、插槽及函数,可以对照/usr/share/hwdata/pci.ids(就是 PCI 的标准 ID 与厂牌名称的对应表)来了解这串数据的意义。

不过,由于硬件的发展太过迅速,所以你的 pci.ids 文件可能会落伍了。可以使用底下的方式来在线更新你的对应文件:

[root@dev ~]# update-pciids 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  254k  100  254k    0     0   3268      0  0:01:19  0:01:19 --:--:--  2752
Done.

2.2 lsusb

lsusb [options]...

options
    -v, --verbose
    -s [[bus]:][devnum]     Show only devices with specified device and/or bus numbers (10进制)
[root@dev ~]# lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
……
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

[root@dev ~]# lsusb -s 004:001 -v

Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Device Descriptor:
……

ID 号码与厂商对照表位于 /usr/share/hwdata/usb.ids 文件。

2.3 iostat

iostat [-c|-d] [-k|-m] [-t] [ device [...] | ALL ] [间隔秒数] [侦测次数]
选项与参数:
-c :仅显示 CPU 的状态;
-d :仅显示储存设备的状态,不可与 -c 一起用;
-k :默认显示的是 block ,这里可以改成 K bytes 的大小来显示;
-m :与 -k 类似,只是以 MB 的单位来显示结果。
-t :显示日期出来;
[root@dev ~]# iostat 
Linux 3.10.0-1062.el7.x86_64 (dev)  12/13/2019  _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.48    0.00    0.36    0.04    0.00   99.13

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.97        25.98        17.73    2025195    1381850
sdb               0.00         0.04         0.00       2800          0
dm-0              1.03        23.22        17.70    1809962    1379441
dm-1              0.00         0.03         0.00       2208          0
  • tps:平均每秒钟的传送次数,与数据传输次数有关,非容量
  • kB_read/s:开机到现在平均的读取单位
  • kB_wrtn/s:开机到现在平均的读取单位
  • kB_read:开机到现在全部的读取单位
# 仅针对 sda ,每两秒钟侦测一次,并且共侦测三次储存装置
[root@dev ~]# iostat -d sda 2 3
Linux 3.10.0-1062.el7.x86_64 (dev)  12/13/2019  _x86_64_    (8 CPU)

# 第一次显示的是“从开机到现在的数据“
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.99        25.91        19.15    2025195    1496529

# 第二次以后所显示的数据则代表两次侦测之间的系统传输值
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.00         0.00         4.00          0          8

3. 了解磁盘的健康状态

磁盘健康状况可以通过 smartd 服务来监测,但是被监测的磁盘也必须要支持 SMART 的协议!

smartctl 指令控制内置于大多数 ATA/SATA 和 SCSI/SAS 硬盘和固态驱动器中的 Self-Monitoring, Analysis and Reporting Technology (SMART) 系统。

smartctl [options] device

options
    -a, --all       Prints all SMART information about the disk
    -t TEST, --test=TEST    Executes TEST immediately.TEST:offline,short,long,conveyance
[root@dev ~]# smartctl -a /dev/sda
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1062.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               VMware,
Product:              VMware Virtual S
Revision:             1.0
User Capacity:        53,687,091,200 bytes [53.6 GB]
Logical block size:   512 bytes
Device type:          disk
Local Time is:        Fri Dec 13 14:54:13 2019 CST
SMART support is:     Unavailable - device lacks SMART capability. # 虚拟机不支持!在物理机上测试 //TODO

=== START OF READ SMART DATA SECTION ===        # 那么下面也就没什么信息了
……
Device does not support Self Test logging

# 进行一次自我检测
[root@dev ~]# smartctl -t offline /dev/sdb
……
Default Self Test Successful

注意:进行磁盘自我检查时,磁盘的 I/O 状态可能会比较频繁。