커널이 부팅되면 유용하고 중요한 정보 외에도 다음과 같은 많은 디버깅 정보를 인쇄합니다.
....
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
}
그런 다음 다시 시작하여 제한된 디버그 데이터를 로그에 덤프합니다.