Команда 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 | Повідомлення на рівні користувача. |
Поштова система. | |
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.
Вдалого пошуку!