แนวคิดของ "เคอร์เนลบัฟเฟอร์บัฟเฟอร์", "ระดับผู้ใช้", "ระดับการบันทึก" คืออะไร


35

ฉันมักจะเห็นคำว่า "kernel ring buffer", "ระดับผู้ใช้", "ระดับการบันทึก" และคำอื่น ๆ ปรากฏขึ้นพร้อมกัน เช่น

/ var / log / dmesg มีข้อมูลบัฟเฟอร์เคอร์เนลเคอร์เนล

/var/log/kern.log มีเฉพาะข้อความของเคอร์เนลของ loglevel ใด ๆ

/var/log/user.log มีข้อมูลเกี่ยวกับบันทึกระดับผู้ใช้ทั้งหมด

พวกเขาทั้งหมดเกี่ยวกับบันทึกหรือไม่ พวกเขาเกี่ยวข้องกันอย่างไรและแตกต่างกันอย่างไร

โดย "ระดับ" ฉันจะจินตนาการถึงลำดับขั้นของหลายระดับหรือไม่

"ระดับผู้ใช้" เกี่ยวข้องกับ "พื้นที่ผู้ใช้" หรือไม่

พวกมันเกี่ยวข้องกับrunlevelหรือวงแหวนป้องกันบ้างไหม?

คำตอบ:


41

ใช่ทั้งหมดนี้เกี่ยวข้องกับการบันทึก ไม่ไม่มีส่วนเกี่ยวข้องกับ runlevel หรือ "protection ring"

เคอร์เนลเก็บบันทึกไว้ในวงแหวนบัฟเฟอร์ เหตุผลหลักสำหรับสิ่งนี้คือเพื่อให้บันทึกจากการเริ่มต้นระบบได้รับการบันทึกจนกระทั่ง syslog daemon ได้รับโอกาสในการเริ่มต้นและรวบรวมพวกเขา มิฉะนั้นจะไม่มีบันทึกของบันทึกใด ๆ ก่อนการเริ่มต้น syslog daemon เนื้อหาของบัฟเฟอร์แหวนที่สามารถมองเห็นได้ตลอดเวลาโดยใช้dmesgคำสั่งและเนื้อหาของมันยังจะถูกบันทึกไว้/var/log/dmesgเช่นเดียวกับภูต syslog จะเริ่มต้นขึ้น

บันทึกทั้งหมดที่ไม่ได้มาจากเคอร์เนลจะถูกส่งไปเนื่องจากถูกสร้างไปยัง syslog daemon ดังนั้นจึงไม่ถูกเก็บไว้ในบัฟเฟอร์ใด ๆ บันทึกเคอร์เนลจะถูกหยิบขึ้นมาโดย syslog daemon ตามที่สร้างขึ้น แต่จะถูกบันทึกต่อไป

ระดับการบันทึกสามารถดูได้ในsyslog (3) manpageและมีดังนี้:

  • LOG_EMERG : ระบบใช้ไม่ได้
  • LOG_ALERT : ต้องดำเนินการทันที
  • LOG_CRIT : เงื่อนไขที่สำคัญ
  • LOG_ERR : เงื่อนไขข้อผิดพลาด
  • LOG_WARNING : เงื่อนไขการเตือน
  • LOG_NOTICE : เงื่อนไขปกติ แต่สำคัญ
  • LOG_INFO : ข้อความแจ้งข้อมูล
  • LOG_DEBUG : ข้อความระดับการแก้ปัญหา

แต่ละระดับถูกออกแบบมาให้ "สำคัญ" น้อยกว่าระดับก่อนหน้า ไฟล์บันทึกที่บันทึกบันทึกในระดับหนึ่งจะบันทึกไฟล์บันทึกในทุกระดับที่สำคัญกว่าด้วย

ความแตกต่างระหว่าง/var/log/kern.logและ/var/log/mail.log(ตัวอย่าง) ไม่ได้เกี่ยวข้องกับระดับ แต่มีสิ่งอำนวยความสะดวกหรือหมวดหมู่ หมวดหมู่จะได้รับการบันทึกไว้ใน manpage


ขอบคุณ (1) "ระดับผู้ใช้" เกี่ยวข้องกับ "พื้นที่ผู้ใช้" หรือไม่ (2) จากสิ่งที่คุณกล่าวว่า/var/log/kern.logและ/var/log/dmesgควรจะมีเนื้อหาเดียวกับข้อความเคอร์เนล? แต่เนื้อหาไม่เหมือนกัน
ทิม

