giảm mức độ chi tiết của nhật ký khởi động kernel


9

Khi kernel của tôi khởi động, ngoài các thông tin quan trọng hữu ích, nó sẽ in rất nhiều thông tin gỡ lỗi, chẳng hạn như

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

và nhiều hơn nữa

Tôi không thấy làm thế nào điều này có thể hữu ích cho bất kỳ ai khác ngoài nhà phát triển / gỡ lỗi kernel.

Tôi đã tìm thấy rằng tôi có thể loại bỏ những thứ này bằng cách sử dụng loglevel=5làm tham số khởi động. Nhật ký gỡ lỗi không còn được in trên thiết bị đầu cuối, nhưng chúng vẫn còn trong dmesgvà trong syslog.

Có thể giảm mức độ chi tiết của nhật ký khởi động trên toàn cầu, do đó dmesgsyslogkhông bị ngập trong thông tin vô dụng này?

Tôi đang sử dụng kernel tự biên dịch 3.18

GIẢI PHÁP ĐƯỢC CHẤP NHẬN

Hóa ra, đặt các dòng sau để /etc/rsyslog.confgiải quyết vấn đề cho tôi:

kern.debug   /dev/null
& ~

Các vấn đề thực tế mà bạn đang cố gắng giải quyết là gì? Logfiles quá lớn? Hỏi vì tôi thấy không có vấn đề gì với việc có thông tin này trong nhật ký mà con người thường không đọc và tăng kích thước là chuyện nhỏ.
Hennes

@ Hennes - vấn đề là, syslogdmesgtràn ngập các nhật ký gỡ lỗi vô dụng, và do đó làm cho các cảnh báo và lỗi thực sự dễ bị bỏ qua hơn. Bên cạnh đó, dmesgsyslognên được đọc bởi con người (tức là quản trị viên). Đó là toàn bộ mục đích của họ.
Martin Vegter

Quan tâm về lũ lụt thông tin quan trọng là một điểm tốt.
Hennes

1
Bạn có thể quan tâm đến câu hỏi này trên trang web Superuser Stack-Exchange: Làm thế nào để ngăn chặn các thông điệp kernel tràn ngập bảng điều khiển của tôi?
perror

Câu trả lời:


5

Đối với syslog Bạn có thể thêm dòng sau vào /etc/syslog.conf:

kern.info; kern.debug   /dev/null

Nó sẽ loại bỏ các thông báo kernel .info và .debug (được loại bỏ với loglevel = 5)

Ngoài ra, dmesgcó thể được sử dụng với tùy chọn -nđể hiển thị các tin nhắn với loglevel nhất định.


4

Một số nhật ký được in bằng printk () mà bạn không thể tắt nó. Và một số được in bởi pr_debug () có thể bị tắt tùy thuộc vào cấu hình của kernel. Hành vi của pr_debug () được kiểm soát bởi tính năng gỡ lỗi động. Nếu CONFIG_DYNAMIC_DEBUG được đặt, thì tất cả các lệnh gọi pr_debug () có thể được bật / tắt tự động cho mỗi cuộc gọi. Chi tiết về gỡ lỗi động là ở đây . Nếu CONFIG_DYNAMIC_DEBUG không được đặt, nhưng DEBUG được xác định trong tệp nguồn, pr_debug () hoạt động như printk () . Nếu cả hai không được xác định, pr_debug sẽ không làm gì cả.

Đây là định nghĩa trong kernel:

#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

Vì vậy, hãy kiểm tra cấu hình kernel của bạn và tìm xem các bản ghi này đến từ đâu. Sau đó, bạn sẽ biết làm thế nào để vô hiệu hóa nó.


Cũng đừng quên echo 8 > /proc/sys/kernel/printk: stackoverflow.com/questions/28936199/
Ciro Santilli 病毒 审查 六四 事件

0

Bên cạnh việc cài đặt logleveltừ KCL, bạn cũng có thể điều chỉnh kernel.printksysctl sao cho mức tối đa phản ánh những gì bạn muốn và duy trì trong suốt quá trình khởi động.

Để làm rõ hơn trong bình luận:

vấn đề là, syslog và dmesg tràn ngập các bản ghi gỡ lỗi vô dụng, và do đó làm cho các cảnh báo và lỗi thực sự dễ bị bỏ qua hơn.

Tôi chỉ sử dụng logrotatemột công việc định kỳ để di chuyển các tệp ra khỏi đường đi sau khi khởi động lại :

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
}

Sau đó, bạn đang bắt đầu mới, có thể nói, với dữ liệu gỡ lỗi hạn chế đổ vào nhật ký.


Tôi xin lỗi, nhưng đề nghị logrotatehoàn toàn bỏ lỡ điểm. Vấn đề của tôi không phải là logfiles của tôi quá lớn và tôi sắp hết dung lượng đĩa. Thay vào đó, vấn đề là, thông tin gỡ lỗi trong các logfile đó làm cho thông tin hữu ích ít bị truy cập hơn.
Martin Vegter

Đúng. Sử dụng logrotate để di chuyển nhật ký với tất cả những thứ nhảm nhí đó, để bạn có một tệp nhật ký trống sau khi khởi động, để bạn có thể thấy những gì quan trọng. Việc sử dụng logrotate của tôi ở đây không hợp quy: sử dụng mv nếu bạn muốn. Vấn đề là để có được crap ra khỏi đường ngay sau khi khởi động càng tốt.
giám mục

Trừ khi bạn có nghĩa là những thông điệp này che khuất vấn đề thời gian khởi động? Trong trường hợp đó, giải pháp được chấp nhận có vẻ lý tưởng.
giám mục
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.