¿Cuáles son los conceptos de "buffer de anillo de kernel", "nivel de usuario", "nivel de registro"?

35

A menudo vi las palabras "kernel ring buffer", "nivel de usuario", "nivel de registro" y algunas otras palabras aparecen juntas. p.ej

/ var / log / dmesg Contiene información del búfer de anillo del núcleo.

/var/log/kern.log Contiene solo los mensajes del núcleo de cualquier nivel de registro

/var/log/user.log Contiene información sobre todos los registros de nivel de usuario

¿Son todos acerca de los registros? ¿Cómo están relacionados y son diferentes?

Por "nivel", me imagino una jerarquía de múltiples niveles?

¿El "nivel de usuario" está relacionado con el "espacio de usuario"?

¿Están relacionados con el nivel de ejecución o el anillo de protección de alguna manera?

Tim
fuente

Respuestas:

41

Sí, todo esto tiene que ver con el registro. No, nada de eso tiene que ver con el nivel de ejecución o el "anillo de protección".

El núcleo mantiene sus registros en un búfer en anillo. La razón principal de esto es para que los registros del inicio del sistema se guarden hasta que el demonio syslog tenga la oportunidad de iniciarse y recopilarlos. De lo contrario, no habría registro de ningún registro antes del inicio del demonio syslog. El contenido de ese búfer en anillo se puede ver en cualquier momento usando el dmesgcomando, y su contenido también se guarda /var/log/dmesgjusto cuando se inicia el demonio syslog.

Todos los registros que no provienen del núcleo se envían a medida que se generan al demonio syslog para que no se guarden en ningún búfer. Los registros del núcleo también son recogidos por el demonio syslog a medida que se generan, pero también se siguen guardando (innecesariamente, posiblemente) en el búfer de anillo.

Los niveles de registro se pueden ver documentados en la página de manual de syslog (3) y son los siguientes:

  • LOG_EMERG : el sistema no se puede usar
  • LOG_ALERT : se deben tomar medidas de inmediato
  • LOG_CRIT : condiciones críticas
  • LOG_ERR : condiciones de error
  • LOG_WARNING : condiciones de advertencia
  • LOG_NOTICE : condición normal pero significativa
  • LOG_INFO : mensaje informativo
  • LOG_DEBUG : mensaje de nivel de depuración

Cada nivel está diseñado para ser menos "importante" que el anterior. Un archivo de registro que registra registros en un nivel también registrará registros en todos los niveles más importantes.

La diferencia entre /var/log/kern.logy /var/log/mail.log(por ejemplo) no tiene que ver con el nivel sino con la instalación o categoría. Las categorías también están documentadas en la página de manual.

Celada
fuente
Gracias. (1) ¿El "nivel de usuario" está relacionado con el "espacio de usuario"? (2) ¿Según lo que dijo, /var/log/kern.logy /var/log/dmesgdebería tener el mismo contenido que los mensajes del núcleo? Pero sus contenidos no son los mismos.
Tim
"nivel de usuario" no es una cosa, que yo sepa. Existe el nivel de syslog, que es el nivel de "importancia" de un mensaje de syslog (enumeré los niveles), y no tiene nada que ver con el espacio del usuario frente al espacio del kernel. /var/log/kern.logdebe contener el dmesgcontenido (quizás con un formato diferente) del tiempo de arranque. A menos que haya pasado mucho tiempo desde el arranque y esos contenidos hayan sido rotados.
Celada
Mi segunda pregunta es: mientras dmesgimprime los valores actuales del búfer de anillo del núcleo, los valores anteriores / antiguos del búfer se almacenan en /var/log/dmesg. Por lo tanto, la dmesgsalida es solo un subconjunto reciente de /var/log/dmesgcontenido, y son diferentes. ¿Entonces los contenidos de /var/log/dmesg(no dmesgcomo en su comentario) son /var/log/kernel.loglos mismos?
Tim
Depende cuando! Poco después del arranque, el /var/log/dmesgcontenido probablemente estará cerca del final de /var/log/kern.log. Mucho más tarde, no estará allí, habrá girado. En general, /var/log/kern.logcontendrá registros que son más antiguos que cualquier instantánea del búfer de anillo de registro del núcleo y también registros que son más nuevos que la instantánea.
Celada
17

Para responder al menos la primera parte de su pregunta sobre dmesg:

/var/log/dmesg almacena el contenido del 'búfer de anillo del núcleo', un búfer de memoria creado por el núcleo en el arranque en el que almacenar los datos de registro que genera tan pronto como pasa la fase del cargador de arranque.

Un búfer en anillo es un tipo especial de búfer que siempre tiene un tamaño constante, eliminando los mensajes más antiguos cuando llegan nuevos mensajes. El texto almacenado en el búfer en anillo del núcleo es lo que ves parpadeando en la pantalla cuando inicias un Unix por primera vez -como máquina en modo consola (sin pantalla de bienvenida, Plymouth). El registro del kernel se almacena en un búfer de memoria para que los registros de arranque tengan algún lugar, hasta que el sistema se haya reiniciado hasta el punto en que el syslogdemonio pueda hacerse cargo.

dmesgbajo Linux es parte del util-linuxpaquete esencial de herramientas de mantenimiento del sistema publicado por kernel.org. Según la dmesg(1)página del manual,

dmesg se usa para examinar o controlar el búfer de anillo del núcleo.

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

Bajo 'systemd' init, este comando puede usarse para imprimir el búfer de anillo del núcleo:
# journalctl --dmesg or journalctl -kthxs para corrección @don_crissti

Al emitir el comando, dmesg | grep -i ethernet por ejemplo, analizará el búfer de anillo del núcleo para la cadena 'ethernet'.

Espero que esto ayude al menos con la primera parte de su consulta.

nomadrc
fuente