Что означает ошибка dmesg
dmesg (display message) — это команда Linux для вывода буфера кольцевого сообщений ядра. Она не показывает "ошибки" в традиционном смысле (как код возврата), а отображает все события ядра: загрузку драйверов, обнаружение оборудования, предупреждения о ресурсах, сбои.
Типичный вывод строки ошибки:
[ 1234.567890] usb 1-2: device descriptor read/64, error -71
[ 1234.567890]— время в секундах с момента загрузки (сdmesg -Tбудет человеко-читаемая дата).usb 1-2— устройство (шинa USB, порт 1-2).error -71— код ошибки (здесь-71=EPROTO, протокольный сбой).
Симптомы проблемы: внезапные падения устройств (USB, сеть), ошибки ввода-вывода, паники ядра (Kernel Panic), неработающие драйверы. Часто dmesg — первый источник информации при диагностике аппаратных или драйверных сбоев.
Причины возникновения
- Аппаратные сбои или несовместимость — дефектное оборудование (USB-кабель, диск), неправильная инициализация устройств.
- Проблемы с драйверами — устаревший, повреждённый или конфликтующий модуль ядра (например, драйвер видеокарты или сетевой карты).
- Переполнение буфера сообщений ядра — буфер имеет фиксированный размер (по умолчанию ~16 КБ на CPU). При высокой нагрузке старые сообщения перезаписываются, и вы теряете историю.
- Ошибки конфигурации ядра или параметров загрузки — неверные параметры в
grub(например,nomodeset), конфликты модулей. - Проблемы с правами доступа — в современных дистрибутивах доступ к
dmesgможет быть ограничен (требуются права root или настройкаkernel.dmesg_restrict). - Сбои в работе подсистемы ядра — утечки памяти, тайм-ауты (timeout) на шинах (I2C, SPI), ошибки прерываний (IRQ).
Способы решения
Способ 1: Базовый анализ и фильтрация логов
Самый частый сценарий — нужно найти конкретное сообщение об ошибке среди тысяч строк.
- Просмотрите последние сообщения (после загрузки или события):
# Показать последние 100 строк с удобными временными метками sudo dmesg -T | tail -n 100 - Фильтруйте по уровню серьезности (только ошибки и выше):
# Показать сообщения уровня error, crit, alert, emerg sudo dmesg -l err,crit,alert,emerg - Ищите по ключевому слову (например, по имени устройства или драйвера):
# Поиск без учета регистра по слову 'fail' или 'error' sudo dmesg | grep -i -E 'fail|error' # Пример: поиск ошибок, связанных с USB sudo dmesg | grep -i usb - Используйте цветовой вывод (если поддерживается):
sudo dmesg --color=always | less -R
Способ 2: Сохранение полного лога для глубокого анализа
Если проблема периодическая, нужно сохранить полный контекст.
- Экспортируйте весь буфер в файл сразу после возникновения проблемы:
# Сохранить полный лог с временными метками в домашнюю директорию sudo dmesg -T > ~/dmesg_issue_$(date +%Y-%m-%d_%H-%M-%S).log - Для длительного мониторинга используйте
teeили перенаправление:# Записывать новые сообщения в файл в реальном времени (Ctrl+C для остановки) sudo dmesg -w | tee ~/dmesg_live.log - Анализируйте сохранённый файл с помощью
grep,awkили текстовых редакторов. Ищите упоминания вашего устройства, коды ошибок (например,-71,-110), словаOops,BUG,WARNING.
Способ 3: Увеличение размера буфера dmesg
По умолчанию буфер может быть слишком мал, и старые сообщения (где началась проблема) теряются.
- Временно увеличьте буфер (действует до перезагрузки):
# Установить размер буфера 4 МБ (значение в килобайтах) sudo sysctl -w kernel.dmesg_restrict=0 # Снять ограничение доступа, если есть sudo sysctl -w kernel.printk=7 4 1 7 # Настроить уровни вывода (console, default, minimum)
Параметрkernel.printkуправляет, какие сообщения ядра попадают в буфер и на консоль. Формат:console_loglevel default_message_loglevel minimum_console_loglevel default_console_loglevel. Значения:8(debug) ...1(emergency). Установка7 4 1 7— хороший баланс для отладки. - Постоянно увеличьте буфер (через
/etc/sysctl.confили файл в/etc/sysctl.d/):# Отредактируйте конфиг sudo nano /etc/sysctl.d/99-dmesg.conf
Добавьте строки:# Размер буфера dmesg в килобайтах (4 МБ = 4096 КБ) kernel.dmesg_restrict = 0 kernel.printk = 7 4 1 7
Примените:sudo sysctl -p /etc/sysctl.d/99-dmesg.conf.
Способ 4: Использование journalctl для расширенного анализа (systemd)
Если в системе используется systemd, journalctl — более мощная альтернатива, хранящая логи с метками времени и дополнительными полями.
- Просмотрите сообщения ядра (аналог
dmesg):# Показать все сообщения ядра (флаг -k) sudo journalctl -k # Последние 50 сообщений ядра sudo journalctl -k -n 50 - Фильтруйте по времени, приоритету или подсистеме:
# Ошибки ядра за последний час sudo journalctl -k -p err --since "1 hour ago" # Сообщения от конкретного драйвера (например, nvidia) sudo journalctl -k | grep -i nvidia - Экспортируйте в файл для отправки в техподдержку:
# Сохранить логи ядра с полными метками времени в файл sudo journalctl -k --since "2026-04-08 09:00:00" --until "2026-04-08 10:00:00" > ~/kernel_logs.txt
Способ 5: Диагностика конкретных типов ошибок
- Ошибки USB (
-71,-110,timeout): Проверьте кабель, порт, подключите устройство в другой порт (особенно USB 3.0 vs 2.0). Обновите BIOS/UEFI. Проверьте питание:lsusb -t.# Подробный лог по USB sudo dmesg | grep -i usb - Ошибки дисков (
I/O error,sense key): Проверьте здоровье диска:sudo smartctl -a /dev/sda. Проверьте кабели SATA/питания. Возможно, failing hardware.# Логи по SCSI/дискам sudo dmesg | grep -i -E 'sd|scsi|ata|sense' - Ошибки сети (
link down,tx timeout): Проверьте драйвер:ethtool -i eth0. Обновите прошивку карты или драйвер. Проверьте кабель/коммутатор.# Логи по сетевому интерфейсу (замените eth0 на ваш) sudo dmesg | grep -i eth0 - Ошибки памяти (
MCE,CPU): Могут указывать на аппаратные сбои CPU/RAM. Проверьте:sudo mcelog --file /dev/mcelog. Обновите BIOS. Запустите тест памяти (memtest86+).# Поиск Machine Check Exceptions sudo dmesg | grep -i mce
Профилактика
- Регулярно мониторьте логи при установке нового оборудования или ПО. Используйте
sudo dmesg -wв отдельном терминале. - Настройте ротацию логов ядра. Хотя
dmesg— это кольцевой буфер в памяти, его содержимое может быть перенаправлено вsyslog(например,rsyslog). Убедитесь, что в/etc/rsyslog.confесть строкаkern.*и настроена ротация черезlogrotateдля/var/log/kern.log. - Держите систему обновлённой (
sudo apt update && sudo apt upgradeилиdnf update), особенно ядро и драйверы. - Избегайте "сырых" драйверов из ненадёжных источников. Используйте официальные репозитории дистрибутива или драйверы от производителя оборудования.
- При проблемах с конкретным устройством — изолируйте его: отключите другие USB-устройства, попробуйте другой порт, проверьте питание.
- При частых переполнениях буфера увеличьте его размер (см. Способ 3) и/или настройте более агрессивную фильтрацию ненужных сообщений через
kernel.printk.