วิธีการอ่าน dmesg จากเซสชั่นก่อนหน้า? (dmesg.0)


29

dmesg /var/log/dmesgเป็นคำสั่งในการอ่านเนื้อหาจาก สิ่งที่ดีเมื่อเทียบกับless /var/log/dmesgคือฉันสามารถใช้แฟล็ก -T สำหรับเอาต์พุตเวลาที่มนุษย์อ่านได้

ตอนนี้ฉันอยากจะดู/var/log/dmesg.0เพื่อดูว่าคอมพิวเตอร์ของฉันผิดพลาด ไฟล์มีบันทึกจากเซสชันก่อนหน้า แต่ฉันต้องการใช้แฟล็ก -T จากคำสั่ง dmesg หรือสิ่งที่เทียบเท่า

ความคิดใด ๆ ได้อย่างไร

ฉันไม่รังเกียจเครื่องมือกราฟิก แต่สิ่งที่ดีที่สุดคือโซลูชัน cli

คำตอบ:


28

ให้ชัดเจนขึ้นความเข้าใจผิดพื้นฐานไม่ได้อ่านจากdmesg /var/log/dmesgมันอ่านโดยตรงจากบัฟเฟอร์วงแหวนเคอร์เนลและให้ข้อความ N ล่าสุด ในตอนท้ายของกระบวนการบูทระบบdmesgจะเรียกใช้เพื่อเขียนข้อความบู๊ตไปยัง/var/log/dmesg(โดยที่ไฟล์เวอร์ชันเก่านั้นถูกหมุนในลักษณะปกติ)

เมื่อคุณมีการทำงาน syslog ( syslogd, rsyslogd, syslog-ngฯลฯ ) มันอ่านจาก kernel buffer /var/log/kern.logและเขียนไปยังแฟ้มเช่น (สำหรับ Debian ระบบอื่น ๆ จะแตกต่างกัน) สมมติว่าระบบของคุณสามารถเขียนลงดิสก์และล้างบัฟเฟอร์ของดิสก์ก่อนที่จะเกิดข้อผิดพลาดนั่นคือที่ที่คุณจะพบเสียงกรีดร้องที่กำลังจะตายของเคอร์เนล

ในระบบ Debian ของฉัน/var/log/kern.logไฟล์นั้นมีการประทับเวลาที่มนุษย์อ่านได้


1
ฉันคิดว่านี่ตอบคำถามของฉันขอบคุณ! น่าเสียดายที่ฉันยังไม่สามารถคิดออกว่าเหตุใดจึงหยุดทำงานชั่วคราว แต่นั่นเป็นอีกเรื่องหนึ่ง
donquixote

หนึ่งในสิ่งที่เครื่องของฉันนอกเหนือไปจากdmesgเขียนkern.logโดยเฉพาะ daemons ต่อไปนี้โดยเฉพาะ daemons ต่อไปนี้โดยเฉพาะgnome-keyring-d,goa-daemon,gvfsd,gvfsd-network,gvfs-gphoto2-vo,NetworkManager,upowerd
Att Righ

@AttRigh สิ่งเดียวที่ควรจะเขียนไปยังไฟล์นั้นคือเคอร์เนล คุณอาจต้องการถามคำถามใหม่
roaima

@roima น่าสนใจ ... ฉันไม่มีคำถามที่จะถามจริงๆเพราะฉันมีความสุขjournalctlที่ได้รับบันทึก! ฉันแค่คิดว่าคนอื่นอาจสนใจเรื่องความไม่ลงรอยกันนี้ มองไปที่ระบบของฉันฉัน) มันใช้rsyslogเข้าสู่ระบบเพื่อkern.logใช้รายการต่อไปนี้kern.* -/var/log/kern.logเรียกร้องให้debsums -eยืนยันว่าไม่มีแฟ้มการกำหนดค่าของฉันที่เกี่ยวข้องกับrsyslogหรือsystemdได้รับการแก้ไข ( serverfault.com/questions/90400/... ) รุ่นของฉัน rsyslog คือ8.24.0-1, และฉันใช้เดเบียนยืด
Att Righ

@AttRigh คุณอาจต้องการอ่านunix.stackexchange.com/a/294206/100397
roaima

34

แม้ว่าจะช้าไปหน่อยสำหรับ OP ...

ฉันใช้ Fedora แต่ถ้าระบบของคุณใช้journalctlคุณสามารถรับข้อความเคอร์เนล (บันทึก dmesg) ได้อย่างง่ายดายจากการปิด / การล่มก่อนหน้า (ในdmesg -Tรูปแบบ) ผ่านต่อไปนี้

