커널 부팅 로그 상세 수준 감소 0 base 0000000000 mask 7E00000000 write-back … kernel: [0.00000]

유용한 중요한 정보를 제외하고 커널이 부팅되면 다음과 같은 많은 디버깅 정보가 인쇄됩니다.

....
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부팅 매개 변수 로 사용하여 이들을 제거 할 수 있음을 발견했습니다 . 디버깅 로그는 더 이상 터미널에 인쇄되지 않지만 여전히 dmesgsyslog있습니다.

그것은 너무, 전 세계적으로 부팅 로그 상세를 감소하는 것이 가능 dmesg하고 syslog,이 쓸모없는 정보에 의해 침수되지 않습니까?

자체 컴파일 커널을 사용하고 있습니다 3.18

수용 솔루션

/etc/rsyslog.conf나에게 문제 를 해결하기 위해 다음 줄을 넣는 것으로 나타났습니다 .

kern.debug   /dev/null
& ~



답변

syslog의 경우 다음 행을 추가 할 수 있습니다 /etc/syslog.conf.

kern.info; kern.debug   /dev/null

커널 .info 및 .debug 메시지를 버립니다 (loglevel = 5로 버림)

또한 특정 로그 수준의 메시지를 표시 dmesg하는 옵션과 함께 사용할 수 있습니다 -n.


답변

일부 로그는 printk () 로 인쇄되어 해제 할 수 없습니다. 그리고 일부는 pr_debug ()에 의해 인쇄되며 커널 구성에 따라 꺼질 수 있습니다. pr_debug () 의 동작은 동적 디버그 기능에 의해 제어됩니다. 경우 CONFIG_DYNAMIC_DEBUG이 설정되어, 모든 pr_debug () 호출을 동적으로 할 수 있습니다 활성화 / 당 callsite 사용할 수 없습니다. 동적 디버그의 세부 사항은 여기에 있습니다 . 경우 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

따라서 커널 구성을 확인하고 이러한 로그의 출처를 찾으십시오. 그런 다음 비활성화하는 방법을 알게됩니다.


답변

loglevelKCL에서 설정하는 것 외에도 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
}

그런 다음 로그에 대한 디버그 데이터 덤프가 제한되어 새로 시작됩니다.


답변