dmesg — сообщения ядра: OOM, ошибки диска и ФС, segfault
dmesg печатает кольцевой буфер ядра: сообщения о дисках, файловых системах, OOM, падениях программ и железе.
Шпаргалка
8 команд Версия для печати-
sudo dmesg -T | tail -20последние сообщения, со временем -
sudo dmesg -l err,critтолько ошибки -
sudo dmesg -x | tailс уровнем каждой строки -
sudo dmesg --since '-10min'за последние 10 минут -
sudo dmesg -Wждать новых сообщений -
sudo journalctl -k -b -p errошибки ядра этой загрузки -
sudo journalctl -k -b -1ядро прошлой загрузки -
sudo dmesg -T | grep -iE 'oom|error|segfault'
Обзор
dmesg печатает сообщения ядра: о найденном железе, дисках и файловых
системах, о процессах, которые ядро завершило, о программах, которые
упали. Программы пишут в свои журналы, ядро — сюда.
Кольцевой буфер
Ядро складывает сообщения в кольцевой буфер — кусок памяти фиксированного размера: когда он полон, новые строки вытесняют самые старые. Каждая строка начинается с секунд от загрузки:
-T переводит секунды в дату и время. dmesg --help предупреждает, что
после сна (suspend) машины это время может врать; точное время — у
journalctl -k.
Доступ: dmesg_restrict
В Ubuntu параметр ядра kernel.dmesg_restrict = 1, и читать буфер может
только root:
Без sudo journalctl -k у ученика печатает -- No entries -- и подсказку:
журнал системы читают группы adm и systemd-journal, а student не в них.
Уровни
У каждого сообщения есть уровень важности. -x его показывает, -l
отбирает:
| Уровень | Пример с машины тренажёра |
|---|---|
crit |
EXT4-fs error (device loop0): ext4_lookup:1866: … deleted inode referenced: 12 |
crit |
EXT4-fs (loop0): Remounting filesystem read-only |
err |
Aborting journal on device loop0-8. |
err |
Memory cgroup out of memory: Killed process 1635 (tail) … |
info |
python3[1260]: segfault at 0 ip … error 4 in libc.so.6[…] |
info |
EXT4-fs (loop0): mounted filesystem … r/w with ordered data mode. |
-x ставит в начало строки источник и уровень: kern :crit :, kern
:err :. segfault — уровня info: фильтр -l err,crit его не покажет. Ищи
такие строки grep'ом.
dmesg и journalctl -k
journald копирует сообщения ядра в журнал. journalctl -k показывает их с
настоящим временем и хранит дольше буфера: на машине тренажёра журнал
лежит на диске (/var/log/journal), поэтому видны и прошлые загрузки.
| Нужно | Команда |
|---|---|
| ядро этой загрузки | sudo journalctl -k -b |
| ядро прошлой загрузки | sudo journalctl -k -b -1 |
| только ошибки и важнее | sudo journalctl -k -p err |
| с точным временем ISO | sudo journalctl -k -o short-iso |
| только текст, без префикса | sudo journalctl -k -o cat |
Ключи
10Основные ключи — в таблице ниже, полный список — dmesg --help.
| Ключ | Что делает | Пример |
|---|---|---|
-T --ctime |
Время сообщений датой и часами вместо секунд с загрузки; после сна машины может врать. | sudo dmesg -T | tail |
-l --level LIST |
Только сообщения указанных уровней — emerg, alert, crit, err, warn, notice, info, debug; warn+ — этот и выше. | sudo dmesg -l err,crit,alert,emerg |
-x --decode |
Печатать источник и уровень каждой строки — kern :crit, kern :info. | sudo dmesg -x | tail |
-w --follow |
Напечатать буфер и ждать новых сообщений, как tail -f. | sudo dmesg -w |
-W --follow-new |
Ждать и печатать только новые сообщения, без старого буфера. | sudo dmesg -W |
--since TIME |
Сообщения начиная с момента — '-5min', '2026-10-21 00:30'. | sudo dmesg --since '-10min' |
-H --human |
Удобный для чтения вид — разница во времени между строками, цвета, пейджер. | sudo dmesg -H |
-J --json |
Вывод в JSON — для скриптов и jq. | sudo dmesg -J | head |
-C --clear |
Очистить кольцевой буфер ядра; journalctl -k сообщения сохранит, dmesg — нет. опасно | sudo dmesg -C |
-c --read-clear |
Напечатать буфер и очистить его. опасно | sudo dmesg -c |
Ничего не найдено. Попробуй запрос короче.
Рецепты
6Следить за сообщениями
-w сначала печатает весь буфер — сотни строк загрузки, — а потом ждёт.
-W ждёт сразу. Строка, записанная в /dev/kmsg, попадает в буфер; <3>
в начале — уровень err.
Падение программы: segfault
Программа обратилась к памяти, которая ей не принадлежит. Ядро завершает
её сигналом SIGSEGV (номер 11), код завершения — 139 = 128 + 11 (см.
exit-codes), а в буфере остаётся строка уровня info:
python3[1557] — имя и PID, segfault at 0 — адрес, к которому
обратились (0 — пустой указатель), in libc.so.6 — в какой библиотеке
это случилось. Строку здесь перенесли для ширины. Если программы падают
часто, ядро пропускает часть строк и пишет show_signal_msg: 61 callbacks
suppressed.
Ошибка файловой системы ext4
ext4 нашла повреждение: каталог ссылается на удалённый inode. Программа
получила Structure needs cleaning. Что ядро делает дальше, задаёт
поведение при ошибке в суперблоке ФС (errors=): с remount-ro журнал
обрывается, и запись в ФС отвечает Input/output error. Разбор и
e2fsck — в filesystems.
OOM: процесс завершён из-за памяти
Строки Out of memory: Killed process и Memory cgroup out of memory:
Killed process — работа oom-killer; там же — как читать весь отчёт.
Задача зависла в D
Процесс провёл в состоянии D дольше kernel.hung_task_timeout_secs
(120 секунд в Ubuntu; здесь порог уменьшили до 20). Дальше идёт стек ядра —
по нему видно, чего процесс ждёт (см. load-average).
Неполадки
5read kernel buffer failed: Operation not permitted
kernel.dmesg_restrict = 1: буфер читает только root. sudo dmesg или
sudo journalctl -k.
journalctl -k печатает -- No entries --
Без sudo пользователь вне групп adm и systemd-journal видит только
свои записи. Повтори с sudo.
Буфер начинается не с загрузки или пуст
Буфер переполнился и старые строки вытеснены, или его очистили
(dmesg -C). Полная история — sudo journalctl -k -b.
No journal boot entry found
Прошлой загрузки в журнале нет: машина загружалась один раз или журнал
хранится только в памяти (/run/log/journal). Список загрузок —
journalctl --list-boots.
Время в dmesg -T и в журнале расходится
-T считает время от момента загрузки и не учитывает сон машины. Время из
journalctl -k записано в момент сообщения.
Опасно
1dmesg -C и dmesg -c
Оба очищают буфер ядра. После sudo dmesg -C на машине тренажёра dmesg
показал 0 строк, а journalctl -k -b — все 577. Не чисти буфер на
сервере, который разбираешь: следующему, кто придёт, останется только
журнал.
Термины
2- кольцевой буфер ядра kernel ring buffer
- Память фиксированного размера, куда ядро пишет свои сообщения; когда она полна, новые строки вытесняют старые. Читает dmesg (в Ubuntu — только root), копию с точным временем хранит journalctl -k.
- segfault (ошибка сегментации) segfault (segmentation fault)
- Программа обратилась к памяти, которая ей не принадлежит; ядро завершает её сигналом SIGSEGV (11), код завершения — 139, в журнале ядра — строка «имя[PID]: segfault at адрес … in библиотека».
См. также
- journalctl — журнал служб и ядра.
- oom-killer — отчёт OOM в журнале ядра.
- filesystems — ошибки ext4 и
e2fsck. - load-average — состояние
Dи зависшие задачи. - exit-codes — коды 128+N: 137, 139.
- kernel — ядро и его параметры загрузки.
- kernel-modules — драйверы и их сообщения.
- sysctl —
kernel.dmesg_restrictи другие параметры.
Есть неточность? Сообщить об ошибке в статье