कर्नेल बूट लॉग वर्बोसिटी स्तर को कम करें


9

जब मेरे कर्नेल बूट, उपयोगी महत्वपूर्ण जानकारी के अलावा, यह बहुत डिबगिंग जानकारी प्रिंट करता है, जैसे कि

....
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बूट पैरामीटर के रूप में उपयोग करके इनसे छुटकारा पा सकता हूं । डिबगिंग लॉग अब टर्मिनल पर मुद्रित नहीं होते हैं, लेकिन वे अभी भी अंदर dmesgऔर अंदर हैं syslog

यह विश्व स्तर पर बूट लॉग शब्दाडंबर कम करने के लिए, ताकि संभव है dmesgऔर syslogयह बेकार जानकारी से बाढ़ आ गई नहीं कर रहे हैं?

मैं स्वयं संकलित कर्नेल का उपयोग कर रहा हूं 3.18

स्वीकृत समाधान

/etc/rsyslog.confमेरे लिए समस्या को हल करने के लिए निम्न पंक्तियाँ डालते हुए बाहर निकलता है:

kern.debug   /dev/null
& ~

वास्तविक समस्याएं क्या हैं जिन्हें आप हल करने की कोशिश कर रहे हैं? बहुत बड़े लॉगफाइल्स? यह पूछने के बाद से कि मुझे इस जानकारी को लॉग में रखने में कोई समस्या नहीं है जो आमतौर पर मनुष्यों द्वारा नहीं पढ़ी जाती है और जिनके आकार में वृद्धि तुच्छ है।
हेन्नेस

@ हेनीज़ - समस्या यह है कि, syslogऔर dmesgबेकार डिबगिंग लॉग के साथ बाढ़ आ गई है, और जिससे वास्तविक चेतावनियों और त्रुटियों को अनदेखा करना आसान हो गया है। इसके अलावा, dmesgऔर syslogमनुष्यों (यानी प्रशासक) द्वारा पढ़ा जाना चाहिए। यही उनका पूरा उद्देश्य है।
मार्टिन वेगाटर

महत्वपूर्ण जानकारी बाढ़ के बारे में चिंता एक अच्छा बिंदु है।
हेन्नेस

1
आप सुपरसुअर स्टैक-एक्सचेंज वेबसाइट पर इस सवाल से रूचि ले सकते हैं: कर्नेल संदेशों को मेरे कंसोल को बाढ़ने से कैसे रोकें?
प्रति

जवाबों:


5

Syslog के लिए आप निम्नलिखित पंक्ति जोड़ सकते हैं /etc/syslog.conf:

kern.info; kern.debug   /dev/null

यह कर्नेल .info और .debug संदेश (जिसे loglevel = 5 से हटा दिया जाता है) को छोड़ देगा

इसके अलावा, कुछ लॉजेल के साथ संदेश दिखाने के लिए dmesgविकल्प के साथ उपयोग किया जा सकता है -n


4

कुछ लॉग प्रिंट () द्वारा प्रिंट किए जाते हैं जिन्हें आप बंद नहीं कर सकते। और कुछ को pr_debug () द्वारा प्रिंट किया जाता है जिसे बंद किया जा सकता है यह कर्नेल के कॉन्फ़िगरेशन पर निर्भर करता है। Pr_debug () का व्यवहार गतिशील डीबग सुविधा द्वारा नियंत्रित किया जाता है। यदि CONFIG_DYNAMIC_DEBUG सेट है, तो सभी pr_debug () कॉल को गतिशील रूप से सक्षम / अक्षम प्रति-कॉल किया जा सकता है। डायनामिक डिबग का विस्तार यहां है । यदि CONFIG_DYNAMIC_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

तो, अपने कर्नेल कॉन्फ़िगरेशन की जाँच करें और पता करें कि ये लॉग कहाँ से आते हैं। फिर आपको पता चल जाएगा कि इसे कैसे निष्क्रिय करना है।


यह भी न भूलें echo 8 > /proc/sys/kernel/printk: stackoverflow.com/questions/28936199/…
Ciro Santilli 审查 stack stack stack

0

loglevelKCL से सेटिंग के अलावा , आप kernel.printksysctl को भी ट्वीक कर सकते हैं ताकि अधिकतम स्तर यह दर्शाता है कि आप क्या चाहते हैं और बूट के दौरान बना रहता है।

इस टिप्पणी में आगे स्पष्टीकरण के रूप में:

समस्या यह है, कि syslog और dmesg बेकार डिबगिंग लॉग से भर गए हैं, और जिससे वास्तविक चेतावनियों और त्रुटियों को अनदेखा करना आसान हो गया है।

मैं रिबूट केlogrotate बाद फाइलों को बाहर ले जाने के लिए क्रॉन जॉब में इस्तेमाल करूंगा :

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
}

फिर आप नए सिरे से शुरुआत कर रहे हैं, इसलिए बोलने के लिए, लॉग में सीमित डिबग डेटा के साथ।


मुझे खेद है, लेकिन सुझाव logrotateपूरी तरह से याद आती है। मेरी समस्या यह नहीं है कि मेरे लॉगफ़ाइल बहुत बड़े हैं, और मैं डिस्क स्थान से बाहर चल रहा हूं। इसके बजाय, समस्या यह है कि उन लॉगफ़ाइल्स में डिबगिंग जानकारी उपयोगी जानकारी को कम सुलभ बनाती है।
मार्टिन वेगाटर

सही। लॉग को स्थानांतरित करने के लिए लॉगट्रोट का उपयोग करें जो कि रास्ते से हटकर हो, ताकि बूट के बाद आपके पास एक खाली लॉग फ़ाइल हो, ताकि आप देख सकें कि क्या मायने रखता है। यहां लॉगोट्रेट का मेरा उपयोग विहित नहीं है: यदि आप चाहें तो एमवी का उपयोग करें। मुद्दा यह है कि जल्द से जल्द बूट के माध्यम से बकवास से बाहर निकलना है।
बिशप

जब तक आप इन संदेशों को बूट समय समस्याओं का अस्पष्ट मतलब है? किस मामले में, स्वीकृत समाधान आदर्श लगता है।
बिशप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.