2.6 硬件信息查看

预计阅读时间:18 分钟

📖 目录

学习目标

学完本章后,你将能够:

  • 使用 lscpulspcilsusb 查看 CPU、PCI、USB 设备信息
  • 使用 lshwdmidecode 获取完整的硬件清单
  • 使用 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 虚拟文件系统,以结构化方式暴露内核对象和设备信息

知识关联

原理讲解

📝 为什么 Linux 用 /sys 暴露硬件信息?

/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 如何提前预警磁盘故障?

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/文本)获取完整硬件清单、导出资产报告
dmidecodeDMI/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 便于看启动输出
💡 为什么这些信息重要 ① 驱动加载方式不同:UEFI 机器加载的内核模块、分区表要求(GPT)与传统 BIOS 不同 ② Secure Boot 开启时,第三方内核模块(如 NVIDIA 驱动、DKMS 编译的模块)需要签名,否则加载失败 ③ 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/sdaSATA / SCSISATA 硬盘、SSD
/dev/sdbSATA / SCSI第二块 SATA 盘
/dev/nvme0n1NVMeNVMe SSD(控制器 0,命名空间 1)
/dev/nvme1n1NVMe第二块 NVMe SSD
/dev/vdaVirtIO虚拟机磁盘
/dev/mmcblk0MMCSD 卡、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 输出包含大量正常的内核调试信息。关注 errorfailwarning 关键词——大部分提示是"已处理"的正常状态。
"smartctl 说磁盘健康状态 PASSED,我就放心了"SMART 的 PASSED 只表示没检测到"致命"问题。潜在的机械故障(如马达问题)可能不会被 SMART 捕获。加看 Reallocated_Sector_CtCurrent_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 查看网卡速率。

练习题

  1. (概念)/dev/sda/dev/nvme0n1/dev/vda 分别代表什么类型的磁盘?通过什么接口连接?
  2. (概念)什么是超线程(Hyper-Threading)?lscpu 输出中的 Thread(s) per core 和 Core(s) per socket 分别代表什么?
  3. (实操)在你的系统上运行 lscpu,记录物理核心数、逻辑核心数、L1/L2/L3 缓存大小。
  4. (实操)sudo lshw -short 列出所有硬件设备。找出你的网络接口的型号和驱动。
  5. (实操)sudo smartctl -a /dev/sda 查看你的磁盘健康信息。关注 Reallocated_Sector_Ct、Power_On_Hours、Temperature_Celsius 三个指标。
  6. (探究 🔍)探索 /sys/class/——进入 /sys/class/block/sda/ 查看队列深度、I/O 调度器等磁盘参数。cat /sys/class/block/sda/queue/scheduler 查看当前 I/O 调度器。
  7. (探究 🔍)在你的系统上插拔一个 USB 设备,同时运行 sudo dmesg -W 观察内核检测信息。记录从"插入"到"设备就绪"的完整内核消息。理解 Linux 如何通过 dmesg 报告硬件热插拔事件。
点击查看答案
  1. (概念)`/dev/sda`:SATA/SAS/SCSI 接口的传统硬盘或 SSD(如机械硬盘),通过 AHCI 协议通信。`/dev/nvme0n1`:NVMe 协议的 SSD,通过 PCIe 总线直连,速度最快。`/dev/vda`:虚拟机中的 VirtIO 虚拟磁盘,常见于 KVM 环境。
  2. (概念)超线程(HT)让一个物理核心在操作系统中表现为两个逻辑核心,通过共享执行单元提高利用率。Thread(s) per core = 每个物理核心的逻辑线程数(2 表示启用 HT)。Core(s) per socket = 每个 CPU 插槽的物理核心数。总逻辑核心数 = Sockets × Cores × Threads。
  3. (实操)`lscpu` 输出信息:Socket(s)、Core(s) per socket、Thread(s) per core、L1d(数据缓存)、L1i(指令缓存)、L2、L3 缓存。逻辑核心数 = Socket × Core × Thread。记录你的 CPU 型号和缓存层级大小。
  4. (实操)`sudo lshw -short` 输出硬件列表摘要。网络接口部分关注 "product"(如 Realtek RTL8111)和 "configuration" 中的 driver= 值。也可用 `lspci -k | grep -i -A3 net` 专门查看网卡和驱动。
  5. (实操)`sudo smartctl -a /dev/sda` 输出磁盘 SMART 健康数据。三个关键指标:Reallocated_Sector_Ct(>0 表示已有坏道重映射,持续增长预示磁盘寿命将尽)、Power_On_Hours(通电小时数)、Temperature_Celsius(运行温度,>55°C 偏高)。
  6. (探究 🔍)`/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`。
  7. (探究 🔍)终端 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 负载均衡 的内核模块管理与硬件驱动密切相关

常见问题

GRUB 引导菜单不见了怎么进系统?
启动时按住 Shift(BIOS)或按 Esc(UEFI)可以调出 GRUB 菜单。如果不奏效,可能是 GRUB 超时设为 0。用 live CD 启动,chroot 到原系统,编辑 /etc/default/grub 将 GRUB_TIMEOUT 设为 5-10,运行 update-grub。
systemd-analyze 怎么分析启动慢?
先用 systemd-analyze blame 按耗时排序查看各单元启动时间。再用 systemd-analyze critical-chain 显示关键启动路径。常见启动慢的原因:network-online.target 等待网络、某个服务超时、fstab 中的远程挂载不可达。
initramfs 是做什么的?
initramfs 是一个小型临时根文件系统,包含内核启动早期阶段必需的驱动和工具(磁盘驱动、文件系统模块、LVM/LUKS 组件)。内核先加载 initramfs 到内存,然后它挂载真正的根文件系统。如果 initramfs 缺少某个驱动,启动可能卡在"Waiting for root device"。
↑ 回到顶部