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 状态可能会比较频繁。