DMESG - читаем буфер ядра Linux

Анализируем логи Ubuntu Linux с помощью dmesg

Dmesg - что это за утилита и с чем ее едят?

Во время загрузки системы, пока загружается ядро, система инициализации, драйвера, модули ядра, инициализируется оборудование на экран выводится большое количество сообщений, которые отображают информацию о состоянии ядра, процессе загрузки, а также состоянии устройств.

анализируем логи с помощью утилиты dmesg

Именно на этапе загрузки может происходить много ошибок в сервисах или оборудовании. Просмотр этих сообщений может быть очень полезным.Но они пробегают очень быстро и мы не всегда можем успеть их прочитать. Но все они могут быть просмотрены с помощью команды dmesg.

1. Просмотр сообщений во время загрузки

Выполнив команду dmesg с правами суперпользователя вы получите все сообщения, которые выводило ядро во время загрузки. Здесь вы можете увидеть очень много полезной информации. Вы можете просто просматривать их по одной строчке и пытаться понять, что они значат. Теперь, когда вы знаете как выглядят сообщения при загрузке, вы сможете легко разобраться со многими проблемами, если те возникнут.

$ dmesg | more
[    0.000000] microcode: CPU0 microcode updated early to revisio
n 0x29, date = 2013-06-12
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.1.20-11-default (geeko@buildhost) 
(gcc version 4.8.5 (SUSE Linux) ) #1 SMP PREEMPT Fri Mar 18 14:42
:07 UTC 2016 (0a392b2)

2. Просмотр памяти

С помощью dmesg вы можете посмотреть количество доступной в системе памяти:

$ dmesg | grep Memory

 0.000000] Memory: 3848228K/4006256K available (6567K kernel code, 1085K rwdata, 4852K rodata, 1560K init, 1520K bss, 158028K reserved, 0K cma-reserved)

3. Просмотр состояния сетевых адаптеров

Поскольку в dmesg сохраняются все сообщения о состоянии устройств, мы можем посмотреть состояние сетевого адаптера, или, возможно, ошибки которые возникли при его инициализации:

$ dmesg | grep eth
[  101.043873] tg3 0000:02:00.0 eth0: Link is up at 100 Mbps, full duplex
[  101.043885] tg3 0000:02:00.0 eth0: Flow control is off for TX and off for RX
[  101.043889] tg3 0000:02:00.0 eth0: EEE is disabled
[  101.043909] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

4. Изменение размера буфера dmesg

Если вы считаете, что стандартного размера буфера dmesg недостаточно, вы можете изменить его размер, чтобы увеличить количество сообщений, которые могут там находиться одновременно. Для этого достаточно отредактировать файл и перезагрузить компьютер.

$ vi /boot/config-4.1.20-11-default
CONFIG_LOG_BUF_SHIFT=18

Измените значение параметра этой строки на нужное, по умолчанию у меня используется 18, это значит что будет создан буфер размером 18 килобайт. Но вы можете указать размер буфера, какой захотите.

5. Очистить буфер dmesg

Иногда может понадобится очистить буфер Dmesg, чтобы ненужные сообщения не путались под руками. Вы можете это сделать следующей командой:

$ dmesg -c

Теперь если еще раз выполнить команду dmesg, буфер будет пуст.

6. Дата и время в dmesg

Как видите, по умолчанию в dmesg нет никаких дат, используется просто метка, сдвиг времени от начала загрузки. Но также есть возможность увидеть полноценную дату и время каждого сообщения. Для этого смотрите файл /var/log/kern.log:

$ dmesg | grep "L2 cache"
Oct 18 23:55:40 ubuntu kernel: [ 0.014681] CPU: L2 cache: 2048K

Чтобы все работало должна быть настроена и запущенна служба klogd.

7. Просмотр ошибок dmesg

Вот такой нехитрой комбинацией вы можете посмотреть все ошибки, произошедшие во время загрузки или работы системы:

$ dmesg | grep error

Рассмотрим небольшой пример. Вот допустим, у меня не работает Wifi. Я знаю что адаптер в компьютере есть, он включен и в Windows все работает. Но сейчас никак. Смотрим лог dmesg и видим:

[ 21.772824] b43-phy0 ERROR: Firmware file "b43/ucode15.fw" not found
[ 21.772842] b43-phy0 ERROR: Firmware file "b43-open/ucode15.fw" not found
[ 21.772852] b43-phy0 ERROR: Please open a terminal and enter the command "sudo /usr/sbin/install_bcm43xx_firmware" to download the correct firmware for this driver version. For an off-line installation, go to [manual] and follow the instructions in the "Installing firmware from RPM packages" section.

Из сообщения мы понимаем, что проблема здесь в прошивке, и система нам даже сообщает с помощью какой команды ее можно решить, или где почитать про настройку этого дела и скачать нужные файлы. Таким образом, проблема которая казалась нерешаемой, решилась за несколько минут. Просмотр логов Linux - очень полезная вещь, не забывайте этим пользоваться. Вот и все, если у вас остались вопросы, пишите в комментариях!

Лицензия: CC BY-SA 4.0

Похожие материалы:
Помогла ли вам статья?
Да Нет
Статья оказалась полезной для 0 человек
avatar