Comanda `dmesg` oferă o perspectivă asupra proceselor de inițializare ale sistemului Linux, permițând examinarea detaliată a mesajelor generate de dispozitivele hardware și de driverele acestora, stocate într-un buffer circular al nucleului.
Cum funcționează Bufferul Circular în Linux
În sistemele de operare Linux și Unix, secvența de evenimente la pornirea computerului este împărțită în două etape distincte: procesul de boot și procesul de pornire propriu-zis.
Procesul de boot (care implică BIOS sau UEFI, MBR și GRUB) pregătește sistemul până în momentul în care nucleul este încărcat în memorie și conectat la discul RAM inițial (initrd sau initramfs), iar systemd este pornit.
Procesul de pornire preia controlul și finalizează inițializarea sistemului de operare. În etapele incipiente ale inițializării, serviciile de logare, cum ar fi syslogd sau rsyslogd, nu sunt încă active. Pentru a preveni pierderea mesajelor importante de eroare sau a avertismentelor din această etapă, nucleul folosește un buffer inelar ca spațiu temporar de stocare a mesajelor.
Un buffer circular este o zonă de memorie alocată pentru mesaje, având o dimensiune fixă și o structură simplă. Când bufferul se umple, mesajele noi le suprascriu pe cele mai vechi. Este conceptual un „buffer circular”.
Bufferul inelar al nucleului stochează informații precum mesajele de inițializare ale driverelor de dispozitive, mesajele de la hardware și mesajele de la modulele kernelului. Acest buffer este un punct de plecare excelent pentru investigarea erorilor hardware sau a altor probleme legate de pornire.
Pentru a analiza conținutul acestui buffer, folosiți comanda `dmesg`.
Comanda `dmesg`
Comanda `dmesg` permite vizualizarea mesajelor stocate în bufferul circular. În mod implicit, utilizarea comenzii `dmesg` necesită privilegii de administrator (sudo).
sudo dmesg
Toate mesajele din bufferul circular vor fi afișate în terminal.

Ieșirea poate fi destul de voluminoasă, așa că este recomandat să o filtrați folosind comanda `less`:
sudo dmesg | less

Acum este posibilă navigarea prin mesaje și identificarea celor relevante.

Cu ajutorul funcției de căutare din `less`, accesibilă prin tasta „/”, puteți localiza și evidenția anumite cuvinte sau expresii.
Eliminarea Necesității `sudo`
Pentru a evita folosirea `sudo` la fiecare rulare a comenzii `dmesg`, se poate utiliza următoarea comandă. Atenție: aceasta va permite oricărui utilizator să acceseze informațiile din `dmesg` fără permisiuni de administrator.
sudo sysctl -w kernel.dmesg_restrict=0

Forțarea Ieșirii Colorate
Comanda `dmesg` ar trebui să afișeze implicit ieșirea colorată. Dacă nu se întâmplă acest lucru, se poate utiliza opțiunea `-L` pentru a forța colorarea ieșirii.
sudo dmesg -L

Pentru a seta permanent afișarea colorată ca implicită, folosiți:
sudo dmesg --color=always

Formatarea Timpului
În mod standard, `dmesg` folosește o notație de timp în secunde și nanosecunde, începând de la pornirea nucleului. Pentru a afișa informațiile într-un format mai ușor de înțeles, utilizați opțiunea `-H` (uman).
sudo dmesg -H

Această opțiune are două efecte:

Ieșirea este afișată automat prin `less`, iar marcajele de timp includ data și ora, cu o rezoluție de un minut. Mesajele înregistrate în același minut sunt etichetate cu secundele și nanosecundele trecute de la începutul minutului.
Marcaje Temporale Mai Ușor de Citit
Dacă precizia nanosecundelor nu este necesară, puteți folosi opțiunea `-T` (lizibil de om) pentru a afișa marcajele de timp într-un format mai accesibil. (Notă: `-H` este opțiunea „umană”, iar `-T` este opțiunea „lizibilă de către om”).
sudo dmesg -T

Marcajele de timp vor include data și ora standard, dar rezoluția va fi redusă la un minut.

Toate evenimentele din același minut vor avea același marcaj temporal. Această opțiune este suficientă dacă vă interesează doar ordinea evenimentelor. De asemenea, ieșirea nu va fi trimisă automat către `less`, ci va reveni la promptul de comandă.
Monitorizarea Evenimentelor Live
Pentru a vizualiza mesajele în timp real, pe măsură ce ajung în bufferul inelar al nucleului, folosiți opțiunea `–follow` (urmărește mesajele). Deși bufferul inelar stochează mesaje din secvența de pornire, mesajele pot fi adăugate și după ce sistemul a pornit.
Orice modificare a hardware-ului conectat la sistem va genera mesaje care vor fi stocate în bufferul inelar. Adăugarea sau actualizarea unui modul kernel, conectarea unei unități USB sau a unui dispozitiv Bluetooth vor declanșa apariția de noi mesaje în ieșirea comenzii `dmesg`. Chiar și operațiunile pe hardware-ul virtual, cum ar fi pornirea unei mașini virtuale, vor adăuga noi informații în buffer.
sudo dmesg --follow

