hardware management
Linux 硬件管理
1. CPU 和内存相关
lscpu
top
/htop
free
vmstat
numactl
2. 硬盘与存储设备
lsblk
fdisk
parted
blkid
df
du
mount
/umount
smartctl
(smartmontools 工具包)hdparm
2.1 lsblk
lsblk (list block devices) 是一个 Linux 命令行工具,用于列出系统中所有可用的块设备信息,比如硬盘、固态硬盘 (SSD)、U盘、分区以及逻辑卷等。它会以树状结构显示这些设备及其分区、逻辑卷或 RAID 阵列之间的层级关系。
好的,这是 lsblk
命令的常用选项列表,没有具体的例子:
常用选项:
-a
,--all
:显示所有块设备,包括空设备或通常隐藏的设备。-b
,--bytes
:以字节为单位显示设备大小。-d
,--nodeps
:不打印设备的从属设备(例如,不显示磁盘下的分区)。-D
,--discard
:显示设备的丢弃(TRIM/UNMAP)功能。-f
,--fs
:显示文件系统信息(文件系统类型、UUID、卷标和挂载点)。-J
,--json
:以 JSON 格式输出信息。-m
,--perms
:显示设备的所有者、组和权限信息。-l
,--list
:以列表格式而不是默认的树状结构输出。-o <columns>
,--output <columns>
:指定要显示的列。如NAME,SIZE,FSTYPE,MOUNTPOINTS,UUID
等。-p
,--paths
:显示完整的设备路径。
2.2 blkid
blkid
是一个 Linux 命令行工具,主要用于查找和显示块设备的属性,比如 UUID、LABEL 和 FSTYPE。与侧重于设备层级结构的 lsblk
不同,blkid
专注于块设备的文件系统识别。
blkid
主要用于:
- 识别文件系统:它扫描块设备,查找已知的文件系统签名。
- 检索唯一标识符:它提供在块设备上找到的文件系统的 UUID(通用唯一标识符)、LABEL(文件系统标签)和 FSTYPE(文件系统类型)。这些标识符对于可靠地挂载文件系统至关重要,特别是在
/etc/fstab
文件中,因为设备名(如/dev/sdb1
)在重启或硬件修改后可能会改变。
当你运行 blkid
命令时,它通常会为每个识别到的块设备输出一行信息,显示:
- 设备路径:块设备的完整路径(例如,
/dev/sda1
)。 - **UUID (Universally Unique Identifier)**:分配给文件系统的唯一十六进制字符串。这是识别文件系统最可靠的方法。
- LABEL:可以为文件系统设置的可选的、人类可读的标签。
- **FSTYPE (Filesystem Type)**:文件系统的类型(例如,
ext4
、xfs
、ntfs
、vfat
、swap
)。 - PARTUUID:分区表条目的唯一 ID(用于 GPT 分区)。
- PARTLABEL:分区表条目的标签(用于 GPT 分区)。
最常用的 blkid
命令是不带任何选项,它会列出所有检测到的块设备:
1 | blkid |
blkid
的常用选项:
blkid
还提供了一些有用的选项来过滤或格式化其输出:
-L <label>
:按 LABEL 查找设备。通过文件系统标签查找对应的设备路径。1
blkid -L "my_data_partition"
-U <uuid>
:按 UUID 查找设备。当你只知道 UUID 而需要找到对应的设备路径时非常有用。1
blkid -U "a1b2c3d4-e5f6-7890-1234-567890abcdef"
-o <format>
:输出格式。指定blkid
应该如何显示信息。value
:只显示请求标签的值(例如,只显示 UUID)。device
:只显示设备名。udev
:以适合 udev 规则的格式显示输出。full
:显示所有标签(如果未指定标签,这通常是默认值)。export
:以 shell 导出格式显示输出(TAG=”value”)。
1
2blkid -o value -s UUID /dev/sda1 # 只显示 /dev/sda1 的 UUID
blkid -o export # 以导出格式显示所有设备信息-s <tag>
:只显示指定标签的值。你可以指定UUID
、LABEL
、FSTYPE
等。1
blkid -s UUID /dev/sda1 # 显示 /dev/sda1 的 UUID 标签
blkid
在 Linux 系统管理中非常有用,特别是在以下情况下:
/etc/fstab
配置:推荐使用 UUID 或 LABEL 而非设备名(如/dev/sda1
)来挂载文件系统,因为 UUID/LABEL 更稳定,不会因设备插拔或启动顺序变化而改变。blkid
帮助你获取这些稳定标识符。- 脚本编写:在自动化脚本中,
blkid
可以可靠地识别和操作特定的文件系统。 - 故障排除:当文件系统无法挂载或识别时,
blkid
可以帮助你检查设备上是否存在有效的文件系统以及其标识符是否正确。
blkid
是你进行文件系统管理和确保系统启动可靠性的一个强大而重要的工具。
2.3 smartctl
smartctl
是一个命令行工具,它属于 smartmontools
软件包。这个工具允许你与硬盘驱动器 (HDD) 和固态驱动器 (SSD) 内置的 S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) 系统进行交互。
S.M.A.R.T. 是一项技术,它允许硬盘驱动器(HDD)和固态驱动器(SSD)自我监控它们的健康状况和性能指标。通过 smartctl
,你可以获取这些数据,从而预测潜在的硬盘故障,以便在数据丢失之前采取措施。
smartctl
提供了以下关键功能:
- **显示硬盘健康状态 (
-H
)**:快速检查硬盘是否通过 S.M.A.R.T. 的整体健康自检。 - **显示所有 S.M.A.R.T. 信息 (
-a
)**:获取硬盘的详细信息,包括型号、序列号、固件版本、通电时间、S.M.A.R.T. 属性、错误日志和自检日志。 - **显示 S.M.A.R.T. 属性 (
-A
)**:列出硬盘的各个 S.M.A.R.T. 属性,这些属性是硬盘内部监测到的各项指标(例如:原始读取错误率、重分配扇区计数、通电小时数、温度等)。 - **运行硬盘自检 (
-t
)**:- **短自检 (
-t short
)**:快速检查硬盘的电路、机械性能和读取性能,通常需要几分钟。 - **长自检 (
-t long
)**:更彻底的自检,扫描整个硬盘表面,可能需要数小时。 - **传输自检 (
-t conveyance
)**:检查硬盘在运输过程中是否受到损坏。
- **短自检 (
- **显示自检日志 (
-l selftest
)**:查看硬盘执行过的自检结果。 - **显示错误日志 (
-l error
)**:查看硬盘记录的错误信息。 - **启用/禁用 S.M.A.R.T. 功能 (
-s on
/-s off
)**:通常 S.M.A.R.T. 是默认启用的,但在某些情况下你可能需要手动启用或禁用。
通常,你需要指定你要检查的硬盘设备路径,例如 /dev/sda
、/dev/sdb
或 /dev/nvme0n1
。运行 smartctl
命令通常需要 sudo
权限。
检查整体健康状况:
1
sudo smartctl -H /dev/sda
输出会显示
SMART overall-health self-assessment test result: PASSED
(通过) 或FAILED
(失败)。显示所有 S.M.A.R.T. 信息:这是最常用的命令,能提供最全面的信息。
1
sudo smartctl -a /dev/sda
此命令的输出会比较长,需要你仔细阅读和理解各个属性的含义。
运行短自检:
1
sudo smartctl -t short /dev/sda
此命令会立即返回,硬盘会在后台运行自检。
查看自检结果:
1
sudo smartctl -l selftest /dev/sda
查看错误日志:
1
sudo smartctl -l error /dev/sda
smartctl -a
的输出
当你运行 sudo smartctl -a /dev/sda
时,你会看到一个详细的报告,其中最重要的部分是 “Vendor Specific SMART Attributes with Thresholds” 表格。
这个表格通常包含以下列:
- **ID# (Attribute ID)**:属性的唯一标识符。
- ATTRIBUTE_NAME:属性名称(例如:
Raw_Read_Error_Rate
原始读取错误率,Reallocated_Sector_Ct
重分配扇区计数,Power_On_Hours
通电小时数,Temperature_Celsius
温度)。 - VALUE:当前属性的标准化值,通常范围是 1 到 253(越高越好,100-200 之间是常见值)。
- WORST:该属性历史记录的最低(最差)值。
- THRESH:阈值。如果
VALUE
低于这个阈值,硬盘就被认为是处于“预失败”状态,意味着可能即将发生故障。 - TYPE:属性类型,通常是
Pre-fail
(预失败,表示属性低于阈值时硬盘即将故障) 或Old_age
(老旧,表示属性反映的是硬盘的老化或磨损)。 - UPDATED:属性更新方式(
Always
总是更新,Offline
只在离线测试时更新)。 - WHEN_FAILED:表示何时失败,如果
VALUE
低于THRESH
,则会显示FAILING_NOW
。 - RAW_VALUE:原始值,这是硬盘实际监测到的非标准化数据。这个值通常对理解硬盘的实际状态更有意义。
判断硬盘健康状况的关键指标:
- **
SMART overall-health self-assessment test result
**:首先看这一行。如果显示PASSED
,通常表示硬盘目前是健康的;如果显示FAILED
,则硬盘很可能已经出现问题或即将故障。 VALUE
与THRESH
的关系:对于Pre-fail
类型的属性,如果VALUE
小于THRESH
,则硬盘处于危险状态。- 关注几个关键属性的
RAW_VALUE
:- ID 5 (Reallocated_Sector_Ct):重分配扇区计数。如果这个值非零且持续增加,说明硬盘有很多坏扇区,并且正在尝试将其重映射到备用扇区。这是硬盘即将损坏的强烈信号。
- ID 197 (Current_Pending_Sector_Ct):当前待处理扇区计数。表示硬盘识别到有问题的扇区,但尚未重分配。这个值非零也值得关注。
- ID 198 (Offline_Uncorrectable):无法纠正的离线扇区计数。表示硬盘无法纠正的扇区错误。这个值非零或增加是严重警告。
- ID 199 (UDMA_CRC_Error_Count):UDMA CRC 错误计数。表示数据传输过程中出现校验和错误,可能与数据线质量不佳或接口问题有关。
- ID 9 (Power_On_Hours):通电小时数。了解硬盘的使用寿命。
- ID 194 (Temperature_Celsius):温度。过高的温度会加速硬盘老化。
SSD 与 HDD 的差异:
- S.M.A.R.T. 属性不同:SSD 和 HDD 的内部工作原理不同,因此它们报告的 S.M.A.R.T. 属性也会有差异。例如,SSD 会有磨损均衡 (Wear Leveling) 和剩余寿命 (Percentage Used / Lifetime Left) 等特有属性。
- 关注的指标侧重不同:对于 SSD,你更应关注写入放大 (Write Amplification)、总写入量 (Total Host Writes)、NAND 磨损计数 (NAND Writes) 和剩余寿命百分比等指标,这些能反映闪存的磨损情况。
smartctl
是一个非常强大的工具,通过定期检查硬盘的 S.M.A.R.T. 信息,你可以提早发现硬盘潜在的问题,从而有时间备份数据,避免数据丢失的悲剧。
2.4 hdparm
hdparm` 是一个在 Linux 系统中常用的命令行工具,用于显示和设置硬盘驱动器 (HDD) 和固态驱动器 (SSD) 的硬件参数。它允许用户直接与硬盘控制器交互,从而可以查询设备设置、优化性能、管理电源消耗以及控制某些安全功能。
主要功能:
hdparm
的功能涵盖了硬盘的多个方面:
- **显示硬盘信息 (
-I
)**:- 提供硬盘的详细识别信息,包括型号、固件版本、序列号、支持的功能(如 DMA、LBA、NCQ 等)。
- 示例:
sudo hdparm -I /dev/sda
- **性能测试 (
-t
,-T
)**:- **
-t
(Timing buffered disk reads)**:测试从磁盘缓存读取数据的速度,这反映了硬盘的内部缓存性能和数据传输接口的速度。 - **
-T
(Timing cached reads)**:测试从 Linux 缓存(内存)读取数据的速度,这主要反映了 CPU 和内存的性能,而非硬盘本身的性能。 - 示例:
sudo hdparm -t /dev/sda
- 示例:
sudo hdparm -T /dev/sda
- **
- **电源管理 (
-B
,-S
,-y
,-Y
,-Z
)**:- **
-B
(Advanced Power Management, APM)**:设置高级电源管理级别。较低的值(如 1-127)会使硬盘更积极地进入低功耗状态(允许磁头停靠和盘片降速),从而节省能源但可能影响性能或寿命;较高的值(如 128-254)则性能更好,不允许降速;255
则完全禁用 APM。 - **
-S
(Standby/Spindown Timeout)**:设置硬盘在空闲(无磁盘活动)多长时间后进入待机状态并停止盘片转动(降速)。0
禁用此功能。 - **
-y
(Force standby)**:立即让硬盘进入待机模式(降速)。 - **
-Y
(Force sleep)**:立即让硬盘进入睡眠模式(更深度的低功耗,通常需要重新通电才能唤醒)。 - **
-Z
(Disable standby/sleep)**:禁用硬盘的待机和睡眠模式。 - 注意:过于激进的电源管理(频繁降速和启动)可能会缩短硬盘寿命。
- 示例:
sudo hdparm -B 127 /dev/sda
(设置 APM 级别) - 示例:
sudo hdparm -S 24 /dev/sda
(设置 120 秒后降速) - 示例:
sudo hdparm -y /dev/sdb
(强制硬盘/dev/sdb
降速)
- **
- **写入缓存 (
-W
)**:- 启用或禁用硬盘的板载写入缓存。启用写入缓存通常能显著提高写入性能,但如果发生突然断电,可能会有数据丢失的风险。
- 示例:
sudo hdparm -W 1 /dev/sda
(启用写入缓存) - 示例:
sudo hdparm -W 0 /dev/sda
(禁用写入缓存)
- **DMA (Direct Memory Access) 模式 (
-d
)**:- 启用或禁用硬盘的 DMA 模式。DMA 允许硬盘直接与内存交换数据,无需 CPU 干预,从而提高传输效率并降低 CPU 占用。现代系统通常默认启用并优化 DMA。
- 示例:
sudo hdparm -d 1 /dev/sda
(启用 DMA)
- **自动声学管理 (AAM) (
-M
)**:- 如果硬盘支持,可以设置 AAM 级别来平衡硬盘的噪音和性能。较低的值通常更安静但性能稍差,反之则更吵但性能更高。
- 示例:
sudo hdparm -M 128 /dev/sda
(设置最安静模式,如果支持)
- **安全擦除 (Secure Erase)**:
hdparm
可以用于触发硬盘固件内置的安全擦除功能,这能更彻底地擦除硬盘上的数据,使其难以恢复。这是一个高级且危险的操作,请务必谨慎使用,并确保你了解其后果。- 示例:需要一系列步骤,并且通常用于 SSD 或在出售/报废硬盘时使用。
大多数 hdparm
的操作都需要 root 权限,所以通常需要使用 sudo
。
基本用法:
sudo hdparm [选项] <设备路径>
1
2
3
4
5
6
7
8# 查看 /dev/sda 硬盘的详细信息
sudo hdparm -I /dev/sda
# 测试 /dev/sdb 的硬盘缓存读取速度
sudo hdparm -t /dev/sdb
# 设置 /dev/sdc 在 5 秒空闲后进入待机状态
sudo hdparm -S 1 /dev/sdc危险性:
hdparm
直接与硬盘硬件交互,不正确的参数设置可能会导致数据丢失、性能下降甚至损坏硬盘。在修改任何参数之前,请务必仔细阅读其手册页 (man hdparm
) 并理解每个选项的含义和潜在风险。兼容性:并非所有硬盘都支持
hdparm
的所有选项。某些功能可能只适用于特定的硬盘型号或接口类型(例如,许多选项最初是为 IDE 硬盘设计的,但后来也支持 SATA)。现代 Linux 内核和硬件通常已经对硬盘参数进行了高度优化,一些旧的性能调优选项可能不再那么关键或甚至被忽略。非持久性:通过
hdparm
设置的许多参数通常在系统重启后会恢复默认值。如果你想让设置持久化,你需要将它们添加到系统启动脚本或专门的配置文件中(例如/etc/hdparm.conf
,具体取决于你的 Linux 发行版)。
hdparm
是一个功能强大且灵活的工具,对于需要深入了解和精细控制硬盘行为的 Linux 用户和系统管理员来说,它是一个宝贵的资源。
3. PCI、USB、设备检测
lspci
lsusb
dmesg
3.1 lspci
lspci
是一个用于显示系统 PCI (Peripheral Component Interconnect) 总线上所有设备信息的命令行工具。PCI 总线是一种连接计算机主板上各种硬件组件的标准接口,这些组件包括显卡、网卡、声卡、USB 控制器、SATA 控制器等。
通过 lspci
,你可以获取这些设备的详细信息,这对于硬件故障诊断、驱动程序识别以及系统配置检查非常有用。
当你运行 lspci
时,它会列出系统中所有 PCI 设备的基本信息,包括:
- **总线/设备/功能号 (Bus/Device/Function)**:这是 PCI 设备的唯一地址,格式通常是
BB:DD.F
。BB
(Bus):PCI 总线编号。DD
(Device):总线上的设备编号。F
(Function):设备上的功能编号(一个设备可能有多个功能)。
- 设备名称:设备的简短描述,通常包含厂商和设备类型(例如:
VGA compatible controller
,Ethernet controller
)。 - 厂商 ID 和设备 ID:十六进制的 ID,用于唯一标识设备的厂商和具体型号。
最简单的使用方式是直接在终端中输入:
1 | lspci |
这会列出所有 PCI 设备的基本信息。
常用选项
lspci
有许多选项可以让你获取更详细或特定格式的信息:
-v
,--verbose
:详细模式。显示更多关于设备的详细信息,如子系统、修订版本、支持的功能等。1
lspci -v
-vv
:更详细模式。显示所有 PCI 设备的详细信息,包括 PCI 能力寄存器内容。这会输出大量信息。1
lspci -vv
-vvv
:最详细模式。显示所有能获取到的信息,通常用于开发者和高级诊断。1
lspci -vvv
-k
,--kernel-modules
:显示内核模块。列出正在使用该设备的内核驱动模块(如果已加载)。这对于检查驱动是否正确加载非常有用。1
lspci -k
-nn
,--ids
:显示厂商和设备 ID。以十六进制数字形式显示设备的厂商 ID 和设备 ID。这在查找特定驱动程序时非常有用。1
lspci -nn
-s [[<bus>]:][<device>][.<func>]
,--slot [[<bus>]:][<device>][.<func>]
:按插槽过滤。只显示特定总线、设备或功能号的设备。1
lspci -s 01:00.0 # 显示总线01,设备00,功能0的设备
-d [<vendor>]:[<device>]
,--device [<vendor>]:[<device>]
:按厂商/设备 ID 过滤。只显示指定厂商和/或设备 ID 的设备。你可以通过lspci -nn
找到这些 ID。1
lspci -d 8086:0a2a # 查找 Intel 厂商 ID 8086,设备 ID 0a2a 的设备
-t
,--tree
:显示 PCI 设备树。以图形化树状结构显示 PCI 总线和设备之间的关系。1
lspci -t
-x
,-xx
:以十六进制转储配置空间。显示设备 PCI 配置空间的十六进制内容。-xx
显示更多原始数据。-m
,-mm
,-mmm
:机器可读输出。以简洁的格式显示,方便脚本解析。
常见应用场景:
- 硬件识别:快速了解系统中有哪些硬件设备,特别是当它们没有在操作系统中正常显示时。
- 驱动程序诊断:使用
-k
选项检查设备是否加载了正确的内核驱动模块。如果设备有问题但没有显示驱动模块,可能是驱动缺失或不兼容。 - 故障排除:当某个硬件功能不正常时,用
lspci
检查设备是否被系统识别,其状态是否正常。 - 系统审计:用于记录系统硬件配置。
- 虚拟化环境:在虚拟机中,
lspci
可以显示虚拟机模拟的 PCI 设备。 - **PCIe 直通 (Passthrough)**:在配置 KVM/QEMU 进行 PCIe 直通时,需要用
lspci
确认设备 ID 和地址。
设备插上没有正常工作,可lspci查看设备控制器是否被系统识别,检查接触线缆,驱动固件等问题。
lsusb
是一个 Linux 命令行工具,用于列出系统中所有的 USB 总线及其连接的 USB 设备信息。它是 usbutils
软件包的一部分,在大多数现代 Linux 发行版中默认安装。
3.2 lsusb
的主要功能
lsusb
主要用于:
- 枚举 USB 设备:显示系统中所有 USB 控制器(根集线器)和连接到这些控制器的 USB 设备。
- 提供设备识别信息:对于每个设备,它通常会显示:
- **总线号 (Bus Number)**:USB 设备连接到的 USB 总线(例如
Bus 001
)。 - **设备号 (Device Number)**:该设备在该总线上的唯一编号(例如
Device 002
)。 - **ID (Vendor ID:Product ID)**:一个由冒号分隔的十六进制数字对。
Vendor ID
标识制造商,Product ID
标识具体的产品型号。这些 ID 对于识别设备和查找驱动非常有用。 - 设备描述:一个人类可读的设备名称,通常由系统的 udev 规则和硬件数据库解析而来(例如
Logitech, Inc. USB Receiver
)。
- **总线号 (Bus Number)**:USB 设备连接到的 USB 总线(例如
lsusb
是诊断 USB 设备连接问题、确认设备是否被系统识别以及获取设备详细信息以查找兼容驱动程序的非常重要的工具。
1 | lsusb |
这会提供一个简要的列表,显示每个 USB 设备的总线、设备号、ID 和描述。
示例输出(可能与您的实际情况不同):
1 | Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub |
从上面的例子中,你可以看到:
Bus 001 Device 001
和Bus 002 Device 001
是 USB 根集线器,代表了主板上的 USB 控制器。Logitech, Inc. Unifying Receiver
(ID046d:c52b
) 是连接在Bus 001
上的一个设备。SanDisk Corp. Cruzer Fit
(ID0781:5580
) 是连接在Bus 002
上的一个 U盘。
常用选项
lsusb
提供了几个有用的选项来控制输出的详细程度或进行过滤:
-v
,--verbose
:详细模式。显示每个 USB 设备的完整描述符信息,包括配置、接口、端点描述符等。这个输出非常详细,通常用于驱动开发或深入故障排除。1
lsusb -v
如果你只想看某个特定设备的详细信息,可以结合
-s
或-d
选项:1
sudo lsusb -v -s 001:005 # 查看 Bus 001, Device 005 的详细信息
通常需要
sudo
权限才能获取所有详细信息。-t
,--tree
:树状显示。以图形化的树状结构显示 USB 设备层级,包括 USB 集线器和连接到它们的设备。这有助于可视化 USB 设备的连接方式。1
lsusb -t
-s [[<bus>]:][<devnum>]
,--bus=<bus> --device=<devnum>
:按总线/设备号过滤。只显示指定总线和/或设备号的设备。总线和设备号都是十进制数。1
2lsusb -s 001:005 # 只显示 Bus 001, Device 005
lsusb -s :005 # 显示所有总线上设备号为 005 的设备-d [<vendor>]:[<product>]
,--vendor=<vendor> --product=<product>
:按厂商/产品 ID 过滤。只显示具有指定厂商 ID 和/或产品 ID 的设备。这些 ID 都是十六进制数。1
lsusb -d 046d:c52b # 查找罗技 Unifying Receiver
如果你只知道厂商 ID,可以这样查找:
1
lsusb -d 046d: # 查找所有罗技设备
-D <device_file>
:显示特定设备文件信息。直接显示指定设备文件(例如/dev/bus/usb/001/005
)的详细信息。1
sudo lsusb -D /dev/bus/usb/001/005
常见应用场景:
- 确认 USB 设备连接:当你插入 U盘、鼠标、键盘、打印机等 USB 设备后,如果它们没有正常工作,
lsusb
是第一步,用来确认设备是否被系统检测到。 - 识别未知设备:当系统识别到 USB 设备但不知道它是什么时,
lsusb
可以提供厂商 ID 和产品 ID。你可以使用这些 ID 在网上搜索,找到设备的具体型号和所需驱动程序。 - 调试 USB 连接问题:通过
-v
选项查看详细信息,可以帮助诊断 USB 供电不足、USB 版本不兼容或其他硬件层面的问题。 - 验证 USB 3.0/3.1/3.2 连接:通过
-t
和-v
选项,你可以看到 USB 设备的连接速度(例如 480M for USB 2.0, 5000M for USB 3.0/3.1 Gen 1),从而确认设备是否以预期的速度连接。 - 脚本自动化:在自动化脚本中,
lsusb
可以用来检测特定 USB 设备的存在。
lsusb
是 Linux 系统中管理和诊断 USB 设备的基石工具,对于日常使用和系统维护都非常重要。
3.3 dmesg
dmesg
是一个 Linux 命令行工具,用于显示内核环缓冲区(kernel ring buffer)的内容。这个缓冲区存储了 Linux 内核在启动过程中以及运行时发出的所有消息。这些消息包括硬件检测、设备驱动加载、系统错误、网络事件、USB 设备插拔等各种重要信息。
主要作用:
dmesg
是系统管理员和开发人员诊断系统启动问题、硬件故障、驱动程序问题以及其他内核相关事件的首选工具。
- 启动信息:查看系统启动时识别的 CPU、内存、存储设备、网络接口卡等硬件信息。
- 硬件检测:当插入新的硬件设备(如 USB 驱动器、PCIe 卡)时,
dmesg
会显示内核检测到并尝试初始化它们的消息。 - 驱动程序加载:显示哪些驱动程序被加载,以及它们是否成功与硬件交互。
- 错误和警告:报告内核遇到的任何错误、警告或异常事件,例如 I/O 错误、内存问题、硬件故障等。
- 设备插拔:实时显示 USB 设备、硬盘等可热插拔设备的连接和断开事件。
- **内核恐慌 (Kernel Panic)**:如果系统崩溃,内核恐慌的信息通常会显示在
dmesg
的输出中(当然,这需要你在崩溃后重启系统来查看)。
1 | dmesg |
然而,由于内核环缓冲区可能会存储大量的历史消息,直接运行 dmesg
可能会输出非常长的内容,快速滚动过屏幕。因此,通常需要结合其他工具来过滤或分页显示。
常用选项和用法示例
分页查看 (最常用):
使用 less 或 more 分页器,可以逐页或逐行查看内容。
1
dmesg | less
在
less
中,你可以使用箭头键滚动,/
进行搜索,q
退出。查看最新消息:
通常,我们只关心最近发生的事件,可以使用 tail 命令。
1
dmesg | tail -n 20
这会显示最新的 20 条内核消息。
实时监控新消息:
如果你正在进行某个操作(例如插拔 USB 设备,或者等待某个错误发生),并想实时查看内核日志,可以使用 -w 或 –follow 选项。
1
sudo dmesg -w
或
1
sudo dmesg --follow
这会持续显示新的内核消息,直到你按
Ctrl+C
退出。过滤特定信息:
结合 grep 命令可以筛选出你关心的特定信息。
1
2
3
4dmesg | grep -i "usb" # 查找所有与 USB 相关的消息 (忽略大小写)
dmesg | grep -i "eth0" # 查找所有与 eth0 网卡相关的消息
dmesg | grep -i "error" # 查找所有错误消息
dmesg | grep -i "firmware" # 查找固件加载相关的消息只显示某些设施(facility)的消息:
内核消息分为不同的“设施”(facility),如 kern (内核核心)、user (用户级)、mail (邮件系统) 等。使用 -f 选项可以过滤。
1
dmesg -f kern # 只显示内核核心消息
只显示某些优先级(level)的消息:
消息也按优先级分类,如 err (错误)、warn (警告)、info (信息)、debug (调试) 等。使用 -l 选项可以过滤。
1
dmesg -l err,warn # 只显示错误和警告消息
清除内核环缓冲区:
在排查问题前,有时会清空缓冲区,以便只看到新的事件。
1
sudo dmesg -c
注意: 这会清除当前缓冲区的内容,清除后就无法找回了,所以请谨慎使用。
应用场景:
- 启动问题诊断:系统无法启动时,通过
dmesg
可以看到是哪个硬件初始化失败,或者哪个驱动程序加载出错。 - 硬件识别问题:新安装的硬盘、USB 设备或 PCI 设备没有识别,查看
dmesg
能告诉你内核是否检测到了它们,以及是否有错误消息。 - 驱动程序故障:如果某个硬件设备功能异常,
dmesg
可能会显示驱动程序相关的错误或警告。 - 电源管理问题:与电源状态转换(如挂起、恢复)相关的消息。
- 系统崩溃分析:虽然内核恐慌本身会冻结系统,但在重启后,如果恐慌信息被保存到环缓冲区,你就可以通过
dmesg
看到它们,帮助定位崩溃原因。
dmesg
是 Linux 系统管理和故障排除中最基础和最重要的工具之一。掌握它对于深入理解系统行为和解决底层问题至关重要。
4. 内核模块与驱动
lsmod
modprobe
insmod
/rmmod
modinfo
5. 设备信息和管理
dmidecode
inxi
lshw
udevadm info
hwinfo