ตัวเลือก:

  • -k (dmesg)
  • -b < boot_number > (รีบูตกี่ครั้งที่ผ่านมา 0, -1, -2, ฯลฯ )
  • -o สั้นแม่นยำ (dmesg -T)
  • -p ลำดับความสำคัญกรองตามลำดับความสำคัญ (4 เพื่อกรองการแจ้งเตือนและข้อมูล)

หมายเหตุ: นอกจากนี้ยังมี-o shortและ-o short-isoที่ให้คุณวันเท่านั้นและวันที่เวลาในรูปแบบ iso ตามลำดับ

คำสั่ง:

  • บูตปัจจุบัน: journalctl -o short-precise -k
  • บูตครั้งสุดท้าย: journalctl -o short-precise -k -b -1
  • ก่อนหน้าสองรองเท้า: journalctl -o short-precise -k -b -2
  • และอื่น ๆ

ตัวอย่างผลลัพธ์:

Feb 18 21:41:26.917400 localhost.localdomain kernel: usb 2-4: USB disconnect, device number 12
Feb 18 21:41:26.917678 localhost.localdomain kernel: usb 2-4.1: USB disconnect, device number 13
Feb 18 21:41:27.246264 localhost.localdomain kernel: usb 2-4: new high-speed USB device number 22 using xhci_hcd
Feb 18 21:41:27.419395 localhost.localdomain kernel: usb 2-4: New USB device found, idVendor=05e3, idProduct=0610
Feb 18 21:41:27.419581 localhost.localdomain kernel: usb 2-4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 18 21:41:27.419739 localhost.localdomain kernel: usb 2-4: Product: USB2.0 Hub
Feb 18 21:41:27.419903 localhost.localdomain kernel: usb 2-4: Manufacturer: GenesysLogic

จำนวนรองเท้าที่คุณสามารถมองย้อนกลับไปสามารถดูได้จากด้านล่าง

  • journalctl --list-boot

ผลลัพธ์ของjournalctl --list-bootดูเหมือนว่าต่อไปนี้

 -6 cc4333602fbd4bbabb0df2df9dd1f0d4 Sun 2016-11-13 08:32:58 JST—Thu 2016-11-17 07:53:59 JST
 -5 85dc0d63e6a14b1b9a72424439f2bab4 Fri 2016-11-18 22:46:28 JST—Sat 2016-12-24 02:38:18 JST
 -4 8abb8267e06b4c26a2466562f3422394 Sat 2016-12-24 08:10:28 JST—Sun 2017-02-12 12:31:20 JST
 -3 a040f5e79a754b2a9055ac2598d430e8 Sun 2017-02-12 12:31:36 JST—Sat 2017-02-18 21:31:04 JST
 -2 6c29e3b6f6a14f549f06749f9710e1f2 Sat 2017-02-18 21:31:15 JST—Sat 2017-02-18 22:36:08 JST
 -1 42fd465eacd345f7b595069c7a5a14d0 Sat 2017-02-18 22:51:22 JST—Sat 2017-02-18 23:08:30 JST  
  0 26ea10b064ce4559808509dc7f162f07 Sat 2017-02-18 23:09:25 JST—Sun 2017-02-19 00:57:35 JST

4
มาสายสำหรับ OP ไม่เคยมาสายสำหรับชาว Google ในอนาคต!
Qian

3

ใน Debian dmesgบันทึกจะถูกจัดเก็บเป็น:

  • /var/log/dmesg (สดและไม่บีบอัด)
  • /var/log/dmesg.0 (เซสชันล่าสุดและไม่มีการบีบอัด)
  • /var/log/dmesg.1.gz (สุดท้ายและบีบอัด)
  • /var/log/dmesg.2.gz (antepenultimate และการบีบอัด)
  • /var/log/dmesg.3.gz (ที่ 3 จากที่ผ่านมาและที่บีบอัด)
  • /var/log/dmesg.4.gz (ที่ 4 จากที่ผ่านมาและที่ถูกบีบอัด)

Iif คุณมีใบอนุญาตคุณสามารถอ่านได้ด้วยcat, moreหรือlessสำหรับคนธรรมดาและzcat, zmoreหรือzlessสำหรับคนที่ถูกบีบอัด


นี่ไม่ใช่กรณีของ debian ของฉัน (การทดสอบ - ยืด, ไม่ปรับเปลี่ยนโดยเฉพาะ, เป็นข้อมูลล่าสุด ณ วันนี้) สิ่งนี้อาจเกี่ยวข้องกับsystemdตั้งแต่ dmesgถูกบันทึกไว้ใน systemd (ดูคำตอบด้านล่าง)
Att Righ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.