mengurangi tingkat verbositas log boot kernel


9

Ketika kernel saya melakukan booting, selain dari informasi penting yang bermanfaat, kernel ini mencetak banyak informasi debug, seperti

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

dan masih banyak lagi.

Saya tidak melihat bagaimana ini bisa bermanfaat bagi siapa pun selain pengembang kernel / debugger.

Saya telah menemukan, bahwa saya dapat menyingkirkan ini dengan menggunakan loglevel=5parameter boot. Log debugging tidak lagi dicetak pada terminal, tetapi mereka masih masuk dmesgdan masuk syslog.

Apakah mungkin untuk mengurangi verbositas log boot secara global, sehingga dmesgdan syslogtidak dibanjiri oleh informasi yang tidak berguna ini?

Saya menggunakan kernel yang dikompilasi sendiri 3.18

SOLUSI YANG DITERIMA

Ternyata, menempatkan baris berikut untuk /etc/rsyslog.confmemecahkan masalah bagi saya:

kern.debug   /dev/null
& ~

Apa masalah sebenarnya yang Anda coba selesaikan? File log terlalu besar? Bertanya karena saya melihat tidak ada masalah dengan memiliki informasi ini dalam log yang biasanya tidak dibaca oleh manusia dan yang peningkatan ukurannya sepele.
Hennes

@ Hennes - masalahnya adalah, itu syslogdan dmesgdibanjiri dengan log debug yang tidak berguna, dan dengan demikian membuat peringatan dan kesalahan yang nyata lebih mudah untuk diabaikan. Selain itu, dmesgdan syslogharus dibaca oleh manusia (yaitu administrator). Itulah seluruh tujuan mereka.
Martin Vegter

Kekhawatiran akan membanjirnya informasi penting adalah poin yang bagus.
Hennes

1
Anda mungkin tertarik dengan pertanyaan ini di situs web Superuser Stack-Exchange: Bagaimana cara menghentikan pesan kernel dari membanjiri konsol saya?
perror

Jawaban:


5

Untuk syslog Anda dapat menambahkan baris berikut ke /etc/syslog.conf:

kern.info; kern.debug   /dev/null

Ini akan membuang pesan kernel .info dan .debug (yang dibuang dengan loglevel = 5)

Juga, dmesgdapat digunakan dengan opsi -nuntuk menampilkan pesan dengan loglevel tertentu.


4

Beberapa log dicetak dengan printk () yang tidak dapat Anda matikan. Dan beberapa dicetak oleh pr_debug () yang mungkin dimatikan tergantung pada konfigurasi kernel. Perilaku pr_debug () dikendalikan oleh fitur debug dinamis. Jika CONFIG_DYNAMIC_DEBUG diatur, maka semua panggilan pr_debug () dapat diaktifkan / dinonaktifkan secara dinamis per-panggilan-situs. Detail dari debug dinamis ada di sini . Jika CONFIG_DYNAMIC_DEBUG tidak disetel, tetapi DEBUG didefinisikan dalam file sumber, pr_debug () berfungsi seperti printk () . Jika keduanya tidak didefinisikan, pr_debug tidak akan melakukan apa pun.

Berikut ini definisi dalam 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

Jadi, periksa konfigurasi kernel Anda dan temukan dari mana log-log ini berasal. Maka Anda akan tahu cara menonaktifkannya.



0

Selain mengatur logleveldari KCL, Anda juga dapat mengubah kernel.printksysctl sehingga tingkat maksimum mencerminkan apa yang Anda inginkan dan tetap ada di seluruh boot.

Mengenai klarifikasi lebih lanjut ini dalam komentar:

masalahnya adalah bahwa syslog dan dmesg dibanjiri dengan log debug yang tidak berguna, dan dengan demikian membuat peringatan dan kesalahan yang nyata lebih mudah untuk diabaikan.

Saya hanya akan menggunakan logrotatetugas cron untuk memindahkan file setelah reboot :

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
}

Maka Anda mulai segar, dengan kata lain, dengan dumping data debug yang terbatas ke log.


Saya minta maaf, tetapi menyarankan logrotatebenar-benar melenceng. Masalah saya bukan karena file log saya terlalu besar, dan saya kehabisan ruang disk. Alih-alih, masalahnya adalah, informasi debug di file-file log membuat informasi yang berguna kurang diakses.
Martin Vegter

Baik. Gunakan logrotate untuk memindahkan log dengan semua omong kosong itu keluar, sehingga Anda memiliki file log kosong setelah boot, sehingga Anda dapat melihat apa yang penting. Penggunaan logrotate saya di sini bukan kanonik: gunakan mv jika Anda mau. Intinya adalah untuk mendapatkan omong kosong segera setelah booting mungkin.
Uskup

Kecuali Anda bermaksud bahwa pesan-pesan ini mengaburkan masalah waktu boot? Dalam hal ini, solusi yang diterima tampaknya ideal.
Uskup
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.