disminuir el nivel de verbosidad del logging de arranque del kernel

Cuando se inicia mi kernel, aparte de la información importante útil, imprime mucha información de debugging, 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 más que un desarrollador / depurador de kernel.

He descubierto que puedo deshacerme de estos usando loglevel=5 como parámetro de arranque. Los loggings de debugging ya no se imprimen en el terminal, pero todavía están en dmesg y en syslog .

¿Es posible disminuir la verbosidad del logging de arranque globalmente, de modo que dmesg y syslog no se inunden con esta información inútil?

Estoy usando kernel comstackdo 3.18

SOLUCIÓN ACEPTADA

Resulta que poner las siguientes líneas en /etc/rsyslog.conf resolvió el problema para mí:

 kern.debug /dev/null & ~ 

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

 kern.info; kern.debug /dev/null 

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

Además, dmesg se puede usar con la opción -n para mostrar posts con cierto nivel de logging.

Algunos de los loggings están impresos por printk () que no se pudo apagar. Y algunos están impresos por pr_debug (), que pueden desactivarse según la configuration del kernel. El comportamiento de pr_debug () es controlado por la característica de debugging dinámica. Si se configura CONFIG_DYNAMIC_DEBUG , todas las llamadas a pr_debug () se pueden habilitar / deshabilitar dinámicamente por cada sitio de llamada. El detalle de la debugging dinámica está aquí . Si CONFIG_DYNAMIC_DEBUG no está configurado, pero DEBUG está definido en el file fuente, pr_debug () funciona como printk () . Si ambos no están definidos, pr_debug no hará nada.

Aquí está la definición en kernel:

 #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 configuration de su kernel y descubra de dónde provienen estos loggings. Entonces sabrá cómo desactivarlo.

Además de configurar el loglevel de loglevel del KCL, también puede modificar el kernel.printk sysctl 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 loggings de debugging inútiles y, por lo tanto, hacen que las advertencias reales y los errores sean más fáciles de pasar por alto.

Solo usaría logrotate en un trabajo cron para mover los files fuera del path 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 } 

Entonces estás empezando de cero, por así decirlo, con los datos de debugging limitados a los loggings.