Quali sono i concetti di "kernel ring buffer", "user level", "log level"?


35

Ho visto spesso le parole "kernel ring buffer", "user level", "log level" e alcune altre parole appaiono insieme. per esempio

/ var / log / dmesg Contiene informazioni sul buffer dell'anello del kernel.

/var/log/kern.log Contiene solo i messaggi del kernel di qualsiasi livello di Google

/var/log/user.log Contiene informazioni su tutti i registri a livello di utente

Riguardano i registri? In che modo sono correlati e diversi?

Per "livello", immaginerei una gerarchia di più livelli?

Il "livello utente" è correlato allo "spazio utente"?

Sono in qualche modo collegati al runlevel o all'anello di protezione ?

Risposte:


41

Sì, tutto ciò ha a che fare con la registrazione. No, nulla ha a che fare con il runlevel o "anello di protezione".

Il kernel mantiene i suoi log in un buffer ad anello. Il motivo principale di ciò è che i log dall'avvio del sistema vengono salvati fino a quando il demone syslog non ha la possibilità di avviarsi e raccoglierli. Altrimenti non verrebbe registrato alcun registro prima dell'avvio del demone syslog. Il contenuto di quel ring buffer può essere visto in qualsiasi momento usando il dmesgcomando, e anche il suo contenuto viene salvato nello stesso /var/log/dmesgmomento in cui il demone syslog si sta avviando.

Tutti i log che non provengono dal kernel vengono inviati quando vengono generati nel demone syslog in modo che non vengano conservati in alcun buffer. I log del kernel sono anche raccolti dal demone syslog man mano che vengono generati ma continuano anche a essere salvati (inutilmente, senza dubbio, nel buffer ad anello).

I livelli di registro possono essere visti documentati nella manpage syslog (3) e sono i seguenti:

  • LOG_EMERG : il sistema è inutilizzabile
  • LOG_ALERT : l'azione deve essere eseguita immediatamente
  • LOG_CRIT : condizioni critiche
  • LOG_ERR : condizioni di errore
  • LOG_WARNING : condizioni di avvertimento
  • LOG_NOTICE : condizione normale, ma significativa
  • LOG_INFO : messaggio informativo
  • LOG_DEBUG : messaggio a livello di debug

Ogni livello è progettato per essere meno "importante" rispetto al precedente. Un file di registro che registra i registri a un livello registra anche i registri a tutti i livelli più importanti.

La differenza tra /var/log/kern.loge /var/log/mail.log(ad esempio) non ha a che fare con il livello ma con la struttura o la categoria. Le categorie sono inoltre documentate sulla manpage.


Grazie. (1) Il "livello utente" è correlato allo "spazio utente"? (2) Da quello che hai detto, /var/log/kern.loge /var/log/dmesgdovrebbe avere lo stesso contenuto dei messaggi del kernel? Ma il loro contenuto non è lo stesso.
Tim

"livello utente" non è una cosa, per quanto ne so. C'è il livello di syslog, che è il livello di "importanza" di un messaggio di syslog (ho elencato i livelli), e non ha nulla a che fare con lo spazio dell'utente rispetto allo spazio del kernel. /var/log/kern.logdovrebbe contenere il dmesgcontenuto (forse formattato diversamente) dal momento dell'avvio. A meno che non sia passato molto tempo dall'avvio e tali contenuti sono stati ruotati.
Celada,

La mia seconda domanda è: Mentre dmesgstampa i valori correnti del buffer dell'anello del kernel, i valori passati / vecchi del buffer sono memorizzati /var/log/dmesg. Quindi l' dmesgoutput è solo un recente sottoinsieme di /var/log/dmesgcontenuti e sono diversi. Quindi i contenuti di /var/log/dmesg(non dmesgcome nel tuo commento) e /var/log/kernel.loggli stessi?
Tim

Dipende da quando! Poco dopo l'avvio, il /var/log/dmesgcontenuto sarà probabilmente vicino alla fine di /var/log/kern.log. Molto più tardi, non sarà lì, sarà ruotato fuori. In generale, /var/log/kern.logconterrà registri più vecchi di qualsiasi data istantanea del buffer dell'anello di registro del kernel e anche registri più recenti dell'istantanea.
Celada,


17

Per rispondere almeno alla prima parte della tua domanda su dmesg:

/var/log/dmesg memorizza il contenuto del "kernel ring buffer", un buffer di memoria creato dal kernel all'avvio in cui memorizzare i dati di registro che genera non appena si supera la fase del bootloader.

Un buffer ad anello è un tipo speciale di buffer che ha sempre una dimensione costante, rimuovendo i messaggi più vecchi quando arrivano nuovi messaggi. Il testo memorizzato nel buffer ad anello del kernel è ciò che vedi lampeggiare sullo schermo quando si avvia per la prima volta un Unix -come macchina in modalità console (nessuna schermata iniziale, Plymouth). Il registro del kernel è archiviato in un buffer di memoria in modo che i registri di avvio abbiano un posto dove trovarsi, fino a quando il sistema non si è avviato automaticamente al punto in cui il syslogdaemon può subentrare.

dmesgsotto Linux fa parte del util-linuxpacchetto essenziale di strumenti di manutenzione del sistema pubblicato da kernel.org. Secondo la dmesg(1)pagina man,

dmesg è usato per esaminare o controllare il buffer dell'anello del kernel.

Vedi: http://www.computerhope.com/unix/dmesg.htm

Sotto 'systemd' init, questo comando può essere usato per stampare il buffer dell'anello del kernel
# journalctl --dmesg or journalctl -k:, thxs per correzione @don_crissti

Emettendo il comando dmesg | grep -i ethernet per esempio, analizzerà il buffer dell'anello del kernel per la stringa 'ethernet'.

Spero che questo aiuti almeno con la prima parte della tua richiesta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.