Найти в Дзене
Сисадмин

Linux и его кольцо боли: зачем ядру буфер, и при чём тут dmesg, а?

Оглавление
Linux и его кольцо боли
Linux и его кольцо боли

Представь себе ядро Linux. Это такой начальник всех процессов, драйверов, модулей и прочей саранчи. Оно видит всё, знает всё и… комментирует всё, что происходит, короче почти как сурдопереводчик: «А вот тут загрузился модуль. А тут сетевая карта чихнула. А тут кто-то попытался смонтировать /dev/something, хе-хе-хе».

И вот куда всё это идёт? В дневник.

Да-да, у Linux ядра есть свой личный дневничок наблюдений за жизнью. Только вместо «дорогой дневник, сегодня я почувствовал себя одиноким ядром», там:

[ 0.015000] Initializing cgroup subsys cpu
[ 0.020001] PCI: Using configuration type 1
[ 0.026123] Kernel panic — not syncing: Attempted to kill init!

Знакомься: ring buffer

Этот самый дневник — он не бесконечный. Ядро же не может тратить гигабайты памяти, чтобы записывать каждый чих вентилятора. Поэтому оно пишет в специальную штуку под названием ring buffer — кольцевой буфер.

Почему кольцевой? Потому что:

  • Он, как тюбик пасты, вмещает только определённое количество текста.
  • Когда буфер заполняется, новые записи выдавливают старые. Начинается круговорот логов в природе.
  • И если ты что-то не успел прочитать — извини, дружище, это уже улетело в небытие.

Ring buffer — это как белая доска у параноидального админа: стирает всё старое, чтобы писать про свежие баги.

dmesg — это как cat, только полезнее

Теперь вопрос: а как вообще прочитать, что там ядро себе бурчит?

Тут на сцену выходит герой — dmesg. Его имя расшифровывается как display message, но на самом деле это аббревиатура от «дружище, медленно экранируй системный геморрой».

Запускаешь dmesg, и ядро такое: «Ща, брат, глянь, что я тут натворило за последние пару минут».

Например:

$ dmesg
[ 0.000000] Linux version 6.8.3 (gcc version 13.2.1)
[ 0.123456] usb 3-2: new high-speed USB device number 2 using xhci_hcd
[ 0.456789] eth0: link up
[ 0.999999] EXT4-fs (sda1): recovery complete

Понимаешь? Это хроника загрузки твоей системы. Это как event-log Windows, только без графики, нытья и зависаний. Всё чётко, по делу.

А зачем мне это?

Ты думаешь: «Ладно, и чё мне с этим делать, я шо, системный админ?!»

А я тебе так скажу —
если ты на Linux, ты уже системный админ, нравится тебе это или нет.

dmesg нужен, когда:

  • Что-то не работает — скажем, ты втыкаешь USB, а оно не видно. А dmesg говорит: «Да чувак, ты воткнул кирпич, а не флешку».
  • Ядро паникует — ты видишь kernel panic, а там можно посмотреть, из-за чего паника. Может модуль, может драйвер, может сам чёрт.
  • Драйверы загружаются странно — смотришь в dmesg, а там видно, какие модули загружаются, какие отваливаются и кто вообще виноват.
  • Ты хочешь казаться умным — запустил dmesg, посмотрел на зелёные буковки и сказал: «Хм, похоже, что udev не инициировал блочный девайс корректно». Все сразу уважают.

Крутые фишки

  • dmesg -T — показывает человеческое время, а не вот это [ 4.123456] как у пришельцев.
  • dmesg | grep -i error — ищет только ошибки. Быстро находишь, что сломано.
  • dmesg -w — "режим Big Brother": ядро пишет — ты читаешь вживую. Как tail -f, только ядро шепчет тебе на ухо.

Итак, подытожим. Ring buffer — это как мозг твоего ядра, но с очень короткой памятью. А dmesg — это способ подключиться к этому мозгу и понять, почему Wi-Fi не работает, почему диск не монтируется, и кто опять пнул ядро.

А в следующий раз, когда будешь стоять перед монитором и думать, почему у тебя чёрный экран после загрузки — вспомни, что dmesg знает всё. Просто спроси его.