зниження рівня багатослідовості журналу завантаження ядра


9

Коли моє ядро ​​завантажується, крім корисної важливої ​​інформації, воно друкує багато інформації про налагодження, наприклад

....
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)

і багато іншого.

Я не бачу, як це може бути корисно для когось, крім розробника / відладчика ядра.

Я виявив, що я можу позбутися від них, використовуючи loglevel=5параметр завантаження. Журнали налагодження більше не друкуються на терміналі, але вони все ще знаходяться в dmesgі в syslog.

Чи можна зменшити багатослівність журналу завантаження на глобальному рівні , так що dmesgі syslogНЕ затоплене цієї не дуже інформацією?

Я використовую самокомпільоване ядро 3.18

ПРИЙМЕНО РІШЕННЯ

Виходить, розміщуючи наступні рядки, щоб /etc/rsyslog.confвирішити проблему для мене:

kern.debug   /dev/null
& ~

Які насправді проблеми, які ви намагаєтеся вирішити? Занадто великі журнали? Запитуючи, оскільки я не бачу проблем із тим, щоб мати цю інформацію в журналі, який зазвичай не читається людьми і збільшення розміру якого є тривіальним.
Hennes

@Hennes - проблема полягає в тому, що syslogі dmesgвони заповнені марними журналами налагодження, і тим самим полегшується недогляд справжніх попереджень та помилок. Крім того, dmesgі syslogповинні бути прочитані людьми (тобто адміністратора). У цьому їхня ціль.
Мартін Вегтер

Турбота про затоплення важливої ​​інформації є хорошим моментом.
Хеннес

1
Вас може зацікавити це запитання на веб-сайті Superuser Stack-Exchange: Як запобігти появі повідомлень ядра від моєї консолі?
переслідування

Відповіді:


5

Для syslog Ви можете додати такий рядок до /etc/syslog.conf:

kern.info; kern.debug   /dev/null

Він відкине ядро ​​.info та .debug повідомлення (які відкидаються loglevel = 5)

Крім того, dmesgможна використовувати опцію -nдля показу повідомлень з певним рівнем гугл.


4

Деякі журнали друкуються printk (), який ви не можете вимкнути. А деякі надрукуються pr_debug (), який може бути вимкнено, залежить від конфігурації ядра. Поведінка pr_debug () контролюється функцією динамічної налагодження. Якщо встановлено CONFIG_DYNAMIC_DEBUG , то всі дзвінки pr_debug () можуть бути динамічно включені / відключені на кожен виклик. Подробиці динамічної налагодження тут . Якщо CONFIG_DYNAMIC_DEBUG не встановлено, але DEBUG визначено у вихідному файлі, pr_debug () працює як printk () . Якщо обидва не визначені, pr_debug нічого не зробить.

Ось визначення в ядрі:

#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

Отже, перевірте конфігурацію ядра та знайдіть, звідки беруться ці журнали. Тоді ви дізнаєтесь, як її відключити.


Також не забудьте echo 8 > /proc/sys/kernel/printk: stackoverflow.com/questions/28936199 / ...
Чіро Сантіллі冠状病毒审查六四事件法轮功

0

Окрім встановлення loglevelз KCL, ви також можете налаштувати kernel.printksysctl, щоб максимальний рівень відображав те, що ви хочете, і зберігається під час завантаження.

Щодо цього додаткового уточнення в коментарі:

Проблема полягає в тому, що syslog і dmesg заповнені марними журналами налагодження, і тим самим полегшується недогляд справжніх попереджень та помилок.

Я просто використовую logrotateв роботі cron, щоб перемістити файли з шляху після перезавантаження :

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
}

Тоді ви починаєте свіжий, так би мовити, обмежений скидання даних про налагодження до журналів.


Мені шкода, але припущення logrotateповністю пропускає суть. Моя проблема не в тому, що мої реєстраційні файли занадто великі, а в тому, що мені не вистачає місця на диску. Натомість проблема полягає в тому, що інформація про налагодження в цих журналах робить корисну інформацію менш доступною.
Мартін Вегтер

Правильно. Використовуйте logrotate, щоб перемістити журнал із усім, що лайно, з шляху, щоб у вас був порожній файл журналу після завантаження, щоб ви могли бачити, що має значення. Моє використання логротату тут не є канонічним: використовуйте mv, якщо хочете. Сенс у тому, щоб якнайшвидше після завантаження вийти з ладу.
єпископ

Якщо ви не маєте на увазі ці повідомлення незрозумілі проблеми з завантаженням? У такому випадку прийняте рішення видається ідеальним.
єпископ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.