Terminalul nu va reveni la promptul de comandă; mesajele noi vor fi afișate în partea de jos a ferestrei.

Chiar și montarea unui CD-ROM va fi înregistrată ca o schimbare, deoarece conținutul discului este conectat la sistemul de directoare.

Pentru a opri fluxul de mesaje în timp real, apăsați Ctrl+C.
Afișarea Ultimelor Zece Mesaje
Comanda `tail` poate fi folosită pentru a afișa ultimele zece mesaje din bufferul inelar. Desigur, se poate prelua orice număr de mesaje. Zece este doar un exemplu.
sudo dmesg | tail -10

Ultimele zece mesaje vor fi listate în terminal.

Căutarea unor Termeni Specifici
Utilizați comanda `grep` pentru a căuta anumite șiruri de caractere sau modele în ieșirea `dmesg`. Opțiunea `-i` (ignoră majusculele) permite căutarea indiferent de scrierea cu majuscule sau minuscule. De exemplu, o căutare pentru „usb” va returna și rezultate pentru „USB” sau „Usb”.
sudo dmesg | grep -i usb

Rezultatele vor fi afișate, evidențiind termenul căutat.

Putem identifica mesajele referitoare la primul hard disk SCSI al sistemului, notat ca `sda`. (În prezent, `sda` este folosit și pentru primele hard disk-uri SATA și pentru unitățile USB).
sudo dmesg | grep -i sda

Toate mesajele care menționează `sda` vor fi listate.

Pentru a căuta mai mulți termeni simultan, folosiți opțiunea `-E` (extinde expresia regulată) a comenzii `grep`. Introduceți termenii de căutare într-un șir între ghilimele, separați prin `|`:
sudo dmesg | grep -E "memory|tty|dma"

Vor fi afișate toate mesajele care menționează oricare dintre termenii de căutare.

Utilizarea Nivelurilor de Jurnal
Fiecare mesaj înregistrat în bufferul circular al nucleului are un nivel de importanță atașat. Aceste niveluri sunt:
emerg: Sistemul este nefuncțional.
alertă: Acțiune imediată necesară.
crit: Condiții critice.
err: Condiții de eroare.
warn: Avertismente.
Notă: Stare normală, dar semnificativă.
info: Informativ.
depanare: Mesaje de depanare.
Comanda `dmesg` poate filtra mesajele în funcție de nivelul lor de importanță utilizând opțiunea `-l` (nivel). Pentru a afișa doar mesajele de nivel „informațional”, utilizați:
sudo dmesg -l info

Vor fi listate doar mesajele informative, fără erori sau avertismente.

Pentru a combina mai multe niveluri, introduceți-le ca parametru, separate prin virgulă:
sudo dmesg -l debug,notice

Ieșirea va include un amestec de mesaje de la fiecare nivel specificat:

Categoriile de Unități
Mesajele `dmesg` sunt grupate în categorii numite „facilități”. Acestea includ:
kern: Mesaje ale nucleului.
utilizator: Mesaje la nivel de utilizator.
mail: Sistem de email.
daemon: Servicii de sistem (demoni).
auth: Mesaje de securitate/autorizare.
syslog: Mesaje interne `syslogd`.
lpr: Subsistem de imprimare.
știri: Subsistem de știri de rețea.
Pentru a filtra mesajele în funcție de facilitate, folosiți opțiunea `-f` (facilitate):
sudo dmesg -f daemon

Vor fi afișate toate mesajele referitoare la serviciile de sistem (demoni).

Similar cu nivelurile, se pot combina mai multe facilități pentru a afișa mesajele relevante:
sudo dmesg -f syslog, daemon

Ieșirea va include un amestec de mesaje `syslog` și `daemon`.

Combinarea Facilității și a Nivelului
Opțiunea `-x` (decodificare) face ca `dmesg` să afișeze facilitatea și nivelul ca prefixe lizibile pentru fiecare linie.
sudo dmesg -x

Facilitatea și nivelul vor fi vizibile la începutul fiecărei linii:

Prima secțiune evidențiată prezintă un mesaj de la facilitatea „kernel” cu nivelul „notificare”. A doua secțiune evidențiată reprezintă un mesaj de la facilitatea „kernel” cu nivelul „informații”.
De ce este important?
Pe scurt, pentru depanare.
Dacă întâmpinați probleme cu un dispozitiv hardware care nu este recunoscut sau funcționează necorespunzător, `dmesg` poate ajuta la diagnosticarea cauzei.
Folosiți `dmesg` pentru a examina mesajele de la cel mai general până la cel mai specific nivel, căutând erori sau avertismente legate de dispozitivul hardware problematic.
- Căutați în mesaje facilitățile relevante pentru a afla detalii utile.
- Filtrați ieșirea `dmesg` cu `grep` pentru a localiza șiruri de caractere sau identificatori specifici, cum ar fi coduri de producător sau modele de produse.
- Căutați termeni generali cum ar fi „gpu” sau „stocare”, sau termeni de eroare precum „eșec”, „eșuat” sau „incapabil”.
- Folosiți opțiunea `–follow` și monitorizați mesajele în timp real.
Depanare plăcută!