Linux故障排查之dmesg命令

  dmesg 命令是用于检测和控制内核环缓冲的,可以用来输出 Linux 的开机启动信息,这些信息也可以从 /var/log/dmesg 中看到。这些信息对设备故障的诊断很有价值。

命令选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 使用dmesg [选项],常用选项如下:  

-C, --clear 清除内核环形缓冲区(ring butter)
-c, --read-clear 读取并清除所有消息
-D, --console-off 禁止向终端打印消息
-d, --show-delta 显示打印消息之间的时间差
-e, --reltime 以易读格式显示本地时间和时间差
-E, --console-on 启用向终端打印消息
-F, --file <文件> 用 文件 代替内核日志缓冲区
-f, --facility <列表> 将输出限制为定义的设施
-H, --human 易读格式输出
-k, --kernel 显示内核消息
-L, --color 显示彩色消息
-l, --level <列表> 限制输出级别
-n, --console-level <级别> 设置打印到终端的消息级别
-P, --nopager 不将输出通过管道传递给分页程序
-r, --raw 打印原生消息缓冲区
-S, --syslog 强制使用 syslog(2) 而非 /dev/kmsg
-s, --buffer-size <大小> 查询内核环形缓冲区所用的缓冲区大小
-T, --ctime 显示易读的时间戳(如果您使用了
SUSPEND/RESUME 则可能不准)
-t, --notime 不打印消息时间戳
-u, --userspace 显示用户空间消息
-w, --follow 等待新消息
-x, --decode 将设施和级别解码为可读的字符串

-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出

常见用例

查看所有内核加载到的硬盘:

1
dmesg -L | grep sda  

通常来说 sda 表示第一块 SATA 硬盘,sdb 表示第二块 SATA 硬盘;hda 表示第一块 IDE 硬盘,hdb 表示第二块 IDE 硬盘;部分 VPS 使用的是虚拟磁盘,为 vda、vdb 等。
查看当前有哪些磁盘,可以使用:

1
fdisk -l

查看 usb、dma、tty、memory等信息

1
2
3
4
dmesg -L | grep -i usb  # grep -i 中的 i 表示忽略大小写 
dmesg -L | grep -i tty
dmesg -L | grep -i memory
dmesg -L | grep -i eth # 查看网卡相关信息