disminuir el nivel de verbosidad del registro de arranque del kernel


9

Cuando mi kernel arranca, además de la información importante útil, imprime mucha información de depuración, como

....
kernel: [0.00000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
kernel: [0.00000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
kernel: [0.00000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
...
kernel: [0.00000] MTRR variable ranges enabled:
kernel: [0.00000]   0 base 0000000000 mask 7E00000000 write-back
...
kernel: [0.00000] init_memory_mapping: [mem 0x00100000-0xcf414fff]
kernel: [0.00000]  [mem 0x00100000-0x001fffff] page 4k
kernel: [0.00000]  [mem 0x00200000-0xcf3fffff] page 2M
kernel: [0.00000]  [mem 0xcf400000-0xcf414fff] page 4k
....
kernel: [0.00000] ACPI: XSDT 0xD8FEB088 0008C (v01 DELL CBX3 01072009 AMI 10013)
kernel: [0.00000] ACPI: FACP 0xD8FFC9F8 0010C (v05 DELL CBX3 01072009 AMI 10013)
....
kernel: [0.00000] Early memory node ranges
kernel: [0.00000]   node   0: [mem 0x00001000-0x0009cfff]
kernel: [0.00000]   node   0: [mem 0x00100000-0xcf414fff]
kernel: [0.00000]   node   0: [mem 0xcf41c000-0xcfdfcfff]
....
kernel: [0.00000] ACPI: Local APIC address 0xfee00000
kernel: [0.00000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
kernel: [0.00000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled)

y mucho, mucho más.

No veo cómo esto puede ser útil para nadie que no sea un desarrollador / depurador de kernel.

He descubierto que puedo deshacerme de ellos utilizando loglevel=5como parámetro de arranque. Los registros de depuración ya no se imprimen en el terminal, pero todavía están dentro dmesgy fuera syslog.

¿Es posible disminuir el nivel de detalle de registro de inicio a nivel mundial, por lo que dmesgy syslogno se inundó por esta información inútil?

Estoy usando kernel autocompilado 3.18

SOLUCIÓN ACEPTADA

Resulta que poner las siguientes líneas para /etc/rsyslog.confresolver el problema para mí:

kern.debug   /dev/null
& ~

¿Cuáles son los problemas reales que estás tratando de resolver? ¿Archivos de registro demasiado grandes? Preguntando ya que no veo ningún problema con tener esta información en un registro que generalmente no es leída por humanos y cuyo aumento de tamaño es trivial.
Hennes

@Hennes - el problema es que, syslogy dmesgse inundó con los registros de depuración inútiles, y con lo que las advertencias y errores reales más fácil de pasar por alto. Además, dmesgy syslogdebe ser leído por humanos (es decir, el administrador). Ese es todo su propósito.
Martin Vegter

La preocupación por la inundación de información importante es un buen punto.
Hennes

1
Puede que le interese esta pregunta en el sitio web Superuser Stack-Exchange: ¿Cómo evitar que los mensajes del núcleo inunden mi consola?
Perror

Respuestas:


5

Para syslog Puede agregar la siguiente línea a /etc/syslog.conf:

kern.info; kern.debug   /dev/null

Descartará los mensajes de kernel .info y .debug (que se descartan con loglevel = 5)

Además, dmesgse puede usar con la opción -nde mostrar mensajes con cierto nivel de registro.


4

Algunos de los registros están impresos por printk () que no pudo desactivar. Y algunos están impresos por pr_debug (), que puede desactivarse depende de la configuración del núcleo. El comportamiento de pr_debug () está controlado por la función de depuración dinámica. Si se configura CONFIG_DYNAMIC_DEBUG , todas las llamadas pr_debug () se pueden habilitar / deshabilitar dinámicamente por llamada. El detalle de la depuración dinámica está aquí . Si CONFIG_DYNAMIC_DEBUG no está configurado, pero DEBUG está definido en el archivo fuente, pr_debug () funciona como printk () . Si ambos no están definidos, pr_debug no hará nada.

Aquí está la definición en el núcleo:

#include <linux/dynamic_debug.h>

/* If you are writing a driver, please use dev_dbg instead */
#if defined(CONFIG_DYNAMIC_DEBUG)
/* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
#define pr_debug(fmt, ...) \
    dynamic_pr_debug(fmt, ##__VA_ARGS__)
#elif defined(DEBUG)
#define pr_debug(fmt, ...) \
    printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#else
#define pr_debug(fmt, ...) \
    no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
#endif

Por lo tanto, verifique la configuración de su núcleo y descubra de dónde provienen estos registros. Entonces sabrás cómo deshabilitarlo.



0

Además de configurar el loglevelKCL, también puede ajustar el kernel.printksysctl para que el nivel máximo refleje lo que desea y persista durante el arranque.

En cuanto a esta aclaración adicional en el comentario:

El problema es que syslog y dmesg están inundados de registros de depuración inútiles y, por lo tanto, las advertencias y errores reales son más fáciles de pasar por alto.

Solo lo usaría logrotateen un trabajo cron para mover los archivos fuera del camino después de reiniciar :

root ~ $ crontab -l
@reboot /usr/sbin/logrotate --force /root/rotate-boot-messages
@reboot /bin/dmesg -c

root ~ $ cat /root/rotate-boot-messages
"/var/log/dmesg" {
  copytruncate
  notifempty
  missingok
  dateext
}
"/var/log/syslog" {
  copytruncate
  notifempty
  missingok
  dateext
}

Luego comienza de nuevo, por así decirlo, con datos de depuración limitados que se descargan en registros.


Lo siento, pero sugerir logrotatecompletamente pierde el punto. Mi problema no es que mis archivos de registro sean demasiado grandes y que me esté quedando sin espacio en disco. En cambio, el problema es que la información de depuración en esos archivos de registro hace que la información útil sea menos accesible.
Martin Vegter

Derecha. Use logrotate para mover el registro con toda esa basura fuera del camino, de modo que tenga un archivo de registro vacío después del arranque, para que pueda ver lo que importa. Mi uso de logrotate aquí no es canónico: use mv si lo desea. El punto es sacar la basura del camino lo más pronto posible después del arranque.
obispo

A menos que quiera decir que estos mensajes oscurecen los problemas de tiempo de arranque? En cuyo caso, la solución aceptada parece ideal.
obispo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.