Як використовувати команду dmesg в Linux

Команда dmesg відкриває нам прихований світ процесів завантаження операційної системи Linux. Вона дозволяє переглядати та аналізувати повідомлення від апаратних пристроїв та драйверів, зберігаючи їх у кільцевому буфері ядра. Це, без перебільшення, «друг» у пошуку та усуненні неполадок.

Як працює кільцевий буфер ядра Linux?

В операційних системах, таких як Linux і Unix, процес запуску комп’ютера розділяється на дві фази: завантаження та ініціалізація. На етапі завантаження BIOS або UEFI, MBR і GRUB ініціалізують систему до моменту, коли ядро завантажується в пам’ять, підключається до initrd або initramfs та запускається systemd.

Після цього процеси ініціалізації перехоплюють естафету та завершують запуск операційної системи. На ранніх етапах ініціалізації демони журналу, такі як syslogd або rsyslogd, ще не запущені. Для запобігання втрати важливих повідомлень про помилки та попередження, ядро використовує кільцевий буфер, що слугує місцем для їх зберігання.

Кільцевий буфер — це область пам’яті, виділена для зберігання повідомлень. Він має просту структуру і фіксований розмір. При заповненні нові повідомлення перезаписують найстаріші. Можна уявити його як “циклічний” буфер.

Кільцевий буфер ядра зберігає інформацію про ініціалізацію драйверів пристроїв, повідомлення від апаратного забезпечення та модулів ядра. Завдяки цим низькорівневим повідомленням про запуск, він є ідеальним місцем для початку розслідування апаратних несправностей або інших проблем, що виникають під час запуску системи.

І саме тут на допомогу приходить команда dmesg.

Команда dmesg: ваш інструмент дослідження

Команда dmesg дозволяє переглядати повідомлення, збережені в кільцевому буфері. За замовчуванням для її використання потрібні права адміністратора (sudo).

sudo dmesg

Всі повідомлення з кільцевого буфера виводяться у вікно термінала.

Інформації може бути дуже багато, тому часто доцільно використовувати її з командою less:

sudo dmesg | less

Це дає можливість зручно прокручувати повідомлення, шукаючи потрібну інформацію.

У less ви також можете використовувати пошук, натиснувши клавішу «/» та ввівши необхідний текст.

Звільнення від sudo

Якщо вам незручно використовувати sudo кожного разу при виклику dmesg, можна скористатися наступною командою. Проте, будьте обережні: це надасть можливість будь-якому користувачу вашої системи використовувати dmesg без прав адміністратора.

sudo sysctl -w kernel.dmesg_restrict=0

Кольоровий вивід

Зазвичай, dmesg виводить інформацію з кольоровим форматуванням. Якщо цього не відбувається, ви можете примусово активувати кольори за допомогою параметра -L.

sudo dmesg -L

Щоб dmesg завжди використовував кольоровий вивід за замовчуванням, застосуйте команду:

sudo dmesg --color=always

Читабельні позначки часу

За замовчуванням dmesg показує позначку часу в секундах і наносекундах з моменту запуску ядра. Для перегляду у більш зручному форматі використовуйте параметр -H.

sudo dmesg -H

Це має два наслідки:

Вивід автоматично виводиться через less.

Позначки часу містять дату та час з роздільною здатністю до хвилин. Повідомлення, що з’явилися протягом однієї хвилини, позначаються в секундах та наносекундах від початку цієї хвилини.

Ще більш читабельні позначки часу

Якщо вам не потрібна точність до наносекунд, але ви хочете мати простіші позначки часу, використовуйте параметр -T. (-H – це “людський”, а -T – “читабельний для людини”).

sudo dmesg -T

Позначки часу відображаються у форматі стандартної дати та часу, але з роздільною здатністю до хвилини.

Всі події, що відбулися в межах однієї хвилини, мають однакову позначку часу. Цього достатньо, якщо вас цікавить лише послідовність подій. Важливо також відзначити, що ви не потрапите у less, а повернетеся до командного рядка.

Перегляд подій у реальному часі

Для перегляду повідомлень, що надходять в кільцевий буфер ядра в режимі реального часу, використовуйте опцію –follow. Як можуть надходити живі повідомлення після того, як комп’ютер вже запущений? Будь-які зміни апаратного забезпечення, підключеного до вашої системи, викликають надсилання повідомлень в кільцевий буфер. Оновлення або додавання модуля ядра, підключення USB-накопичувача або відключення пристрою Bluetooth – все це відобразиться у виводі dmesg. Навіть віртуальне обладнання викликає появу нових повідомлень. Запуск віртуальної машини додасть інформацію до буфера.

