カーネルが起動すると、便利で重要な情報に加えて、次のような多くのデバッグ情報が印刷されます。
....
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
}
その後、再起動して制限付きデバッグデータをログにダンプします。