"ระดับผู้ใช้" ไม่ใช่สิ่งที่ฉันรู้ มีระดับ syslog ซึ่งเป็นระดับ "สำคัญ" ของข้อความ syslog (ฉันแสดงรายการระดับ) และมันไม่มีอะไรเกี่ยวข้องกับพื้นที่ผู้ใช้เทียบกับพื้นที่เคอร์เนล /var/log/kern.logควรมีdmesgเนื้อหา (อาจจัดรูปแบบแตกต่างกัน) จากเวลาบูต นอกจากจะใช้เวลานานแล้วตั้งแต่การบู๊ตและเนื้อหาเหล่านั้นถูกหมุนเวียนออกไป
Celada

คำถามที่สองของฉันคือ: ในขณะที่dmesgพิมพ์ออกค่าปัจจุบันของ buffer แหวนเคอร์เนลที่ผ่านมา / /var/log/dmesgค่าเก่าของบัฟเฟอร์ที่ถูกเก็บไว้ใน ดังนั้นdmesgเอาต์พุตจึงเป็นเพียงส่วนหนึ่งของ/var/log/dmesgเนื้อหาล่าสุด และมีความแตกต่างกัน ถ้าเช่นนั้นเนื้อหาของ/var/log/dmesg(ไม่ใช่dmesgในความคิดเห็นของคุณ) และ/var/log/kernel.logเหมือนกันหรือไม่
ทิม

ขึ้นอยู่กับ! ไม่นานหลังจากบูตที่เนื้อหามีแนวโน้มที่จะใกล้ถึงจุดสิ้นสุดของ/var/log/dmesg /var/log/kern.logในเวลาต่อมามันจะไม่อยู่ตรงนั้นมันจะหมุนออกไป โดยทั่วไป/var/log/kern.logจะมีบันทึกที่เก่ากว่าสแนปชอตที่กำหนดใด ๆ ของบัฟเฟอร์ริงของเคอร์เนลและยังบันทึกที่ใหม่กว่าสแนปชอต
Celada


17

หากต้องการตอบคำถามแรกของคุณอย่างน้อยในส่วนเกี่ยวกับdmesg:

/var/log/dmesg เก็บเนื้อหาของ 'kernel ring buffer' ซึ่งเป็นบัฟเฟอร์หน่วยความจำที่สร้างโดยเคอร์เนลเมื่อทำการบู๊ตเพื่อเก็บข้อมูลบันทึกที่สร้างขึ้นทันทีที่คุณผ่านขั้นตอน bootloader

วงแหวนบัฟเฟอร์เป็นบัฟเฟอร์ชนิดพิเศษที่มีขนาดคงที่เสมอโดยลบข้อความเก่าที่สุดเมื่อมีข้อความใหม่เข้ามาข้อความที่เก็บไว้ในบัฟเฟอร์วงแหวนเคอร์เนลคือสิ่งที่คุณเห็นว่ากระพริบบนหน้าจอเมื่อคุณบู๊ต Unix เป็นครั้งแรก เครื่องที่เหมือนอยู่ในโหมดคอนโซล (ไม่มีหน้าจอสาดพลีมั ธ ) บันทึกเคอร์เนลจะถูกเก็บไว้ในบัฟเฟอร์หน่วยความจำเพื่อให้บันทึกการบูตมีที่ใดที่หนึ่งจนกว่าระบบจะทำการบูตตนเองจนถึงจุดที่syslogdaemon สามารถเข้าครอบครองได้

dmesgภายใต้ Linux เป็นส่วนหนึ่งของutil-linuxแพ็คเกจเครื่องมือการบำรุงรักษาระบบที่เผยแพร่โดย kernel.org ตามdmesg(1)หน้าคน

dmesg ใช้สำหรับตรวจสอบหรือควบคุมบัฟเฟอร์ของเคอร์เนล

ดู: http://www.computerhope.com/unix/dmesg.htm

ภายใต้ 'systemd' init คำสั่งนี้สามารถใช้เพื่อพิมพ์เคอร์เนลบัฟเฟอร์บัฟเฟอร์:
# journalctl --dmesg or journalctl -k, thxs สำหรับการแก้ไข @don_crissti

ออกคำสั่งdmesg | grep -i ethernet เช่นจะแยกเคอร์เนลบัฟเฟอร์แหวนสำหรับสตริง 'อีเธอร์เน็ต'

ฉันหวังว่านี่จะช่วยได้อย่างน้อยในส่วนแรกของคำถามของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.