カーネル起動ログの詳細レベルを下げます。

カーネル起動ログの詳細レベルを下げます。

カーネルが起動すると、便利で重要な情報に加えて、次のような多くのデバッグ情報が印刷されます。

....
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私は起動引数として使用してこれらの問題を取り除くことができることを発見しました。デバッグログは端末に印刷されなくなりますが、まだin dmesg/ out状態ですsyslog

この無駄な情報に圧倒されないように、dmesg起動ログの詳細をグローバルに減らすことは可能ですか?syslog

自己コンパイルされたカーネルを使用しています。3.18

許容可能なソリューション

次の行を追加すると、/etc/rsyslog.conf問題が解決することがわかりました。

kern.debug   /dev/null
& ~

答え1

システムログの場合は、次の行を追加できます/etc/syslog.conf

kern.info; kern.debug   /dev/null

カーネル .info および .debug メッセージを削除します (削除するには loglevel=5 を使用)。

特定のログレベルのメッセージを表示するdmesgオプションと一緒に使用することもできます。-n

答え2

一部のログは次のように印刷されます。印刷()オフにすることはできません。一部が印刷されています。pr_debug()カーネル構成によっては無効にすることができます。行動pr_debug()動的デバッグ機能によって制御されます。もしCONFIG_DYNAMIC_DEBUGすべての設定が完了したらpr_debug()通話サイトに応じて、通話を動的に有効/無効にすることができます。動的デバッグの詳細は次のとおりです。ここ。もしCONFIG_DYNAMIC_DEBUG設定されていませんが、デバッグソースファイルで定義されており、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

したがって、カーネル構成を確認し、これらのログのソースを見つけます。これにより、無効にする方法がわかります。

答え3

KCL の設定に加えて、loglevel以下を調整することもできます。kernel.printkシステム制御最大レベルは、必要なものを反映し、起動中に変更されません。

コメントの追加の説明に関して:

問題は、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
}

その後、再起動して制限付きデバッグデータをログにダンプします。

関連情報