sudo dmesg --follow

Ви не повернетеся до командного рядка. Нові повідомлення будуть з’являтися в нижній частині термінала.

Навіть підключення CD-ROM-диска буде сприйнято як зміна, оскільки ви приєднуєте його до дерева каталогів.

Щоб вийти з режиму live-стрічки, натисніть Ctrl+C.

Отримання останніх повідомлень

Використовуйте команду tail для отримання останніх повідомлень кільцевого буфера. Кількість повідомлень можна вказати, наприклад, 10.

sudo dmesg | tail -10

Останні 10 повідомлень виведуться на екран.

Пошук конкретних термінів

Використовуйте grep для пошуку певних рядків або шаблонів у виводі dmesg. За допомогою параметра -i (ігнорувати регістр) ви можете шукати терміни без урахування їх регістру. Результати включатимуть як “usb”, так і “USB”.

sudo dmesg | grep -i usb

Результати пошуку з відповідним рядком відображаються в терміналі.

Наприклад, можна знайти повідомлення, що містять інформацію про перший SCSI жорсткий диск sda (що на сьогодні також застосовується і для перших жорстких дисків SATA, а також для USB-накопичувачів).

sudo dmesg | grep -i sda

Всі повідомлення, що містять згадку про sda, будуть виведені на екран.

Для пошуку кількох термінів одночасно використовуйте параметр -E (розширений регулярний вираз), вказавши пошукові терміни в лапках, розділені символом “|”.

sudo dmesg | grep -E "memory|tty|dma"

Будь-яке повідомлення, що містить згадку про будь-який із зазначених термінів, буде виведено в термінал.

Використання рівнів журналу

Кожне повідомлення в кільцевому буфері ядра має відповідний рівень важливості. Існує наступна ієрархія рівнів:

emerg Система непридатна до використання.
alert Потрібні термінові дії.
crit Критичні умови.
err Умови помилки.
warn Умови попередження.
notice Нормальний, але значний стан.
info Інформаційне повідомлення.
debug Повідомлення на рівні налагодження.

Використовуючи параметр -l (рівень) можна отримати повідомлення певного рівня. Наприклад, щоб вивести лише повідомлення рівня “info” використайте:

sudo dmesg -l info

Відобразяться лише інформаційні повідомлення без помилок і попереджень.

Для перегляду повідомлень декількох рівнів журналу одночасно, перерахуйте їх через кому:

sudo dmesg -l debug,notice

Вивід буде містити повідомлення обох рівнів.

Категорії

Повідомлення dmesg згруповані за категоріями, які називаються “об’єктами”. Ось їх перелік:

kern Повідомлення ядра.
user Повідомлення на рівні користувача.
mail Поштова система.
daemon Системні демони.
auth Повідомлення безпеки/авторизації.
syslog Внутрішні повідомлення syslogd.
lpr Підсистема лінійного принтера.
news Підсистема мережевих новин.

Щоб фільтрувати вивід dmesg за об’єктом, використовуйте параметр -f:

sudo dmesg -f daemon

Dmesg виведе всі повідомлення, що стосуються демонів.

Для виведення повідомлень з декількох об’єктів перерахуйте їх через кому:

sudo dmesg -f syslog,daemon

Вивід буде комбінацією повідомлень syslog і daemon.

Об’єднання об’єктів і рівнів

Параметр -x (декодування) показує об’єкт і рівень у вигляді зрозумілих префіксів перед кожним рядком.

sudo dmesg -x

Об’єкт та рівень можна побачити на початку кожного рядка:

Перший виділений розділ – це повідомлення від об’єкта “ядро” з рівнем “notice”. Другий виділений розділ – це повідомлення від об’єкта “ядро” з рівнем “info”.

Навіщо це потрібно?

Якщо коротко – для пошуку несправностей.

Якщо у вас виникли проблеми з розпізнаванням або належною роботою апаратного забезпечення, dmesg може допомогти з’ясувати причину.

Використовуйте dmesg для перегляду повідомлень, шукаючи помилки або попередження, пов’язані з конкретним апаратним елементом або проблемою. Перевіряйте згадки об’єктів, шукаючи корисну інформацію. Використовуйте grep для пошуку ідентифікаторів виробника, номерів моделей, або загальних термінів, таких як “gpu” або “storage”, а також слів “failure”, “failed” або “unable”. Переглядайте повідомлення dmesg в режимі реального часу за допомогою опції –follow.

Вдалого пошуку!