2.6 硬件信息查看
预计阅读时间:18 分钟
📖 目录
学习目标
学完本章后,你将能够:
- 使用
lscpu、lspci、lsusb查看 CPU、PCI、USB 设备信息 - 使用
lshw或dmidecode获取完整的硬件清单 - 使用
smartctl检查磁盘健康状态 - 使用
dmesg查看内核检测到的硬件信息 - 通过
/sys/和/proc/直接读取硬件参数 - 理解块设备命名规则(sda、nvme0n1、vd*)
核心知识
- lscpu——查看 CPU 架构信息(型号、核心数、缓存、频率)
- lspci——列出所有 PCI 设备(显卡、网卡、NVMe SSD 等)
- lsusb——列出所有 USB 设备(键盘、鼠标、U盘)
- lshw——完整的硬件清单工具(List Hardware)
- dmidecode——读取 DMI/SMBIOS 表,获取 BIOS、主板、内存槽等固件信息
- smartctl——SMART 磁盘健康监控工具(Self-Monitoring, Analysis and Reporting Technology)
- dmesg——显示内核环缓冲区消息,包括启动时检测到的硬件
- /sys/——sysfs 虚拟文件系统,以结构化方式暴露内核对象和设备信息
知识关联
- 前置知识:2.3:系统信息与性能查看 的 /proc/cpuinfo 提供了部分硬件信息;1.4:基本文件操作命令 的 /dev/ 设备文件
- 后续影响:硬件知识对 2.9:Git 版本控制(磁盘管理)、4.13:服务器初始化规范(RAID)、5.7:HAProxy 负载均衡(内核模块)很重要
- 配套技术:1.9:重定向与管道 的管道组合硬件信息查询结果
- 在整个体系中的位置:了解硬件是系统管理的基础——不知道磁盘型号怎么判断 I/O 瓶颈?不知道网卡型号怎么排查网络问题?
原理讲解
/proc 是进程视角的虚拟文件系统(1991 年引入),/sys(sysfs,2003 年引入)是设备视角的虚拟文件系统。Linux 最初把所有内核信息都塞进 /proc,导致它变得臃肿不堪。sysfs 的设计目标是结构化地组织设备信息:每个设备对应 /sys/devices/ 下的一个目录,/sys/class/ 按功能类别(block、net、tty)建立符号链接索引。这样用户空间工具可以用统一的方式访问设备参数——cat /sys/class/net/eth0/speed 读取网卡速率,和读取普通文件一样简单。sysfs 还支持可写节点——echo bfq > /sys/block/sda/queue/scheduler 可以直接切换 I/O 调度器,无需重启。
SMART(Self-Monitoring, Analysis and Reporting Technology)是硬盘固件内置的监控系统。它持续跟踪数十项指标,关键的有:① Reallocated_Sector_Ct(坏道重映射数)——当磁盘发现坏扇区时自动用备用扇区替换,这个值 > 0 意味着磁盘已经开始"自愈",是寿命将尽的信号;② Current_Pending_Sector(不稳定扇区)——读取多次才能成功的扇区,可能是坏道的前兆;③ Temperature_Celsius——SSD 在高温下写入放大增加,机械硬盘高温加速磁介质老化。SMART 无法预测所有故障(如马达突然卡死),但能提前 24-48 小时预警大多数渐进式退化——这就是为什么生产服务器要配置 smartd 定期自检。
/dev/sda(SATA)、/dev/nvme0n1(NVMe)、/dev/vda(VirtIO)的命名反映了硬件接口的演进:① sd 最初指 SCSI disk(SCSI 是服务器标准接口),后来 SATA 硬盘也沿用此命名(因为 SATA 兼容 SCSI 命令集);② nvme 命名包含控制器编号(nvme0)和命名空间编号(n1),NVMe SSD 可以有多个命名空间(类似分区但更底层),每个命名空间可以独立管理;③ vd 是 Virtual block Device,KVM/QEMU 虚拟机使用 VirtIO 协议的虚拟磁盘。分区编号规则:SATA 盘 /dev/sda1,NVMe 盘 /dev/nvme0n1p1(加 p 前缀避免与命名空间编号混淆)。
1. CPU 信息——lscpu 和 /proc/cpuinfo
# lscpu —— 人类友好的 CPU 信息
lscpu
# 输出: Architecture: x86_64
# 输出: CPU op-mode(s): 32-bit, 64-bit
# 输出: Byte Order: Little Endian
# 输出: CPU(s): 12
# 输出: On-line CPU(s) list: 0-11
# 输出: Vendor ID: GenuineIntel
# 输出: Model name: Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz
# 输出: CPU family: 6
# 输出: Model: 165
# 输出: Thread(s) per core: 2
# 输出: Core(s) per socket: 4
# 输出: Socket(s): 1
# 输出: NUMA node(s): 1
# 输出: L1d cache: 192 KiB
# 输出: L1i cache: 128 KiB
# 输出: L2 cache: 1 MiB
# 输出: L3 cache: 12 MiB
# 输出: CPU max MHz: 5000.0000
# 输出: CPU min MHz: 800.0000
# /proc/cpuinfo —— 更原始的数据
cat /proc/cpuinfo | grep "model name" | head -1
# 输出: model name : Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz
cat /proc/cpuinfo | grep -c "processor" # 逻辑核心数
# 输出: 8
cat /proc/cpuinfo | grep "cpu cores" | uniq # 物理核心数
# 输出: cpu cores : 4
2. PCI 和 USB 设备——lspci 和 lsusb
# lspci —— PCI 设备列表(显卡、网卡、NVMe、声卡)
lspci
# 输出: 00:00.0 Host bridge: Intel Corporation ...
# 输出: 00:02.0 VGA compatible controller: Intel ...
# 输出: 00:14.0 USB controller: Intel Corporation
# 输出: 00:1f.6 Ethernet controller: Intel I219-V
# 输出: 02:00.0 Non-Volatile memory controller: ...
lspci -v | grep -E "(VGA|Ethernet|Audio)" -A 1 # 详细某类设备
lspci -s 00:02.0 -v # 查看特定设备详情
lspci -k # 显示内核驱动
lspci -nn # 显示设备厂商/设备 ID
# lsusb —— USB 设备列表
lsusb
# 输出: Bus 001 Device 003: ID 046d:c52b Logitech, Inc.
# 输出: Bus 001 Device 005: ID 8087:0033 Intel Corp.
lsusb -t # 树形显示 USB 拓扑
lsusb -v -d 046d:c52b # 特定设备详情
3. lshw——完整的硬件清单
# lshw —— 硬件清单(需要 sudo)
sudo lshw
# 输出: (输出完整的硬件树,按 q 分页浏览)
# 查看特定类别
sudo lshw -short # 简洁表格
# 输出: H/W path Device Class Description
# 输出: /0/0 memory 128KiB BIOS
# 输出: /0/4 processor Intel Core i7-10750H
# 输出: /0/23 memory 32GiB System Memory
sudo lshw -class processor # 仅 CPU
sudo lshw -class memory # 仅内存
sudo lshw -class disk # 仅磁盘
sudo lshw -class network # 仅网络
| 工具 | 数据来源 | 输出格式 | 适用场景 |
|---|---|---|---|
lshw | /sys、/proc、DMI | 结构化树形(HTML/JSON/文本) | 获取完整硬件清单、导出资产报告 |
dmidecode | DMI/SMBIOS 表(固件) | 键值对文本 | 查看 BIOS、内存槽、序列号等固件信息 |
lscpu / lspci / lsusb | /sys、/proc | 分类简洁输出 | 快速查看特定类别(CPU/PCI/USB) |
4. dmidecode——读取 BIOS 和固件信息
DMI(Desktop Management Interface)/ SMBIOS 是主板固件提供的数据表。dmidecode 读取这些数据。
# dmidecode(需要 sudo)
sudo dmidecode -t bios # BIOS 版本和日期
# 输出: # dmidecode 3.5
# 输出: Getting SMBIOS data from sysfs.
# 输出: SMBIOS 3.3.0 present.
# 输出: Handle 0x0000, DMI type 0, 26 bytes
# 输出: BIOS Information
# 输出: Vendor: American Megatrends Inc.
# 输出: Version: 1.2.3
# 输出: Release Date: 01/15/2024
sudo dmidecode -t system # 系统制造商、产品名、序列号
# 输出: System Information
# 输出: Manufacturer: Dell Inc.
# 输出: Product Name: Precision 7750
sudo dmidecode -t baseboard # 主板信息
sudo dmidecode -t memory # 内存槽信息(频率、大小、型号)
# 输出: Memory Device
# 输出: Size: 16384 MB
# 输出: Type: DDR4
# 输出: Speed: 3200 MT/s
sudo dmidecode -t processor # CPU 信息(比 lscpu 更详细)
# 查看 BIOS 版本
sudo dmidecode -s bios-version
# 输出: 1.2.3
# 查看系统序列号
sudo dmidecode -s system-serial-number
# 输出: ABC123456789
# 常见场景:查看支持的最大内存
sudo dmidecode -t memory | grep -E "Maximum Capacity|Number Of Devices"
# 输出: Maximum Capacity: 64 GB
# 输出: Number Of Devices: 2
固件类型与启动方式——BIOS 还是 UEFI:dmidecode 不仅能看硬件,还能确定这台机器是传统 BIOS 还是 UEFI 启动,以及 Secure Boot 是否开启——这在排查启动问题和双系统安装时非常有用。
# 查看固件类型和版本
sudo dmidecode -t 0 | grep -E "Vendor|Version|Release Date"
# 输出: Vendor: American Megatrends Inc.
# 输出: Version: 1.2.3
# 输出: Release Date: 01/15/2024
# 更直接的判断:/sys/firmware/ 下有什么
ls /sys/firmware/
# 输出: acpi dmi efi memmap
# 有 efi 目录 → UEFI 启动;没有 → 传统 BIOS 启动
# 检测 Secure Boot 状态
mokutil --sb-state
# 输出: SecureBoot enabled
# (未安装 mokutil 时:)
dmesg | grep -i "secure boot" | head -3
# 输出: [ 0.000000] Secure boot enabled
# UEFI 机器的启动项管理(efibootmgr,需安装)
efibootmgr
# 输出: BootCurrent: 0001
# 输出: Timeout: 5 seconds
# 输出: BootOrder: 0001,0000,0002
# 输出: Boot0000* Windows Boot Manager
# 输出: Boot0001* ubuntu
# 输出: Boot0002* UEFI: SanDisk USB
# 调整启动顺序(把 U 盘排到最前做一次系统救援)
sudo efibootmgr -o 0002,0001,0000
sudo efibootmgr -o 0001,0000,0002 # 改回来
# 查看内核启动命令行(GRUB 传给内核的参数)
cat /proc/cmdline
# 输出: BOOT_IMAGE=/boot/vmlinuz-6.8.0-31-generic root=UUID=... quiet splash
# 含 quiet splash 是 Ubuntu 默认图形化启动;服务器常去掉 quiet 便于看启动输出
cat /proc/cmdline 是排查"启动参数有没有生效"的第一手证据。5. smartctl——磁盘健康状态检查
SMART(Self-Monitoring, Analysis and Reporting Technology)是硬盘内建的自我监控技术,可以提前预警磁盘故障。
# 查看磁盘 SMART 信息(需要 sudo)
sudo smartctl -a /dev/sda # 完整 SMART 信息
# 输出: smartctl 7.3 2024-05-28 r...
# 输出: Device Model: Samsung SSD 980 PRO 1TB
# 输出: Serial Number: S6P1NG0R123456
# 输出: Firmware Version: 5B2QGXA7
# 输出: SMART overall-health self-assessment test result: PASSED
sudo smartctl -H /dev/sda # 健康状态摘要
# 输出: SMART overall-health self-assessment test result: PASSED
# SMART 关键指标解读:
# Reallocated_Sector_Ct :重新分配的扇区数(>0 表示坏道)
# Current_Pending_Sector :待处理的扇区数(>0 表示不稳定)
# Uncorrectable_Sector_Ct :不可纠正的扇区数(>0 = 数据已丢失)
# Temperature_Celsius :磁盘温度(>55°C 需要注意)
# Power_On_Hours :累计通电时间
# Raw_Read_Error_Rate :读取错误率
# 更友好的输出
sudo smartctl -A /dev/sda | grep -E "Reallocated|Pending|Uncorrectable|Temperature|Hours"
# 输出: 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
# 输出: 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 8760
# 输出: 194 Temperature_Celsius 0x0022 058 058 000 Old_age Always - 42
# 启动 SMART 长期自检
sudo smartctl -t long /dev/sda
# 输出: A long self-test in progress, please wait 120 minutes
# 等待自检完成(可能需要几小时),然后查看结果
sudo smartctl -l selftest /dev/sda
# 输出: Num Test_Description Status Remaining LifeTime(hours)
# 输出: # 1 Extended offline Completed without error 00% 8760
# 查看磁盘型号、固件版本、序列号
sudo smartctl -i /dev/sda
# 输出: Device Model: Samsung SSD 980 PRO 1TB
# 输出: Serial Number: S6P1NG0R123456
# 输出: Firmware Version: 5B2QGXA7
6. dmesg——内核启动信息和设备检测
# dmesg —— 内核环缓冲区消息(包含硬件检测信息)
dmesg | head -20 # 系统启动早期信息
# 输出: [ 0.000000] Linux version 6.8.0-31-generic ...
# 输出: [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz ...
# 输出: [ 0.000000] x86/fpu: Supporting XSAVE feature 0x001
dmesg | grep -i "CPU" # CPU 相关消息
dmesg | grep -i "usb" # USB 设备检测
dmesg | grep -i "sda\|nvme\|mmc" # 磁盘检测
dmesg | grep -i "error\|fail" # 硬件失败信息
# 实时跟踪新硬件事件
sudo dmesg -W # Watch 模式
# 然后插拔一个 U 盘——观察内核检测到新设备的消息
# 查看内存检测结果
dmesg | grep -i "Memory"
# 输出: [ 0.000000] Memory: 32630124K/33554432K available (14336K kernel code)
7. 块设备命名规则——sda vs nvme0n1 vs vda
| 名称 | 接口 | 例子 |
|---|---|---|
/dev/sda | SATA / SCSI | SATA 硬盘、SSD |
/dev/sdb | SATA / SCSI | 第二块 SATA 盘 |
/dev/nvme0n1 | NVMe | NVMe SSD(控制器 0,命名空间 1) |
/dev/nvme1n1 | NVMe | 第二块 NVMe SSD |
/dev/vda | VirtIO | 虚拟机磁盘 |
/dev/mmcblk0 | MMC | SD 卡、eMMC 存储 |
分区编号:/dev/sda1 = 第一块 SATA 盘的第一个分区。/dev/nvme0n1p2 = 第一块 NVMe 盘的第二个分区。
8. /sys/ 文件系统——设备信息的结构化窗口
/proc/ 是进程视角,/sys/(sysfs)则是设备视角:内核把每个设备组织成 /sys/devices/ 树,再通过 /sys/class/ 按功能类别建立索引(block、net、drm、thermal 等)。
# /sys/class/ 下的主要类别
ls /sys/class/
# 输出: block net drm thermal scsi_host hwmon power_supply tty ...
# 网卡参数:速率、MAC、协商状态
cat /sys/class/net/eth0/speed
# 输出: 1000 # 单位 Mbps,1000 = 千兆
cat /sys/class/net/eth0/address
# 输出: 52:54:00:12:34:56 # MAC 地址
cat /sys/class/net/eth0/operstate
# 输出: up
# 磁盘参数:I/O 调度器、队列深度
cat /sys/class/block/sda/queue/scheduler
# 输出: [mq-deadline] none
# 方括号内是当前生效的调度器
cat /sys/class/block/sda/queue/nr_requests
# 输出: 128 # 每队列最大请求数
# NVMe 盘的 SMART 信息也暴露在 sysfs 中
cat /sys/class/nvme/nvme0/device/smart_critical_warning 2>/dev/null
# 输出: 0 # 非 0 表示有严重警告
# 温度传感器(hwmon)
ls /sys/class/hwmon/
# 输出: hwmon0 hwmon1
cat /sys/class/hwmon/hwmon1/name
# 输出: coretemp # CPU 温度传感器
cat /sys/class/hwmon/hwmon1/temp1_input
# 输出: 42000 # 单位毫摄氏度 = 42°C
# 配合 watch 实时监控网卡速率(-n 1 每秒刷新)
watch -n 1 cat /sys/class/net/eth0/statistics/rx_bytes
9. 硬件健康监控实战——从巡检到故障处理
单次查看硬件信息还不够,生产环境需要"持续监控 + 提前预警"。把本章工具组合成一套健康巡检流程:
# 1. 温度监控(sensors,需安装 lm-sensors)
sudo apt install lm-sensors
sudo sensors-detect --auto # 探测传感器芯片
sensors
# 输出: coretemp-isa-0000
# 输出: Package id 0: +42.0°C (high = +100.0°C, crit = +100.0°C)
# 输出: CPU 42°C,风扇转速:fan1: 1200 RPM
# 2. 磁盘 SMART 守护进程(smartd)——持续监测,坏了自动告警
sudo apt install smartmontools
# 编辑 /etc/smartd.conf,取消注释并修改为:
# /dev/sda -a -o on -S on -s (S/../.././02|L/../../7/03) -m admin@example.com
# 解释:-a 全指标,-s 每周日 03:00 长自检,-m 出问题发邮件
sudo systemctl enable --now smartd
sudo smartctl -l selftest /dev/sda # 查看自检结果
# 3. 排查"磁盘 I/O 变慢"的硬件视角
dmesg | grep -i "error\|fail" | tail -10
# 输出: [ 12345.678] sd 0:0:0:0: [sda] Add. Sense: Unrecovered read error
# 出现 Unrecovered read error → 磁盘硬件问题,准备更换
smartctl -A /dev/sda | grep -E "Reallocated|Pending|CRC"
# 输出: 5 Reallocated_Sector_Ct ... 0
# 输出: 197 Current_Pending_Sector ... 2 ← 2 个待重映射扇区
# 结合判断:pending + read error → 磁盘寿命告警,立即备份
# 4. 更换磁盘前的确认清单
# ① smartctl -a 记录序列号、固件版本(采购替换件用)
# ② df -h 确认分区和挂载点(备份范围)
# ③ lsblk 确认设备路径(避免拔错盘)
# ④ fdisk -l /dev/sda 记录分区表
# ⑤ 备份完成后 sudo hdparm -y /dev/sda 让盘片停转再物理拔出(热插拔场景)
示例代码
# 练习 1:CPU 信息
lscpu | head -15
# 输出: Architecture: x86_64
# 输出: CPU(s): 8
# 输出: Model name: Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz
cat /proc/cpuinfo | grep -c "processor"
# 输出: 8
echo "CPU 核心数: $(nproc)"
# 输出: CPU 核心数: 8
# 练习 2:PCI 和 USB
lspci | head -10
# 输出: 00:00.0 Host bridge: Intel Corporation
# 输出: 00:02.0 VGA compatible controller: Intel
lspci | grep -i "VGA" # 显卡
# 输出: 00:02.0 VGA compatible controller: Intel Corporation ...
lspci | grep -i "Ethernet" # 网卡
# 输出: 00:1f.6 Ethernet controller: Intel I219-V
lsusb
# 输出: Bus 001 Device 003: ID 046d:c52b Logitech, Inc.
# 练习 3:磁盘信息
lsblk # 块设备树
# 输出: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
# 输出: sda 8:0 0 931.5G 0 disk
# 输出: ├─sda1 8:1 0 512M 0 part /boot/efi
# 输出: └─sda2 8:2 0 931G 0 part /
lsblk -f # 包含文件系统类型和 UUID
# 输出: NAME FSTYPE FSVER LABEL UUID FSAVAIL
# 输出: sda2 ext4 1.0 a1b2c3d4-e5f6-...
# 练习 4:内存信息
sudo dmidecode -t memory | grep -E "Size|Type|Speed|Manufacturer" | head -10
# 输出: Size: 16384 MB
# 输出: Type: DDR4
# 输出: Speed: 3200 MT/s
free -h
# 输出: total used free shared buff/cache
# 输出: Mem: 31G 8.2G 16G 1.2G 6.8G
# 练习 5:dmesg
dmesg | grep -i "sda" | head -5
# 输出: [ 1.234567] sd 0:0:0:0: [sda] 1953525168 512-byte logical blocks
# 插拔一个 U 盘后立刻运行:
# sudo dmesg -W | head -20
# 练习 6:系统制造商和型号
sudo dmidecode -t system | grep -E "Manufacturer|Product Name|Serial"
# 输出: Manufacturer: Dell Inc.
# 输出: Product Name: Precision 7750
sudo dmidecode -s bios-version
# 输出: 1.2.3
常见错误
| 错误/误区 | 解决方案 |
|---|---|
| "lscpu 显示 8 CPUs 以为有 8 个物理核心" | lscpu 的 CPU(s) 是逻辑核心数(包括超线程)。要看物理核心数用 lscpu | grep "Core(s) per socket"。 |
| "lshw 和 dmidecode 都装了吗" | lshw 可能未预装:sudo apt install lshw。dmidecode 通常已装。smartctl 需要 sudo apt install smartmontools。 |
| "dmesg 看到很多奇怪的信息以为系统出问题了" | dmesg 输出包含大量正常的内核调试信息。关注 error、fail、warning 关键词——大部分提示是"已处理"的正常状态。 |
| "smartctl 说磁盘健康状态 PASSED,我就放心了" | SMART 的 PASSED 只表示没检测到"致命"问题。潜在的机械故障(如马达问题)可能不会被 SMART 捕获。加看 Reallocated_Sector_Ct 和 Current_Pending_Sector 的具体数值。如果 > 0,建议备份。 |
| "把 USB 设备拔掉后 lsusb 还显示" | 可能系统还在检测,或者有内置 USB 设备(蓝牙、摄像头)。用 lsusb -t 看拓扑结构识别物理端口。 |
最佳实践
| # | 建议 | 说明 |
|---|---|---|
| 1 | 定期检查磁盘 SMART 状态 | 写一个 cron 脚本每月检查一次 sudo smartctl -H /dev/sda,如果 FAILED 则发邮件告警。SMART 可以提前 24-48 小时预警多数磁盘故障。 |
| 2 | 文档化你的硬件配置 | 运行 sudo lshw -short > ~/hardware-inventory.txt 保存。升级或排查问题时做参考。 |
| 3 | 用 dmesg -W 排查硬件插入问题 | 如果 U 盘或外接设备不工作,先 sudo dmesg -W,然后插入设备。如果 dmesg 完全没有输出,说明设备可能没被识别。 |
| 4 | 区分逻辑核心和物理核心 | 采购服务器时看物理核心数(Core(s) per socket × Socket(s))。超线程(Thread(s) per core)只提供约 20-30% 的性能增益。 |
| 5 | 使用 /sys/ 查看设备参数 | ls /sys/class/ 列出所有设备类别(drm、net、block 等)。cat /sys/class/net/eth0/speed 查看网卡速率。 |
练习题
- (概念)
/dev/sda、/dev/nvme0n1、/dev/vda分别代表什么类型的磁盘?通过什么接口连接? - (概念)什么是超线程(Hyper-Threading)?lscpu 输出中的 Thread(s) per core 和 Core(s) per socket 分别代表什么?
- (实操)在你的系统上运行
lscpu,记录物理核心数、逻辑核心数、L1/L2/L3 缓存大小。 - (实操)用
sudo lshw -short列出所有硬件设备。找出你的网络接口的型号和驱动。 - (实操)用
sudo smartctl -a /dev/sda查看你的磁盘健康信息。关注 Reallocated_Sector_Ct、Power_On_Hours、Temperature_Celsius 三个指标。 - (探究 🔍)探索
/sys/class/——进入/sys/class/block/sda/查看队列深度、I/O 调度器等磁盘参数。cat /sys/class/block/sda/queue/scheduler查看当前 I/O 调度器。 - (探究 🔍)在你的系统上插拔一个 USB 设备,同时运行
sudo dmesg -W观察内核检测信息。记录从"插入"到"设备就绪"的完整内核消息。理解 Linux 如何通过 dmesg 报告硬件热插拔事件。
点击查看答案
- (概念)`/dev/sda`:SATA/SAS/SCSI 接口的传统硬盘或 SSD(如机械硬盘),通过 AHCI 协议通信。`/dev/nvme0n1`:NVMe 协议的 SSD,通过 PCIe 总线直连,速度最快。`/dev/vda`:虚拟机中的 VirtIO 虚拟磁盘,常见于 KVM 环境。
- (概念)超线程(HT)让一个物理核心在操作系统中表现为两个逻辑核心,通过共享执行单元提高利用率。Thread(s) per core = 每个物理核心的逻辑线程数(2 表示启用 HT)。Core(s) per socket = 每个 CPU 插槽的物理核心数。总逻辑核心数 = Sockets × Cores × Threads。
- (实操)`lscpu` 输出信息:Socket(s)、Core(s) per socket、Thread(s) per core、L1d(数据缓存)、L1i(指令缓存)、L2、L3 缓存。逻辑核心数 = Socket × Core × Thread。记录你的 CPU 型号和缓存层级大小。
- (实操)`sudo lshw -short` 输出硬件列表摘要。网络接口部分关注 "product"(如 Realtek RTL8111)和 "configuration" 中的 driver= 值。也可用 `lspci -k | grep -i -A3 net` 专门查看网卡和驱动。
- (实操)`sudo smartctl -a /dev/sda` 输出磁盘 SMART 健康数据。三个关键指标:Reallocated_Sector_Ct(>0 表示已有坏道重映射,持续增长预示磁盘寿命将尽)、Power_On_Hours(通电小时数)、Temperature_Celsius(运行温度,>55°C 偏高)。
- (探究 🔍)`/sys/class/block/sda/queue/` 包含磁盘 I/O 参数。`cat scheduler` 显示 I/O 调度器(如 [mq-deadline] 或 [none])。NVMe SSD 推荐 none(让硬件自行调度),机械硬盘推荐 mq-deadline 或 bfq。修改:`echo bfq > /sys/class/block/sda/queue/scheduler`。
- (探究 🔍)终端 A 运行 `sudo dmesg -W`(等待新消息),插入 USB 设备后观察内核消息序列:USB 插入 → usb 核心检测 → 新设备发现 → 驱动匹配加载 → 设备节点创建(/dev/sdX)。`-W` 类似 `tail -f`,持续输出新消息。dmesg 是热插拔排障第一工具。
学习检查点
学完本章后,请检验自己是否掌握以下内容:
| 检查项 | 自测问题 | 验证方法 |
|---|---|---|
| 概念理解 | 能用自己的话解释 /proc 和 /sys 虚拟文件系统的作用 | 尝试向他人讲解 |
| 命令操作 | 能不查文档使用 lscpu、lspci、lsusb、lshw 查看硬件信息 | 在终端实际执行 |
| 原理掌握 | 能说出 dmidecode 读取 BIOS 固件信息的工作原理 | 画出数据来源图 |
| 故障排查 | 能独立使用 smartctl 检查磁盘健康状态 | 模拟检查并分析 |
| 最佳实践 | 能说明为什么查看硬件信息应该优先使用 lscpu/lspci 而不是打开机箱 | 对比不同查看方式 |
本章总结
硬件信息查看是系统管理员的必备技能。Linux 提供了一整套工具——从 CPU(lscpu)到磁盘(smartctl)、从 PCI 设备(lspci)到固件(dmidecode)。结合 /proc/ 和 /sys/ 虚拟文件系统,你可以获取系统中几乎任何硬件组件的详细信息。掌握这些工具,你就不再需要打开机箱盖来看硬件型号了。
速查表
| 概念 | 一句话定义 |
|---|---|
| lscpu | 查看 CPU 架构、核心数、缓存等详细信息 |
| lspci | 列出所有 PCI/PCIe 设备(显卡、网卡、NVMe) |
| lsusb | 列出 USB 设备(键盘、鼠标、外置存储) |
| lshw | 完整硬件清单(CPU、内存、磁盘、网络等) |
| dmidecode | 读取 BIOS/固件的 DMI 信息(内存槽、序列号) |
| smartctl | 磁盘 SMART 健康监控(坏道、温度、通电时间) |
| dmesg | 内核环缓冲区消息(硬件检测和驱动加载日志) |
下一步:进入 2.7:日志与故障排查「日志与故障排查」,学习日志分析和系统排故方法。
延伸阅读
- smartmontools 官方文档——SMART 监控工具的完整配置指南
- Arch Wiki: SMART——详细的 SMART 解读和最佳实践
- 命令:
sensors(需安装 lm-sensors 包)——查看 CPU 温度、风扇转速、电压 - 命令:
edid-decode(需安装)——解码显示器的 EDID 信息 - 实践建议:购买新硬件前,先在 Linux 上用 Live USB 启动测试——
lspci -k检查驱动是否被内核支持。这是避免"Linux 兼容性"踩坑的最佳方法。 - 相关章节:2.3:系统信息与性能查看 的 /proc/cpuinfo 和 /proc/meminfo 提供了软件视角的硬件信息;4.13:服务器初始化规范 的 RAID 磁盘阵列需要理解磁盘硬件特性;5.7:HAProxy 负载均衡 的内核模块管理与硬件驱动密切相关